s390/zcrypt: simplify prep of CCA key token
The preparation of the key data struct for a CCA RSA ME operation had some improvement to skip leading zeros in the key's exponent. However, all supported CCA cards nowadays support leading zeros in key tokens. So for simplifying the CCA key preparing code, this patch simply removes this optimization code. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Juergen Christ <jchrist@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
bd922f33d4
commit
0f2d4fee91
@ -89,10 +89,7 @@ struct cca_pvt_ext_crt_sec {
|
||||
#define CCA_PVT_EXT_CRT_SEC_FMT_CL 0x40
|
||||
|
||||
/**
|
||||
* Set up private key fields of a type6 MEX message. The _pad variant
|
||||
* strips leading zeroes from the b_key.
|
||||
* Note that all numerics in the key token are big-endian,
|
||||
* while the entries in the key block header are little-endian.
|
||||
* Set up private key fields of a type6 MEX message.
|
||||
*
|
||||
* @mex: pointer to user input data
|
||||
* @p: pointer to memory area for the key
|
||||
@ -111,10 +108,9 @@ static inline int zcrypt_type6_mex_key_en(struct ica_rsa_modexpo *mex, void *p)
|
||||
struct t6_keyblock_hdr t6_hdr;
|
||||
struct cca_token_hdr pubhdr;
|
||||
struct cca_public_sec pubsec;
|
||||
char exponent[0];
|
||||
char exponent[];
|
||||
} __packed *key = p;
|
||||
unsigned char *temp;
|
||||
int i;
|
||||
unsigned char *ptr;
|
||||
|
||||
/*
|
||||
* The inputdatalength was a selection criteria in the dispatching
|
||||
@ -131,37 +127,29 @@ static inline int zcrypt_type6_mex_key_en(struct ica_rsa_modexpo *mex, void *p)
|
||||
key->pubsec = static_pub_sec;
|
||||
|
||||
/* key parameter block */
|
||||
temp = key->exponent;
|
||||
if (copy_from_user(temp, mex->b_key, mex->inputdatalength))
|
||||
ptr = key->exponent;
|
||||
if (copy_from_user(ptr, mex->b_key, mex->inputdatalength))
|
||||
return -EFAULT;
|
||||
/* Strip leading zeroes from b_key. */
|
||||
for (i = 0; i < mex->inputdatalength; i++)
|
||||
if (temp[i])
|
||||
break;
|
||||
if (i >= mex->inputdatalength)
|
||||
return -EINVAL;
|
||||
memmove(temp, temp + i, mex->inputdatalength - i);
|
||||
temp += mex->inputdatalength - i;
|
||||
ptr += mex->inputdatalength;
|
||||
/* modulus */
|
||||
if (copy_from_user(temp, mex->n_modulus, mex->inputdatalength))
|
||||
if (copy_from_user(ptr, mex->n_modulus, mex->inputdatalength))
|
||||
return -EFAULT;
|
||||
|
||||
key->pubsec.modulus_bit_len = 8 * mex->inputdatalength;
|
||||
key->pubsec.modulus_byte_len = mex->inputdatalength;
|
||||
key->pubsec.exponent_len = mex->inputdatalength - i;
|
||||
key->pubsec.exponent_len = mex->inputdatalength;
|
||||
key->pubsec.section_length = sizeof(key->pubsec) +
|
||||
2 * mex->inputdatalength - i;
|
||||
2 * mex->inputdatalength;
|
||||
key->pubhdr.token_length =
|
||||
key->pubsec.section_length + sizeof(key->pubhdr);
|
||||
key->t6_hdr.ulen = key->pubhdr.token_length + 4;
|
||||
key->t6_hdr.blen = key->pubhdr.token_length + 6;
|
||||
return sizeof(*key) + 2 * mex->inputdatalength - i;
|
||||
|
||||
return sizeof(*key) + 2 * mex->inputdatalength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up private key fields of a type6 CRT message.
|
||||
* Note that all numerics in the key token are big-endian,
|
||||
* while the entries in the key block header are little-endian.
|
||||
*
|
||||
* @mex: pointer to user input data
|
||||
* @p: pointer to memory area for the key
|
||||
@ -242,6 +230,7 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
|
||||
* used.
|
||||
*/
|
||||
memcpy((char *)(pub + 1), pk_exponent, 3);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user