diff --git a/rsa-compat.c b/rsa-compat.c index 3141f0d1d7fadae6efee8d0fc210f75e885dcddc..6b818536f07f3d47d00402a3a83a9713a63c74b9 100644 --- a/rsa-compat.c +++ b/rsa-compat.c @@ -76,10 +76,18 @@ R_SignFinal(R_SIGNATURE_CTX *ctx, nettle_mpz_init_set_str_256(k.c, MAX_RSA_MODULUS_LEN, key->coefficient); - if (rsa_init_private_key(&k) && (k.pub.size <= MAX_RSA_MODULUS_LEN)) + if (rsa_prepare_private_key(&k) && (k.pub.size <= MAX_RSA_MODULUS_LEN)) { + mpz_t s; + mpz_init(s); + + rsa_md5_sign(&k, &ctx->hash, s); + nettle_mpz_get_str_256(k.pub.size, signature, s); + + mpz_clear(s); + *length = k.pub.size; - rsa_md5_sign(&k, &ctx->hash, signature); + res = RE_SUCCESS; } else @@ -126,10 +134,18 @@ R_VerifyFinal(R_SIGNATURE_CTX *ctx, MAX_RSA_MODULUS_LEN, key->modulus); nettle_mpz_init_set_str_256(k.e, MAX_RSA_MODULUS_LEN, key->exponent); + + if (rsa_prepare_public_key(&k) && (k.size == length)) + { + mpz_t s; + + nettle_mpz_init_set_str_256(s, + k.size, signature); + res = rsa_md5_verify(&k, &ctx->hash, s) + ? RE_SUCCESS : RE_SIGNATURE; - if (rsa_init_public_key(&k) && (k.size == length)) - res = rsa_md5_verify(&k, &ctx->hash, signature) - ? RE_SUCCESS : RE_SIGNATURE; + mpz_clear(s); + } else res = RE_PUBLIC_KEY;