Commit 1330a125 authored by Ingo Tuchscherer's avatar Ingo Tuchscherer Committed by Martin Schwidefsky

s390/zcrypt: enable odd RSA modulus sizes in CRT format

In the past only even modulus sizes were allowed for RSA keys in
CRT format. This restriction was based on limited RSA key generation
on older crypto adapters that provides only even modulus sizes. This
restriction is not valid any more.

Revoke restrictions that crypto requests can be serviced with odd
RSA modulus length in CRT format.
Signed-off-by: default avatarIngo Tuchscherer <ingo.tuchscherer@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b02064a9
...@@ -472,8 +472,7 @@ static long zcrypt_rsa_crt(struct ica_rsa_modexpo_crt *crt) ...@@ -472,8 +472,7 @@ static long zcrypt_rsa_crt(struct ica_rsa_modexpo_crt *crt)
unsigned long long z1, z2, z3; unsigned long long z1, z2, z3;
int rc, copied; int rc, copied;
if (crt->outputdatalength < crt->inputdatalength || if (crt->outputdatalength < crt->inputdatalength)
(crt->inputdatalength & 1))
return -EINVAL; return -EINVAL;
/* /*
* As long as outputdatalength is big enough, we can set the * As long as outputdatalength is big enough, we can set the
......
...@@ -291,7 +291,7 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, ...@@ -291,7 +291,7 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt,
memset(key, 0, sizeof(*key)); memset(key, 0, sizeof(*key));
short_len = crt->inputdatalength / 2; short_len = (crt->inputdatalength + 1) / 2;
long_len = short_len + 8; long_len = short_len + 8;
pad_len = -(3*long_len + 2*short_len) & 7; pad_len = -(3*long_len + 2*short_len) & 7;
key_len = 3*long_len + 2*short_len + pad_len + crt->inputdatalength; key_len = 3*long_len + 2*short_len + pad_len + crt->inputdatalength;
......
...@@ -248,7 +248,7 @@ static int ICACRT_msg_to_type50CRT_msg(struct zcrypt_device *zdev, ...@@ -248,7 +248,7 @@ static int ICACRT_msg_to_type50CRT_msg(struct zcrypt_device *zdev,
unsigned char *p, *q, *dp, *dq, *u, *inp; unsigned char *p, *q, *dp, *dq, *u, *inp;
mod_len = crt->inputdatalength; mod_len = crt->inputdatalength;
short_len = mod_len / 2; short_len = (mod_len + 1) / 2;
/* /*
* CEX2A and CEX3A w/o FW update can handle requests up to * CEX2A and CEX3A w/o FW update can handle requests up to
......
...@@ -138,7 +138,7 @@ static int ICACRT_msg_to_type4CRT_msg(struct zcrypt_device *zdev, ...@@ -138,7 +138,7 @@ static int ICACRT_msg_to_type4CRT_msg(struct zcrypt_device *zdev,
int mod_len, short_len, long_len; int mod_len, short_len, long_len;
mod_len = crt->inputdatalength; mod_len = crt->inputdatalength;
short_len = mod_len / 2; short_len = (mod_len + 1) / 2;
long_len = mod_len / 2 + 8; long_len = mod_len / 2 + 8;
if (mod_len <= 128) { if (mod_len <= 128) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment