|
证书的数字签名和认证(2) MessageSizeArray[0] = cbMessage; file://start sign ..... printf("raw message....\n"); printf("%s\n",pbMessage); // if(!(hStoreHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM,0,NULL,CERT_SYSTEM_STORE_CURRENT_USER, CERT_STORE_NAME))) { printf("open cert store failed!"); } file://Get sign cert pointer if(pSignerCert = CertFindCertificateInStore(hStoreHandle,MY_TYPE,0,CERT_FIND_SUBJECT_STR,SIGNER_NAME,NULL)) { printf("find a cert ok.....\n"); } else { printf("cann't look a cert!\n"); } file://sign struct initialize SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA); SigParams.dwMsgEncodingType = MY_TYPE; SigParams.pSigningCert = pSignerCert; SigParams.HashAlgorithm.pszObjId = szOID_RSA_MD5; SigParams.HashAlgorithm.Parameters.cbData = NULL; SigParams.cMsgCert = 1; SigParams.rgpMsgCert = &pSignerCert; SigParams.cAuthAttr = 0; SigParams.dwInnerContentType = 0; SigParams.cMsgCrl = 0; SigParams.cUnauthAttr = 0; SigParams.dwFlags = 0; SigParams.pvHashAuxInfo = NULL; SigParams.rgAuthAttr = NULL; // if(CryptSignMessage(&SigParams,FALSE,1,MessageArray,MessageSizeArray,NULL,&cbSignedMessageBlob)) { printf("sign after size %d\n",cbSignedMessageBlob); } // if(!(pbSignedMessageBlob = (BYTE*)malloc(cbSignedMessageBlob))) { printf("alloc failed!\n"); } // if(CryptSignMessage(&SigParams,FALSE,1,MessageArray,MessageSizeArray,pbSignedMessageBlob,&cbSignedMessageBlob)) { printf("sign successful!!\n"); } /*
|