- ret = RSA_public_decrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa,
+
+ if (rctx->md_nid != NID_undef)
+ {
+ if (rctx->pad_mode == RSA_X931_PADDING)
+ {
+ if (!setup_tbuf(rctx, ctx))
+ return -1;
+ ret = RSA_private_encrypt(tbslen, tbs,
+ rctx->tbuf, ctx->pkey->pkey.rsa,
+ RSA_X931_PADDING);
+ if (ret < 1)
+ return 0;
+ if (rctx->tbuf[ret] != RSA_X931_hash_id(rctx->md_nid))
+ {
+ RSAerr(RSA_F_PKEY_RSA_VERIFYRECOVER,
+ RSA_R_ALGORITHM_MISMATCH);
+ return 0;
+ }
+ ret--;
+ memcpy(sig, rctx->tbuf, ret);
+ }
+ else if (rctx->pad_mode == RSA_PKCS1_PADDING)
+ {
+ unsigned int sltmp;
+ ret = int_rsa_verify(rctx->md_nid, NULL, 0, sig, &sltmp,
+ tbs, tbslen, ctx->pkey->pkey.rsa);
+ }
+ else
+ return -1;
+ }
+ else
+ ret = RSA_public_decrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa,