diff --git a/lib/des/rsa-imath.c b/lib/des/rsa-imath.c index 626800047..bdd087f84 100644 --- a/lib/des/rsa-imath.c +++ b/lib/des/rsa-imath.c @@ -123,9 +123,9 @@ imath_rsa_public_encrypt(int flen, const unsigned char* from, mp_int_clear(&n); { size_t ssize; - ssize = mp_int_binary_len(&enc); + ssize = mp_int_unsigned_len(&enc); assert(size >= ssize); - mp_int_to_binary(&enc, to, ssize); + mp_int_to_unsigned(&enc, to, ssize); size = ssize; } mp_int_clear(&enc); @@ -180,23 +180,23 @@ imath_rsa_public_decrypt(int flen, const unsigned char* from, p = to; - size = mp_int_binary_len(&us); + size = mp_int_unsigned_len(&us); assert(size <= RSA_size(rsa)); - mp_int_to_binary(&us, p, size); + mp_int_to_unsigned(&us, p, size); mp_int_clear(&us); - if (size == 0 || *p != 0) - return -6; - size--; p++; - if (size == 0 || *p != 1) + /* head zero was skipped by mp_int_to_unsigned */ + if (*p == 0) return -7; + if (*p != 1) + return -6; size--; p++; while (size && *p == 0xff) { size--; p++; } if (size == 0 || *p != 0) - return -8; + return -7; size--; p++; memmove(to, p, size); @@ -250,10 +250,9 @@ imath_rsa_private_encrypt(int flen, const unsigned char* from, mp_int_clear(&us); { size_t ssize; - ssize = mp_int_binary_len(&s); + ssize = mp_int_unsigned_len(&s); assert(size >= ssize); - mp_int_to_binary(&s, to, size); - size = ssize; + mp_int_to_unsigned(&s, to, size); } mp_int_clear(&s); @@ -297,23 +296,22 @@ imath_rsa_private_decrypt(int flen, const unsigned char* from, p = to; { size_t ssize; - ssize = mp_int_binary_len(&dec); + ssize = mp_int_unsigned_len(&dec); assert(size >= ssize); - mp_int_to_binary(&dec, p, ssize); + mp_int_to_unsigned(&dec, p, ssize); size = ssize; } mp_int_clear(&dec); - if (size == 0 || *p != 0) + /* head zero was skipped by mp_int_to_unsigned */ + if (*p != 2) return -3; - if (size == 0 || *p != 2) - return -4; size--; p++; while (size && *p != 0) { size--; p++; } if (size == 0) - return -5; + return -4; size--; p++; memmove(to, p, size);