| ||||
| ||||
Пытаюсь проверить подпсь файла следующим образом: //-------------------------------------------------------------- //ïîëó÷åíèå êîíòåêñòà ñåðòèôèêàòà if (!(hStoreHandle = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"))) { printf("Íåëüçÿ îòêðûòü õðàíèëèùå ñåðòèôèêàòîâ"); return 0; } pUserCert = CertFindCertificateInStore( hStoreHandle, MY_ENCODING_TYPE, 0, CERT_FIND_SUBJECT_STR, L"Âîëêîâ", NULL); //-------------------------------------------------------------- //if(Cert_LM) pUserCert = read_cert_from_MY(certfile); //else pUserCert = read_cert_from_my(certfile); if (!pUserCert) { printf("read_cert_from_my"); printf ("Cannot find User certificate: %s\n", certfile); goto err; } if (ask) { ret = CryptAcquireProvider ("my", pUserCert, &hCryptProv, &keytype, &should_release_ctx); if (ret) { printf("A CSP has been acquired. \n"); } else { printf("Cryptographic context could not be acquired."); } } ret = get_file_data_pointer (sign_file, &mem_len, &mem_tbs); if (!ret) { printf("Cannot read input file"); goto err; } BYTE *pbDer; DWORD cbDer; cbDer = mem_len; pbDer = (BYTE *)malloc(mem_len); if (!base64_decode(mem_tbs, mem_len, pbDer, &cbDer) || cbDer >= mem_len) { printf("Base64 conversion error"); goto err; } else { release_file_data_pointer(mem_tbs); mem_tbs = pbDer; mem_tbs_need_free = 1; mem_len = cbDer; } DWORD dwSignerIndex = 0; signed_mem = (BYTE*)malloc(signed_len = mem_len); if (!signed_mem) { printf("Memory allocation error allocating decode blob."); } ret = CryptVerifyMessageSignature( ¶m, dwSignerIndex, mem_tbs, /* ??????????? ?????????*/ mem_len, /* ?????*/ signed_mem, /* ???? ????? ????????? ???????? BYTE *pbDecoded,*/ &signed_len, /* ???? ????????? ???????? DWORD *pcbDecoded,*/ NULL); /* ???????????? ?????????? ?? ??????? ????????? ??? (PCCERT_CONTEXT *ppSignerCert)*/ if (ret) { printf("Signature was verified OK\n"); } else { printf("Signature was NOT verified\n"); goto err; } В конце концов подпись оказывается не верной, хотя утилита cryptcp говорит обратное. В чем может быть дело? |