Fix alignment of results of RSA operations when using libgcrypt.
If the result of an RSA encryption or decryption operation can be represented in less bytes than given, gcry_mpi_print() will not add leading zero bytes. Fix this by adding those ourself.
This commit is contained in:
parent
4c68a8cb60
commit
f542ef8f9e
1 changed files with 8 additions and 0 deletions
|
@ -276,6 +276,10 @@ bool rsa_public_encrypt(rsa_t *rsa, void *in, size_t len, void *out) {
|
|||
gcry_mpi_t outmpi = gcry_mpi_new(len * 8);
|
||||
gcry_mpi_powm(outmpi, inmpi, rsa->e, rsa->n);
|
||||
|
||||
int pad = len - (gcry_mpi_get_nbits(outmpi) + 7) / 8;
|
||||
while(pad--)
|
||||
*(char *)out++ = 0;
|
||||
|
||||
check(gcry_mpi_print(GCRYMPI_FMT_USG, out,len, NULL, outmpi));
|
||||
|
||||
return true;
|
||||
|
@ -288,6 +292,10 @@ bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t len, void *out) {
|
|||
gcry_mpi_t outmpi = gcry_mpi_new(len * 8);
|
||||
gcry_mpi_powm(outmpi, inmpi, rsa->d, rsa->n);
|
||||
|
||||
int pad = len - (gcry_mpi_get_nbits(outmpi) + 7) / 8;
|
||||
while(pad--)
|
||||
*(char *)out++ = 0;
|
||||
|
||||
check(gcry_mpi_print(GCRYMPI_FMT_USG, out,len, NULL, outmpi));
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue