Assinatura digital feita em C # não verifica em C ++

Eu tenho um aplicativo c # que assina digitalmente dados usando o RSA. O código é o seguinte:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportCspBlob(privateKeyBlob);

SHA1 sha1 = new SHA1CryptoServiceProvider();
sha1.ComputeHash(myData);

byte[] signature = rsa.SignHash(sha1.Hash, CryptoConfig.MapNameToOID("SHA1"));

Não consigo verificar a assinatura em C ++. O código é o seguinte:

HCRYPTPROV cryptProvider;
CryptAcquireContext(&cryptProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
// PROV_RSA_SIG does not work

HCRYPTKEY publicKey;
CryptImportKey(cryptProvider, publicKeyBlob, publicKeyBlobLength, 0, 0, &publicKey);

HCRYPTHASH hash;
CryptCreateHash(cryptProvider, CALG_SHA1, 0, 0, &hash);
CryptHashData(hash, myData, myDataLength, 0);

BOOL isSigOk = CryptVerifySignature(hash, signature, signatureLength, publicKey, NULL, CRYPT_NOHASHOID);

A verificação retorna 0,GetLastError() devolve 2148073478 "Assinatura inválida". Os hashes são os mesmos. Eu tentei com e sem oCRYPT_NOHASHOID bandeira.

Eu tentei assinar os dados em C ++ (apenas para comparar os resultados). Eu removi oCRYPT_VERIFYCONTEXT bandeira. Mas a importação da chave privada BLOB falha com 1008 "Foi feita uma tentativa de referenciar um token que não existe". Gerar uma nova chave falha com o mesmo erro.

questionAnswers(1)

yourAnswerToTheQuestion