var CAPICOM_STORE_OPEN_READ_ONLY=0;
var CAPICOM_CURRENT_USER_STORE=2;
var CAPICOM_CERTIFICATE_FIND_SHA1_HASH=0;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME=1;
var CAPICOM_CERTIFICATE_FIND_ISSUER_NAME=2;
var CAPICOM_CERTIFICATE_FIND_ROOT_NAME=3;
var CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME=4;
var CAPICOM_CERTIFICATE_FIND_EXTENSION=5;
var CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY=6;
var CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY=7;
var CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY=8;
var CAPICOM_CERTIFICATE_FIND_TIME_VALID=9;
var CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID=10;
var CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED=11;
var CAPICOM_CERTIFICATE_FIND_KEY_USAGE=12;
var CAPICOM_CERTIFICATE_TIME_EXPIRED=-2146762495;
var CAPICOM_CA_CERTIFICATE_LOST=-2146762486;
var CAPICOM_CERTIFICATE_DAMAGE=-2146889721;
var CAPICOM_VERIFY_SIGNATURE_ONLY=0;
var CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE=1;
var CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE=128;
var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME=0;
var CAPICOM_INFO_SUBJECT_SIMPLE_NAME=0;
var CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME=2;
var CAPICOM_ENCODE_BASE64=0;
var CAPICOM_ENCODE_BINARY=1;
var CAPICOM_E_CANCELLED=-2138568446;
var CERT_KEY_SPEC_PROP_ID=6;
var adTypeBinary=1;
var adTypeText=2;
var ERRSTR_OPEN_CERT_STORE_ABORTING="An error occurred while opening your personal certificate store, error:";
var ERRSTR_SIGN_CONTEN_ERROR="An error occurred when attempting to sign the content, the error was: ";
var ERRSTR_NO_CERT_BE_SELECTED="No Certificate has been selected.";
var ERRSTR_NO_CERT_MATCH="Not found!";
function findCertificateByHash(_1){
var _2=new ActiveXObject("CAPICOM.Store");
try{
_2.Open(CAPICOM_CURRENT_USER_STORE,"My",CAPICOM_STORE_OPEN_READ_ONLY);
}
catch(e){
if(e.number!=CAPICOM_E_CANCELLED){
alert(ERRSTR_OPEN_CERT_STORE_ABORTING+e.description);
return false;
}
}
var _3=_2.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH,_1);
return _3.Item(1);
}
function filterCertificates(_4,_5,_6){
var _7;
var _8;
try{
_7=new ActiveXObject("CAPICOM.Store");
_8=new ActiveXObject("CAPICOM.Certificates");
}
catch(e){
return false;
}
try{
_7.Open(CAPICOM_CURRENT_USER_STORE,"My",CAPICOM_STORE_OPEN_READ_ONLY);
_8=_7.Certificates.Find(CAPICOM_CERTIFICATE_FIND_TIME_VALID).Find(CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,CERT_KEY_SPEC_PROP_ID);
if(_4!=null&&_4!=""){
var _9=new ActiveXObject("CAPICOM.Certificates");
var _a,i,j;
_a=_4.split(",");
for(i=0;i<_a.length;++i){
var _b=_8.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,_a[i]);
for(j=1;j<=_b.Count;++j){
_9.Add(_b.Item(j));
}
}
_8=_9;
}
if(_8.Count>1&&_5!=null&&_5!=""){
_8=_8.Select(_5,_6,false);
}
}
catch(e){
if(e.number!=CAPICOM_E_CANCELLED){
alert(ERRSTR_OPEN_CERT_STORE_ABORTING+e.description);
return false;
}
}
return _8;
}
function displayCertInfo(_c,_d,_e){
if(_e!=null){
_c.value=_e.GetInfo(CAPICOM_INFO_SUBJECT_SIMPLE_NAME);
_c.hash=_e.Thumbprint;
_d.value=getUserID(_e.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME));
}else{
_c.value="";
_c.hash="";
_d.value="";
}
}
function getUserID(_f){
return _f.substring(0,_f.indexOf("@"));
}
function signedLoginData(_10,_11,_12){
var _13;
var _14;
var _15;
try{
_13=new ActiveXObject("CAPICOM.SignedData");
_14=new ActiveXObject("CAPICOM.Signer");
_15=new ActiveXObject("CAPICOM.Attribute");
}
catch(e){
alert("请安装USB KEY插件");
return false;
}
if(_10!=""){
var _16=_12;
_16+=" ";
_16+=_11;
_13.Content=_16;
try{
_14.Certificate=findCertificateByHash(_10);
var _17=new Date();
_15.Name=CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
_15.Value=_17.getVarDate();
_14.AuthenticatedAttributes.Add(_15);
var _18=_13.Sign(_14,false,CAPICOM_ENCODE_BASE64);
return _18;
}
catch(e){
if(e.number!=CAPICOM_E_CANCELLED){
alert(ERRSTR_SIGN_CONTEN_ERROR+e.description);
return false;
}
}
}else{
alert(ERRSTR_NO_CERT_BE_SELECTED+"没选择任何一个证书");
return false;
}
}
function selectCertificate(_19,_1a,_1b,_1c,_1d){
var _1e=filterCertificates(_19,_1c,_1d);
if(_1e.Count>0){
displayCertInfo(_1a,_1b,_1e.item(1));
}else{
alert(ERRSTR_NO_CERT_MATCH+" 找不到相关的证书, 请确认: \n"+"1. 插入USB KEY且安装USB驱动\n"+"2. 安装USB KEY 插件");
displayCertInfo(_1a,_1b);
}
}
function initCertificate(_1f,_20,_21,_22,_23,_24){
if(_1f!=null&&_1f!=""){
displayCertInfo(_21,_22,findCertificateByHash(_1f));
}else{
selectCertificate(_20,_21,_22,_23,_24);
}
}
function signMail(_25,_26,_27,_28){
var _29=findCertificateByHash(_27);
var _2a=new ActiveXObject("CAPICOM.Signer");
var _2b=new ActiveXObject("CAPICOM.SignedData");
var _2c=new ActiveXObject("CAPICOM.Attribute");
var _2d=new ActiveXObject("CAPICOM.Utilities");
_2a.Certificate=_29;
var _2e=new Date();
_2c.Name=CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
_2c.Value=_2e.getVarDate();
_2a.AuthenticatedAttributes.Add(_2c);
var _2f=_25.getDataToSigne(_26);
_2b.Content=_25.stringToBinary(_2f);
var _30=_2b.Sign(_2a,_26,CAPICOM_ENCODE_BASE64);
_25.setSignature(_30,_26,_28);
return _25;
}
function encryptMail(_31,_32){
var _33=new ActiveXObject("CAPICOM.EnvelopedData");
var cer;
for(cer in _32){
if(_32[cer]!=null&&_32[cer]!=""&&typeof (_32[cer])!="function"){
var _35=new ActiveXObject("CAPICOM.Certificate");
_35.Import(_32[cer]);
_33.Recipients.Add(_35);
}
}
var _36=_31.getMailMessage;
_33.Content=_31.stringToBinary(_36);
var _37=_33.Encrypt(CAPICOM_ENCODE_BASE64);
_31.setEncryptedData(_37);
return _31;
}
function dencryptMail(_38,_39){
if(_38.isEncrypt){
if(_39!=null&&_39!=""&&!window.confirm(_39)){
return false;
}
var _3a=_38.getBody;
var _3b=new ActiveXObject("CAPICOM.EnvelopedData");
_3b.Decrypt(_3a);
_3a=_38.binaryToString(_3b.Content);
_38.parseMessage(_3a);
return true;
}
return false;
}
function checkSign(_3c,_3d,_3e,_3f){
if(_3c.isSigned){
var _40;
if(_3d){
_40=_3e;
}else{
_40=_3f;
}
if(window.confirm(_40)){
var _41=new ActiveXObject("CAPICOM.SignedData");
if(_3c.isDetachSigned){
var _42=_3c.getSignedPartIndex;
var _43=_3c.getBodyOnlyAt(_42);
_41.Content=_3c.stringToBinary(_3c.getBodyAt(1-_42));
_41.Verify(_43,true,CAPICOM_VERIFY_SIGNATURE_ONLY);
}else{
var _43=_3c.getBody;
_41.Verify(_43,false,CAPICOM_VERIFY_SIGNATURE_ONLY);
var _44=_3c.binaryToString(_41.Content);
_3c.parseMessage(_44);
}
var _45=_41.Signers.Item(1);
return _45;
}
}
}
function checkSign0(_46,_47){
if(_46.isSigned){
var _48;
var _49;
try{
_49=new ActiveXObject("CAPICOM.SignedData");
}
catch(e){
return false;
}
if(_46.isDetachSigned){
var _4a=_46.getSignedPartIndex;
var _4b=_46.getBodyOnlyAt(_4a);
_49.Content=_46.stringToBinary(_46.getBodyAt(1-_4a));
if(_47){
_49.Verify(_4b,true,CAPICOM_VERIFY_SIGNATURE_ONLY);
}else{
_49.Verify(_4b,true,CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE);
}
}else{
var _4b=_46.getBody;
if(_47){
_49.Verify(_4b,false,CAPICOM_VERIFY_SIGNATURE_ONLY);
}else{
_49.Verify(_4b,false,CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE);
}
var _4c=_46.binaryToString(_49.Content);
_46.parseMessage(_4c);
}
var _4d=_49.Signers.Item(1);
return _4d;
}
}


