Use mp_int_to_binary to encode bignums

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19202 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-12-02 08:59:59 +00:00
parent 89f9b6b049
commit 9dc51937ea

View File

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