KEYS: asymmetric: Fix ECDSA use via keyctl uapi
Subsystems (3)
PATCH RESEND 1/1 KEYS: asymmetric: Fix ECDSA use via keyctl uapi
When support for ECDSA keys was added, constraints for data & signature sizes were never updated. This makes it impossible to use such keys via keyctl API from userspace; fix that.
--- crypto/asymmetric_keys/public_key.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-)
crypto/asymmetric_keys/public_key.c +22 -2
@@ -186,8 +186,28 @@ static int software_key_query(const struct kernel_pkey_params *params, len =crypto_akcipher_maxsize (tfm); info->key_size = len *8 ; - info->max_data_size = len; - info->max_sig_size = len; + +if (strncmp (pkey->pkey_algo,"ecdsa" ,5 ) ==0 ) { +/* +* ECDSA key sizes are much smaller than RSA, and thus could +* operate on (hashed) inputs that are larger than key size. +* For example SHA384-hashed input used with secp256r1 +* based keys. Set max_data_size to be at least as large as +* the largest supported hash size (SHA512) +*/ + info->max_data_size =64 ; + +/* +* Verify takes ECDSA-Sig (described in RFC 5480) as input, +* which is actually 2 'key_size'-bit integers encoded in +* ASN.1. Account for the ASN.1 encoding overhead here. +*/ + info->max_sig_size =2 * (len +3 ) +2 ; + }else { + info->max_data_size = len; + info->max_sig_size = len; + } + info->max_enc_size = len; info->max_dec_size = len; info->supported_ops = (KEYCTL_SUPPORTS_ENCRYPT |
Signature · 1 line
2.35.1
Quoted 6 lines · Denis Kenzior
When support for ECDSA keys was added, constraints for data & signature sizes were never updated. This makes it impossible to use such keys via keyctl API from userspace; fix that.
Fixes 299f561a6693 ("x509: Add support for parsing x509 certs with ECDSA keys")Signed-off-by Denis Kenzior <[email protected]>
Same comment again as here: https://lore.kernel.org/all/[email protected]/#t
Quoted 39 lines
--- crypto/asymmetric_keys/public_key.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-)crypto/asymmetric_keys/public_key.c +22
-2@@ -186,8 +186,28 @@ static int software_key_query(const struct kernel_pkey_params *params, len =crypto_akcipher_maxsize (tfm); info->key_size = len *8 ; - info->max_data_size = len; - info->max_sig_size = len; + +if (strncmp (pkey->pkey_algo,"ecdsa" ,5 ) ==0 ) { +/* +* ECDSA key sizes are much smaller than RSA, and thus could +* operate on (hashed) inputs that are larger than key size. +* For example SHA384-hashed input used with secp256r1 +* based keys. Set max_data_size to be at least as large as +* the largest supported hash size (SHA512) +*/ + info->max_data_size =64 ; + +/* +* Verify takes ECDSA-Sig (described in RFC 5480) as input, +* which is actually 2 'key_size'-bit integers encoded in +* ASN.1. Account for the ASN.1 encoding overhead here. +*/ + info->max_sig_size =2 * (len +3 ) +2 ; + }else { + info->max_data_size = len; + info->max_sig_size = len; + } + info->max_enc_size = len; info->max_dec_size = len; info->supported_ops = (KEYCTL_SUPPORTS_ENCRYPT |
Jarkko Sakkinen
maintainerQuoted 3 lines · Denis Kenzior
When support for ECDSA keys was added, constraints for data & signature sizes were never updated. This makes it impossible to use such keys via keyctl API from userspace; fix that.
Instead of "fix that" just describe the change.
Quoted 44 lines
Fixes 299f561a6693 ("x509: Add support for parsing x509 certs with ECDSA keys")Signed-off-by Denis Kenzior <[email protected]>--- crypto/asymmetric_keys/public_key.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-)crypto/asymmetric_keys/public_key.c +22
-2@@ -186,8 +186,28 @@ static int software_key_query(const struct kernel_pkey_params *params, len =crypto_akcipher_maxsize (tfm); info->key_size = len *8 ; - info->max_data_size = len; - info->max_sig_size = len; + +if (strncmp (pkey->pkey_algo,"ecdsa" ,5 ) ==0 ) { +/* +* ECDSA key sizes are much smaller than RSA, and thus could +* operate on (hashed) inputs that are larger than key size. +* For example SHA384-hashed input used with secp256r1 +* based keys. Set max_data_size to be at least as large as +* the largest supported hash size (SHA512) +*/ + info->max_data_size =64 ; + +/* +* Verify takes ECDSA-Sig (described in RFC 5480) as input, +* which is actually 2 'key_size'-bit integers encoded in +* ASN.1. Account for the ASN.1 encoding overhead here. +*/ + info->max_sig_size =2 * (len +3 ) +2 ; + }else { + info->max_data_size = len; + info->max_sig_size = len; + } + info->max_enc_size = len; info->max_dec_size = len; info->supported_ops = (KEYCTL_SUPPORTS_ENCRYPT |Signature · 1 line
2.35.1
The code change lgtm.
BR, Jarkko