Import OpenSSL 1.1.0h
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -773,7 +773,8 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri)
|
||||
EVP_PKEY_CTX *pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
|
||||
int pad_mode = RSA_PKCS1_PADDING, rv = 0, labellen;
|
||||
unsigned char *label;
|
||||
CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg);
|
||||
if (CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg) <= 0)
|
||||
return 0;
|
||||
if (pkctx) {
|
||||
if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0)
|
||||
return 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -42,6 +42,7 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value,
|
||||
BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *tmp;
|
||||
int bitsp, bitsq, ok = -1, n = 0;
|
||||
BN_CTX *ctx = NULL;
|
||||
unsigned long error = 0;
|
||||
|
||||
/*
|
||||
* When generating ridiculously small keys, we can get stuck
|
||||
@@ -88,16 +89,26 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value,
|
||||
if (BN_copy(rsa->e, e_value) == NULL)
|
||||
goto err;
|
||||
|
||||
BN_set_flags(r2, BN_FLG_CONSTTIME);
|
||||
/* generate p and q */
|
||||
for (;;) {
|
||||
if (!BN_generate_prime_ex(rsa->p, bitsp, 0, NULL, NULL, cb))
|
||||
goto err;
|
||||
if (!BN_sub(r2, rsa->p, BN_value_one()))
|
||||
goto err;
|
||||
if (!BN_gcd(r1, r2, rsa->e, ctx))
|
||||
goto err;
|
||||
if (BN_is_one(r1))
|
||||
ERR_set_mark();
|
||||
if (BN_mod_inverse(r1, r2, rsa->e, ctx) != NULL) {
|
||||
/* GCD == 1 since inverse exists */
|
||||
break;
|
||||
}
|
||||
error = ERR_peek_last_error();
|
||||
if (ERR_GET_LIB(error) == ERR_LIB_BN
|
||||
&& ERR_GET_REASON(error) == BN_R_NO_INVERSE) {
|
||||
/* GCD != 1 */
|
||||
ERR_pop_to_mark();
|
||||
} else {
|
||||
goto err;
|
||||
}
|
||||
if (!BN_GENCB_call(cb, 2, n++))
|
||||
goto err;
|
||||
}
|
||||
@@ -110,10 +121,19 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value,
|
||||
} while (BN_cmp(rsa->p, rsa->q) == 0);
|
||||
if (!BN_sub(r2, rsa->q, BN_value_one()))
|
||||
goto err;
|
||||
if (!BN_gcd(r1, r2, rsa->e, ctx))
|
||||
goto err;
|
||||
if (BN_is_one(r1))
|
||||
ERR_set_mark();
|
||||
if (BN_mod_inverse(r1, r2, rsa->e, ctx) != NULL) {
|
||||
/* GCD == 1 since inverse exists */
|
||||
break;
|
||||
}
|
||||
error = ERR_peek_last_error();
|
||||
if (ERR_GET_LIB(error) == ERR_LIB_BN
|
||||
&& ERR_GET_REASON(error) == BN_R_NO_INVERSE) {
|
||||
/* GCD != 1 */
|
||||
ERR_pop_to_mark();
|
||||
} else {
|
||||
goto err;
|
||||
}
|
||||
if (!BN_GENCB_call(cb, 2, n++))
|
||||
goto err;
|
||||
}
|
||||
|
||||
@@ -15,31 +15,9 @@
|
||||
#include <openssl/engine.h>
|
||||
#include "rsa_locl.h"
|
||||
|
||||
static const RSA_METHOD *default_RSA_meth = NULL;
|
||||
|
||||
RSA *RSA_new(void)
|
||||
{
|
||||
RSA *r = RSA_new_method(NULL);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
void RSA_set_default_method(const RSA_METHOD *meth)
|
||||
{
|
||||
default_RSA_meth = meth;
|
||||
}
|
||||
|
||||
const RSA_METHOD *RSA_get_default_method(void)
|
||||
{
|
||||
if (default_RSA_meth == NULL) {
|
||||
#ifdef RSA_NULL
|
||||
default_RSA_meth = RSA_null_method();
|
||||
#else
|
||||
default_RSA_meth = RSA_PKCS1_OpenSSL();
|
||||
#endif
|
||||
}
|
||||
|
||||
return default_RSA_meth;
|
||||
return RSA_new_method(NULL);
|
||||
}
|
||||
|
||||
const RSA_METHOD *RSA_get_method(const RSA *rsa)
|
||||
|
||||
@@ -122,7 +122,7 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
|
||||
int plen, const EVP_MD *md,
|
||||
const EVP_MD *mgf1md)
|
||||
{
|
||||
int i, dblen, mlen = -1, one_index = 0, msg_index;
|
||||
int i, dblen = 0, mlen = -1, one_index = 0, msg_index;
|
||||
unsigned int good, found_one_byte;
|
||||
const unsigned char *maskedseed, *maskeddb;
|
||||
/*
|
||||
@@ -239,8 +239,8 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
|
||||
RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1,
|
||||
RSA_R_OAEP_DECODING_ERROR);
|
||||
cleanup:
|
||||
OPENSSL_free(db);
|
||||
OPENSSL_free(em);
|
||||
OPENSSL_clear_free(db, dblen);
|
||||
OPENSSL_clear_free(em, num);
|
||||
return mlen;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include "internal/bn_int.h"
|
||||
#include "rsa_locl.h"
|
||||
|
||||
#ifndef RSA_NULL
|
||||
|
||||
static int rsa_ossl_public_encrypt(int flen, const unsigned char *from,
|
||||
unsigned char *to, RSA *rsa, int padding);
|
||||
static int rsa_ossl_private_encrypt(int flen, const unsigned char *from,
|
||||
@@ -26,7 +24,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *i, RSA *rsa,
|
||||
static int rsa_ossl_init(RSA *rsa);
|
||||
static int rsa_ossl_finish(RSA *rsa);
|
||||
static RSA_METHOD rsa_pkcs1_ossl_meth = {
|
||||
"OpenSSL PKCS#1 RSA (from Eric Young)",
|
||||
"OpenSSL PKCS#1 RSA",
|
||||
rsa_ossl_public_encrypt,
|
||||
rsa_ossl_public_decrypt, /* signature verification */
|
||||
rsa_ossl_private_encrypt, /* signing */
|
||||
@@ -43,6 +41,18 @@ static RSA_METHOD rsa_pkcs1_ossl_meth = {
|
||||
NULL /* rsa_keygen */
|
||||
};
|
||||
|
||||
static const RSA_METHOD *default_RSA_meth = &rsa_pkcs1_ossl_meth;
|
||||
|
||||
void RSA_set_default_method(const RSA_METHOD *meth)
|
||||
{
|
||||
default_RSA_meth = meth;
|
||||
}
|
||||
|
||||
const RSA_METHOD *RSA_get_default_method(void)
|
||||
{
|
||||
return default_RSA_meth;
|
||||
}
|
||||
|
||||
const RSA_METHOD *RSA_PKCS1_OpenSSL(void)
|
||||
{
|
||||
return &rsa_pkcs1_ossl_meth;
|
||||
@@ -593,6 +603,8 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
|
||||
r1 = BN_CTX_get(ctx);
|
||||
m1 = BN_CTX_get(ctx);
|
||||
vrfy = BN_CTX_get(ctx);
|
||||
if (vrfy == NULL)
|
||||
goto err;
|
||||
|
||||
{
|
||||
BIGNUM *p = BN_new(), *q = BN_new();
|
||||
@@ -786,5 +798,3 @@ static int rsa_ossl_finish(RSA *rsa)
|
||||
BN_MONT_CTX_free(rsa->_method_mod_q);
|
||||
return (1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -226,8 +226,6 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
|
||||
* We can't continue in constant-time because we need to copy the result
|
||||
* and we cannot fake its length. This unavoidably leaks timing
|
||||
* information at the API boundary.
|
||||
* TODO(emilia): this could be addressed at the call site,
|
||||
* see BoringSSL commit 0aa0767340baf925bda4804882aab0cb974b2d26.
|
||||
*/
|
||||
if (!good) {
|
||||
mlen = -1;
|
||||
@@ -237,7 +235,7 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
|
||||
memcpy(to, em + msg_index, mlen);
|
||||
|
||||
err:
|
||||
OPENSSL_free(em);
|
||||
OPENSSL_clear_free(em, num);
|
||||
if (mlen == -1)
|
||||
RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2,
|
||||
RSA_R_PKCS_DECODING_ERROR);
|
||||
|
||||
@@ -111,7 +111,7 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
|
||||
goto err;
|
||||
}
|
||||
if (!EVP_DigestInit_ex(ctx, Hash, NULL)
|
||||
|| !EVP_DigestUpdate(ctx, zeroes, sizeof zeroes)
|
||||
|| !EVP_DigestUpdate(ctx, zeroes, sizeof(zeroes))
|
||||
|| !EVP_DigestUpdate(ctx, mHash, hLen))
|
||||
goto err;
|
||||
if (maskedDBLen - i) {
|
||||
@@ -207,7 +207,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
|
||||
if (ctx == NULL)
|
||||
goto err;
|
||||
if (!EVP_DigestInit_ex(ctx, Hash, NULL)
|
||||
|| !EVP_DigestUpdate(ctx, zeroes, sizeof zeroes)
|
||||
|| !EVP_DigestUpdate(ctx, zeroes, sizeof(zeroes))
|
||||
|| !EVP_DigestUpdate(ctx, mHash, hLen))
|
||||
goto err;
|
||||
if (sLen && !EVP_DigestUpdate(ctx, salt, sLen))
|
||||
|
||||
@@ -153,6 +153,8 @@ int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e,
|
||||
BN_CTX_start(ctx);
|
||||
Xp = BN_CTX_get(ctx);
|
||||
Xq = BN_CTX_get(ctx);
|
||||
if (Xq == NULL)
|
||||
goto error;
|
||||
if (!BN_X931_generate_Xpq(Xp, Xq, bits, ctx))
|
||||
goto error;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user