signature-params: Provide option for maximum RSA/PSS salt length
However, the length now has to be resolved early, so we don't operate on the negative constant values e.g. when generating the encoding.
This commit is contained in:
@@ -84,13 +84,8 @@ bool botan_emsa_pss_identifier(rsa_pss_params_t *params, char *id, size_t len)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (params->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
return snprintf(id, len, "EMSA-PSS(%s,MGF1,%zd)", hash,
|
||||
params->salt_len) < len;
|
||||
}
|
||||
return snprintf(id, len, "EMSA-PSS(%s,MGF1)", hash) < len;
|
||||
return snprintf(id, len, "EMSA-PSS(%s,MGF1,%zd)", hash,
|
||||
params->salt_len) < len;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -187,11 +187,7 @@ static bool sign_pkcs1(private_gcrypt_rsa_private_key_t *this,
|
||||
}
|
||||
else
|
||||
{
|
||||
u_int slen = hasher_hash_size(hash_algorithm);
|
||||
if (pss->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
slen = pss->salt_len;
|
||||
}
|
||||
u_int slen = pss->salt_len;
|
||||
err = gcry_sexp_build(&in, NULL,
|
||||
"(data(flags pss)(salt-length %u)(hash %s %b))",
|
||||
slen, hash_name, hash.len, hash.ptr);
|
||||
|
||||
@@ -139,11 +139,7 @@ static bool verify_pkcs1(private_gcrypt_rsa_public_key_t *this,
|
||||
|
||||
if (pss)
|
||||
{
|
||||
u_int slen = hasher_hash_size(algorithm);
|
||||
if (pss->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
slen = pss->salt_len;
|
||||
}
|
||||
u_int slen = pss->salt_len;
|
||||
err = gcry_sexp_build(&in, NULL,
|
||||
"(data(flags pss)(salt-length %u)(hash %s %b))",
|
||||
slen, hash_name, hash.len, hash.ptr);
|
||||
|
||||
@@ -393,15 +393,11 @@ static bool build_emsa_pss_signature(private_gmp_rsa_private_key_t *this,
|
||||
goto error;
|
||||
}
|
||||
|
||||
salt.len = hash.len;
|
||||
salt.len = params->salt_len;
|
||||
if (params->salt.len)
|
||||
{
|
||||
salt = params->salt;
|
||||
}
|
||||
else if (params->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
salt.len = params->salt_len;
|
||||
}
|
||||
if (emlen < (hash.len + salt.len + 2))
|
||||
{ /* too long */
|
||||
goto error;
|
||||
|
||||
@@ -205,12 +205,7 @@ static bool verify_emsa_pss_signature(private_gmp_rsa_public_key_t *this,
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
/* determine salt length */
|
||||
salt.len = hash.len;
|
||||
if (params->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
salt.len = params->salt_len;
|
||||
}
|
||||
salt.len = params->salt_len;
|
||||
/* verify general structure of EM */
|
||||
maskbits = (8 * em.len) - embits;
|
||||
if (em.len < (hash.len + salt.len + 2) || em.ptr[em.len-1] != 0xbc ||
|
||||
|
||||
@@ -103,13 +103,8 @@ static bool build_signature(private_openssl_rsa_private_key_t *this,
|
||||
if (pss)
|
||||
{
|
||||
const EVP_MD *mgf1md = openssl_get_md(pss->mgf1_hash);
|
||||
int slen = EVP_MD_size(md);
|
||||
if (pss->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
slen = pss->salt_len;
|
||||
}
|
||||
if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, slen) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, pss->salt_len) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_mgf1_md(pctx, mgf1md) <= 0)
|
||||
{
|
||||
goto error;
|
||||
|
||||
@@ -95,13 +95,8 @@ static bool verify_signature(private_openssl_rsa_public_key_t *this,
|
||||
if (pss)
|
||||
{
|
||||
const EVP_MD *mgf1md = openssl_get_md(pss->mgf1_hash);
|
||||
int slen = EVP_MD_size(md);
|
||||
if (pss->salt_len > RSA_PSS_SALT_LEN_DEFAULT)
|
||||
{
|
||||
slen = pss->salt_len;
|
||||
}
|
||||
if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, slen) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, pss->salt_len) <= 0 ||
|
||||
EVP_PKEY_CTX_set_rsa_mgf1_md(pctx, mgf1md) <= 0)
|
||||
{
|
||||
goto error;
|
||||
|
||||
Reference in New Issue
Block a user