From 20028cfb2f60646725091ad2b5e49605c035e3d8 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sun, 15 Nov 2009 23:28:15 +0000 Subject: [PATCH] sync rsaenh with wine 1.1.33 svn path=/trunk/; revision=44188 --- reactos/dll/win32/rsaenh/implglue.c | 40 +++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/rsaenh/implglue.c b/reactos/dll/win32/rsaenh/implglue.c index 68a9380f6a7..b73eba93ec6 100644 --- a/reactos/dll/win32/rsaenh/implglue.c +++ b/reactos/dll/win32/rsaenh/implglue.c @@ -361,7 +361,10 @@ BOOL gen_rand_impl(BYTE *pbBuffer, DWORD dwLen) BOOL export_public_key_impl(BYTE *pbDest, const KEY_CONTEXT *pKeyContext, DWORD dwKeyLen,DWORD *pdwPubExp) { 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.N), 0, + dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.N)); *pdwPubExp = (DWORD)mp_get_int(&pKeyContext->rsa.e); return TRUE; } @@ -396,25 +399,46 @@ BOOL export_private_key_impl(BYTE *pbDest, const KEY_CONTEXT *pKeyContext, DWORD DWORD *pdwPubExp) { 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.N), 0, + dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.N)); pbDest += dwKeyLen; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.p), 0, + ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.p)); pbDest += (dwKeyLen+1)>>1; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.q), 0, + ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.q)); pbDest += (dwKeyLen+1)>>1; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dP), 0, + ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dP)); pbDest += (dwKeyLen+1)>>1; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.dQ), 0, + ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.dQ)); pbDest += (dwKeyLen+1)>>1; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.qP), 0, + ((dwKeyLen+1)>>1) - mp_unsigned_bin_size(&pKeyContext->rsa.qP)); pbDest += (dwKeyLen+1)>>1; 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) + memset(pbDest + mp_unsigned_bin_size(&pKeyContext->rsa.d), 0, + dwKeyLen - mp_unsigned_bin_size(&pKeyContext->rsa.d)); *pdwPubExp = (DWORD)mp_get_int(&pKeyContext->rsa.e); return TRUE; -- 2.17.1