Commit 2d05074f authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

rsaenh: Only reverse the significant bytes of an exported private key.

parent b1beb212
...@@ -399,43 +399,43 @@ BOOL export_private_key_impl(BYTE *pbDest, const KEY_CONTEXT *pKeyContext, DWORD ...@@ -399,43 +399,43 @@ BOOL export_private_key_impl(BYTE *pbDest, const KEY_CONTEXT *pKeyContext, DWORD
DWORD *pdwPubExp) DWORD *pdwPubExp)
{ {
mp_to_unsigned_bin(&pKeyContext->rsa.N, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.N, pbDest);
reverse_bytes(pbDest, dwKeyLen); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.N));
if (mp_unsigned_bin_size(&pKeyContext->rsa.N) < dwKeyLen) if (mp_unsigned_bin_size(&pKeyContext->rsa.N) < dwKeyLen)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.N), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.N), 0,
dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.N)); dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.N));
pbDest += dwKeyLen; pbDest += dwKeyLen;
mp_to_unsigned_bin(&pKeyContext->rsa.p, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.p, pbDest);
reverse_bytes(pbDest, (dwKeyLen+1)>>1); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.p));
if (mp_unsigned_bin_size(&pKeyContext->rsa.p) < (dwKeyLen+1)>>1) if (mp_unsigned_bin_size(&pKeyContext->rsa.p) < (dwKeyLen+1)>>1)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.p), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.p), 0,
((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.p)); ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.p));
pbDest += (dwKeyLen+1)>>1; pbDest += (dwKeyLen+1)>>1;
mp_to_unsigned_bin(&pKeyContext->rsa.q, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.q, pbDest);
reverse_bytes(pbDest, (dwKeyLen+1)>>1); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.q));
if (mp_unsigned_bin_size(&pKeyContext->rsa.q) < (dwKeyLen+1)>>1) if (mp_unsigned_bin_size(&pKeyContext->rsa.q) < (dwKeyLen+1)>>1)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.q), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.q), 0,
((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.q)); ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.q));
pbDest += (dwKeyLen+1)>>1; pbDest += (dwKeyLen+1)>>1;
mp_to_unsigned_bin(&pKeyContext->rsa.dP, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.dP, pbDest);
reverse_bytes(pbDest, (dwKeyLen+1)>>1); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.dP));
if (mp_unsigned_bin_size(&pKeyContext->rsa.dP) < (dwKeyLen+1)>>1) if (mp_unsigned_bin_size(&pKeyContext->rsa.dP) < (dwKeyLen+1)>>1)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dP), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dP), 0,
((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dP)); ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dP));
pbDest += (dwKeyLen+1)>>1; pbDest += (dwKeyLen+1)>>1;
mp_to_unsigned_bin(&pKeyContext->rsa.dQ, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.dQ, pbDest);
reverse_bytes(pbDest, (dwKeyLen+1)>>1); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.dQ));
if (mp_unsigned_bin_size(&pKeyContext->rsa.dQ) < (dwKeyLen+1)>>1) if (mp_unsigned_bin_size(&pKeyContext->rsa.dQ) < (dwKeyLen+1)>>1)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dQ), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dQ), 0,
((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dQ)); ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dQ));
pbDest += (dwKeyLen+1)>>1; pbDest += (dwKeyLen+1)>>1;
mp_to_unsigned_bin(&pKeyContext->rsa.qP, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.qP, pbDest);
reverse_bytes(pbDest, (dwKeyLen+1)>>1); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.qP));
if (mp_unsigned_bin_size(&pKeyContext->rsa.qP) < (dwKeyLen+1)>>1) if (mp_unsigned_bin_size(&pKeyContext->rsa.qP) < (dwKeyLen+1)>>1)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.qP), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.qP), 0,
((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.qP)); ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.qP));
pbDest += (dwKeyLen+1)>>1; pbDest += (dwKeyLen+1)>>1;
mp_to_unsigned_bin(&pKeyContext->rsa.d, pbDest); mp_to_unsigned_bin(&pKeyContext->rsa.d, pbDest);
reverse_bytes(pbDest, dwKeyLen); reverse_bytes(pbDest, mp_unsigned_bin_size(&pKeyContext->rsa.d));
if (mp_unsigned_bin_size(&pKeyContext->rsa.d) < dwKeyLen) if (mp_unsigned_bin_size(&pKeyContext->rsa.d) < dwKeyLen)
memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.d), 0, memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.d), 0,
dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.d)); dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.d));
......
...@@ -1842,7 +1842,6 @@ static void test_import_export(void) ...@@ -1842,7 +1842,6 @@ static void test_import_export(void)
ok(dwDataLen == sizeof(expected_exported_priv_key), "unexpected size %d\n", ok(dwDataLen == sizeof(expected_exported_priv_key), "unexpected size %d\n",
dwDataLen); dwDataLen);
todo_wine
ok(!memcmp(exported_key, expected_exported_priv_key, dwDataLen), ok(!memcmp(exported_key, expected_exported_priv_key, dwDataLen),
"unexpected value\n"); "unexpected value\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment