Commit edc63a37 authored by Martin Schwidefsky's avatar Martin Schwidefsky

s390/crypto: cleanup cpacf function codes

Use a separate define for the decryption modifier bit instead of
duplicating the function codes for encryption / decrypton.
In addition use an unsigned type for the function code.
Reviewed-by: default avatarHarald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 474fd6e8
...@@ -41,9 +41,8 @@ static char keylen_flag; ...@@ -41,9 +41,8 @@ static char keylen_flag;
struct s390_aes_ctx { struct s390_aes_ctx {
u8 key[AES_MAX_KEY_SIZE]; u8 key[AES_MAX_KEY_SIZE];
long enc;
long dec;
int key_len; int key_len;
unsigned long fc;
union { union {
struct crypto_skcipher *blk; struct crypto_skcipher *blk;
struct crypto_cipher *cip; struct crypto_cipher *cip;
...@@ -61,9 +60,8 @@ struct pcc_param { ...@@ -61,9 +60,8 @@ struct pcc_param {
struct s390_xts_ctx { struct s390_xts_ctx {
u8 key[32]; u8 key[32];
u8 pcc_key[32]; u8 pcc_key[32];
long enc;
long dec;
int key_len; int key_len;
unsigned long fc;
struct crypto_skcipher *fallback; struct crypto_skcipher *fallback;
}; };
...@@ -146,16 +144,16 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) ...@@ -146,16 +144,16 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
switch (sctx->key_len) { switch (sctx->key_len) {
case 16: case 16:
cpacf_km(CPACF_KM_AES_128_ENC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_128,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
case 24: case 24:
cpacf_km(CPACF_KM_AES_192_ENC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_192,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
case 32: case 32:
cpacf_km(CPACF_KM_AES_256_ENC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_256,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
} }
} }
...@@ -171,16 +169,16 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) ...@@ -171,16 +169,16 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
switch (sctx->key_len) { switch (sctx->key_len) {
case 16: case 16:
cpacf_km(CPACF_KM_AES_128_DEC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_128 | CPACF_DECRYPT,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
case 24: case 24:
cpacf_km(CPACF_KM_AES_192_DEC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_192 | CPACF_DECRYPT,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
case 32: case 32:
cpacf_km(CPACF_KM_AES_256_DEC, &sctx->key, out, in, cpacf_km(CPACF_KM_AES_256 | CPACF_DECRYPT,
AES_BLOCK_SIZE); &sctx->key, out, in, AES_BLOCK_SIZE);
break; break;
} }
} }
...@@ -301,16 +299,13 @@ static int ecb_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, ...@@ -301,16 +299,13 @@ static int ecb_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
switch (key_len) { switch (key_len) {
case 16: case 16:
sctx->enc = CPACF_KM_AES_128_ENC; sctx->fc = CPACF_KM_AES_128;
sctx->dec = CPACF_KM_AES_128_DEC;
break; break;
case 24: case 24:
sctx->enc = CPACF_KM_AES_192_ENC; sctx->fc = CPACF_KM_AES_192;
sctx->dec = CPACF_KM_AES_192_DEC;
break; break;
case 32: case 32:
sctx->enc = CPACF_KM_AES_256_ENC; sctx->fc = CPACF_KM_AES_256;
sctx->dec = CPACF_KM_AES_256_DEC;
break; break;
} }
...@@ -351,7 +346,7 @@ static int ecb_aes_encrypt(struct blkcipher_desc *desc, ...@@ -351,7 +346,7 @@ static int ecb_aes_encrypt(struct blkcipher_desc *desc,
return fallback_blk_enc(desc, dst, src, nbytes); return fallback_blk_enc(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_aes_crypt(desc, sctx->enc, sctx->key, &walk); return ecb_aes_crypt(desc, sctx->fc, sctx->key, &walk);
} }
static int ecb_aes_decrypt(struct blkcipher_desc *desc, static int ecb_aes_decrypt(struct blkcipher_desc *desc,
...@@ -365,7 +360,7 @@ static int ecb_aes_decrypt(struct blkcipher_desc *desc, ...@@ -365,7 +360,7 @@ static int ecb_aes_decrypt(struct blkcipher_desc *desc,
return fallback_blk_dec(desc, dst, src, nbytes); return fallback_blk_dec(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_aes_crypt(desc, sctx->dec, sctx->key, &walk); return ecb_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, sctx->key, &walk);
} }
static int fallback_init_blk(struct crypto_tfm *tfm) static int fallback_init_blk(struct crypto_tfm *tfm)
...@@ -430,16 +425,13 @@ static int cbc_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, ...@@ -430,16 +425,13 @@ static int cbc_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
switch (key_len) { switch (key_len) {
case 16: case 16:
sctx->enc = CPACF_KMC_AES_128_ENC; sctx->fc = CPACF_KMC_AES_128;
sctx->dec = CPACF_KMC_AES_128_DEC;
break; break;
case 24: case 24:
sctx->enc = CPACF_KMC_AES_192_ENC; sctx->fc = CPACF_KMC_AES_192;
sctx->dec = CPACF_KMC_AES_192_DEC;
break; break;
case 32: case 32:
sctx->enc = CPACF_KMC_AES_256_ENC; sctx->fc = CPACF_KMC_AES_256;
sctx->dec = CPACF_KMC_AES_256_DEC;
break; break;
} }
...@@ -492,7 +484,7 @@ static int cbc_aes_encrypt(struct blkcipher_desc *desc, ...@@ -492,7 +484,7 @@ static int cbc_aes_encrypt(struct blkcipher_desc *desc,
return fallback_blk_enc(desc, dst, src, nbytes); return fallback_blk_enc(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_aes_crypt(desc, sctx->enc, &walk); return cbc_aes_crypt(desc, sctx->fc, &walk);
} }
static int cbc_aes_decrypt(struct blkcipher_desc *desc, static int cbc_aes_decrypt(struct blkcipher_desc *desc,
...@@ -506,7 +498,7 @@ static int cbc_aes_decrypt(struct blkcipher_desc *desc, ...@@ -506,7 +498,7 @@ static int cbc_aes_decrypt(struct blkcipher_desc *desc,
return fallback_blk_dec(desc, dst, src, nbytes); return fallback_blk_dec(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_aes_crypt(desc, sctx->dec, &walk); return cbc_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, &walk);
} }
static struct crypto_alg cbc_aes_alg = { static struct crypto_alg cbc_aes_alg = {
...@@ -603,19 +595,16 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, ...@@ -603,19 +595,16 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
switch (key_len) { switch (key_len) {
case 32: case 32:
xts_ctx->enc = CPACF_KM_XTS_128_ENC; xts_ctx->fc = CPACF_KM_XTS_128;
xts_ctx->dec = CPACF_KM_XTS_128_DEC;
memcpy(xts_ctx->key + 16, in_key, 16); memcpy(xts_ctx->key + 16, in_key, 16);
memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16); memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16);
break; break;
case 48: case 48:
xts_ctx->enc = 0; xts_ctx->fc = 0;
xts_ctx->dec = 0;
xts_fallback_setkey(tfm, in_key, key_len); xts_fallback_setkey(tfm, in_key, key_len);
break; break;
case 64: case 64:
xts_ctx->enc = CPACF_KM_XTS_256_ENC; xts_ctx->fc = CPACF_KM_XTS_256;
xts_ctx->dec = CPACF_KM_XTS_256_DEC;
memcpy(xts_ctx->key, in_key, 32); memcpy(xts_ctx->key, in_key, 32);
memcpy(xts_ctx->pcc_key, in_key + 32, 32); memcpy(xts_ctx->pcc_key, in_key + 32, 32);
break; break;
...@@ -685,7 +674,7 @@ static int xts_aes_encrypt(struct blkcipher_desc *desc, ...@@ -685,7 +674,7 @@ static int xts_aes_encrypt(struct blkcipher_desc *desc,
return xts_fallback_encrypt(desc, dst, src, nbytes); return xts_fallback_encrypt(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return xts_aes_crypt(desc, xts_ctx->enc, xts_ctx, &walk); return xts_aes_crypt(desc, xts_ctx->fc, xts_ctx, &walk);
} }
static int xts_aes_decrypt(struct blkcipher_desc *desc, static int xts_aes_decrypt(struct blkcipher_desc *desc,
...@@ -699,7 +688,7 @@ static int xts_aes_decrypt(struct blkcipher_desc *desc, ...@@ -699,7 +688,7 @@ static int xts_aes_decrypt(struct blkcipher_desc *desc,
return xts_fallback_decrypt(desc, dst, src, nbytes); return xts_fallback_decrypt(desc, dst, src, nbytes);
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return xts_aes_crypt(desc, xts_ctx->dec, xts_ctx, &walk); return xts_aes_crypt(desc, xts_ctx->fc | CPACF_DECRYPT, xts_ctx, &walk);
} }
static int xts_fallback_init(struct crypto_tfm *tfm) static int xts_fallback_init(struct crypto_tfm *tfm)
...@@ -759,16 +748,13 @@ static int ctr_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, ...@@ -759,16 +748,13 @@ static int ctr_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
switch (key_len) { switch (key_len) {
case 16: case 16:
sctx->enc = CPACF_KMCTR_AES_128_ENC; sctx->fc = CPACF_KMCTR_AES_128;
sctx->dec = CPACF_KMCTR_AES_128_DEC;
break; break;
case 24: case 24:
sctx->enc = CPACF_KMCTR_AES_192_ENC; sctx->fc = CPACF_KMCTR_AES_192;
sctx->dec = CPACF_KMCTR_AES_192_DEC;
break; break;
case 32: case 32:
sctx->enc = CPACF_KMCTR_AES_256_ENC; sctx->fc = CPACF_KMCTR_AES_256;
sctx->dec = CPACF_KMCTR_AES_256_DEC;
break; break;
} }
...@@ -865,7 +851,7 @@ static int ctr_aes_encrypt(struct blkcipher_desc *desc, ...@@ -865,7 +851,7 @@ static int ctr_aes_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_aes_crypt(desc, sctx->enc, sctx, &walk); return ctr_aes_crypt(desc, sctx->fc, sctx, &walk);
} }
static int ctr_aes_decrypt(struct blkcipher_desc *desc, static int ctr_aes_decrypt(struct blkcipher_desc *desc,
...@@ -876,7 +862,7 @@ static int ctr_aes_decrypt(struct blkcipher_desc *desc, ...@@ -876,7 +862,7 @@ static int ctr_aes_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_aes_crypt(desc, sctx->dec, sctx, &walk); return ctr_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, sctx, &walk);
} }
static struct crypto_alg ctr_aes_alg = { static struct crypto_alg ctr_aes_alg = {
...@@ -906,11 +892,11 @@ static int __init aes_s390_init(void) ...@@ -906,11 +892,11 @@ static int __init aes_s390_init(void)
{ {
int ret; int ret;
if (cpacf_query(CPACF_KM, CPACF_KM_AES_128_ENC)) if (cpacf_query(CPACF_KM, CPACF_KM_AES_128))
keylen_flag |= AES_KEYLEN_128; keylen_flag |= AES_KEYLEN_128;
if (cpacf_query(CPACF_KM, CPACF_KM_AES_192_ENC)) if (cpacf_query(CPACF_KM, CPACF_KM_AES_192))
keylen_flag |= AES_KEYLEN_192; keylen_flag |= AES_KEYLEN_192;
if (cpacf_query(CPACF_KM, CPACF_KM_AES_256_ENC)) if (cpacf_query(CPACF_KM, CPACF_KM_AES_256))
keylen_flag |= AES_KEYLEN_256; keylen_flag |= AES_KEYLEN_256;
if (!keylen_flag) if (!keylen_flag)
...@@ -933,17 +919,17 @@ static int __init aes_s390_init(void) ...@@ -933,17 +919,17 @@ static int __init aes_s390_init(void)
if (ret) if (ret)
goto cbc_aes_err; goto cbc_aes_err;
if (cpacf_query(CPACF_KM, CPACF_KM_XTS_128_ENC) && if (cpacf_query(CPACF_KM, CPACF_KM_XTS_128) &&
cpacf_query(CPACF_KM, CPACF_KM_XTS_256_ENC)) { cpacf_query(CPACF_KM, CPACF_KM_XTS_256)) {
ret = crypto_register_alg(&xts_aes_alg); ret = crypto_register_alg(&xts_aes_alg);
if (ret) if (ret)
goto xts_aes_err; goto xts_aes_err;
xts_aes_alg_reg = 1; xts_aes_alg_reg = 1;
} }
if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_128_ENC) && if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_128) &&
cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_192_ENC) && cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_192) &&
cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_256_ENC)) { cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_256)) {
ctrblk = (u8 *) __get_free_page(GFP_KERNEL); ctrblk = (u8 *) __get_free_page(GFP_KERNEL);
if (!ctrblk) { if (!ctrblk) {
ret = -ENOMEM; ret = -ENOMEM;
......
...@@ -53,14 +53,15 @@ static void des_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) ...@@ -53,14 +53,15 @@ static void des_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
{ {
struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm); struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
cpacf_km(CPACF_KM_DEA_ENC, ctx->key, out, in, DES_BLOCK_SIZE); cpacf_km(CPACF_KM_DEA, ctx->key, out, in, DES_BLOCK_SIZE);
} }
static void des_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) static void des_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
{ {
struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm); struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
cpacf_km(CPACF_KM_DEA_DEC, ctx->key, out, in, DES_BLOCK_SIZE); cpacf_km(CPACF_KM_DEA | CPACF_DECRYPT,
ctx->key, out, in, DES_BLOCK_SIZE);
} }
static struct crypto_alg des_alg = { static struct crypto_alg des_alg = {
...@@ -148,7 +149,7 @@ static int ecb_des_encrypt(struct blkcipher_desc *desc, ...@@ -148,7 +149,7 @@ static int ecb_des_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_desall_crypt(desc, CPACF_KM_DEA_ENC, ctx->key, &walk); return ecb_desall_crypt(desc, CPACF_KM_DEA, ctx->key, &walk);
} }
static int ecb_des_decrypt(struct blkcipher_desc *desc, static int ecb_des_decrypt(struct blkcipher_desc *desc,
...@@ -159,7 +160,8 @@ static int ecb_des_decrypt(struct blkcipher_desc *desc, ...@@ -159,7 +160,8 @@ static int ecb_des_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_desall_crypt(desc, CPACF_KM_DEA_DEC, ctx->key, &walk); return ecb_desall_crypt(desc, CPACF_KM_DEA | CPACF_DECRYPT,
ctx->key, &walk);
} }
static struct crypto_alg ecb_des_alg = { static struct crypto_alg ecb_des_alg = {
...@@ -189,7 +191,7 @@ static int cbc_des_encrypt(struct blkcipher_desc *desc, ...@@ -189,7 +191,7 @@ static int cbc_des_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_desall_crypt(desc, CPACF_KMC_DEA_ENC, &walk); return cbc_desall_crypt(desc, CPACF_KMC_DEA, &walk);
} }
static int cbc_des_decrypt(struct blkcipher_desc *desc, static int cbc_des_decrypt(struct blkcipher_desc *desc,
...@@ -199,7 +201,7 @@ static int cbc_des_decrypt(struct blkcipher_desc *desc, ...@@ -199,7 +201,7 @@ static int cbc_des_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_desall_crypt(desc, CPACF_KMC_DEA_DEC, &walk); return cbc_desall_crypt(desc, CPACF_KMC_DEA | CPACF_DECRYPT, &walk);
} }
static struct crypto_alg cbc_des_alg = { static struct crypto_alg cbc_des_alg = {
...@@ -257,14 +259,15 @@ static void des3_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) ...@@ -257,14 +259,15 @@ static void des3_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{ {
struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm); struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
cpacf_km(CPACF_KM_TDEA_192_ENC, ctx->key, dst, src, DES_BLOCK_SIZE); cpacf_km(CPACF_KM_TDEA_192, ctx->key, dst, src, DES_BLOCK_SIZE);
} }
static void des3_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) static void des3_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{ {
struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm); struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
cpacf_km(CPACF_KM_TDEA_192_DEC, ctx->key, dst, src, DES_BLOCK_SIZE); cpacf_km(CPACF_KM_TDEA_192 | CPACF_DECRYPT,
ctx->key, dst, src, DES_BLOCK_SIZE);
} }
static struct crypto_alg des3_alg = { static struct crypto_alg des3_alg = {
...@@ -294,7 +297,7 @@ static int ecb_des3_encrypt(struct blkcipher_desc *desc, ...@@ -294,7 +297,7 @@ static int ecb_des3_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_desall_crypt(desc, CPACF_KM_TDEA_192_ENC, ctx->key, &walk); return ecb_desall_crypt(desc, CPACF_KM_TDEA_192, ctx->key, &walk);
} }
static int ecb_des3_decrypt(struct blkcipher_desc *desc, static int ecb_des3_decrypt(struct blkcipher_desc *desc,
...@@ -305,7 +308,8 @@ static int ecb_des3_decrypt(struct blkcipher_desc *desc, ...@@ -305,7 +308,8 @@ static int ecb_des3_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ecb_desall_crypt(desc, CPACF_KM_TDEA_192_DEC, ctx->key, &walk); return ecb_desall_crypt(desc, CPACF_KM_TDEA_192 | CPACF_DECRYPT,
ctx->key, &walk);
} }
static struct crypto_alg ecb_des3_alg = { static struct crypto_alg ecb_des3_alg = {
...@@ -335,7 +339,7 @@ static int cbc_des3_encrypt(struct blkcipher_desc *desc, ...@@ -335,7 +339,7 @@ static int cbc_des3_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192_ENC, &walk); return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192, &walk);
} }
static int cbc_des3_decrypt(struct blkcipher_desc *desc, static int cbc_des3_decrypt(struct blkcipher_desc *desc,
...@@ -345,7 +349,8 @@ static int cbc_des3_decrypt(struct blkcipher_desc *desc, ...@@ -345,7 +349,8 @@ static int cbc_des3_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192_DEC, &walk); return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192 | CPACF_DECRYPT,
&walk);
} }
static struct crypto_alg cbc_des3_alg = { static struct crypto_alg cbc_des3_alg = {
...@@ -456,7 +461,7 @@ static int ctr_des_encrypt(struct blkcipher_desc *desc, ...@@ -456,7 +461,7 @@ static int ctr_des_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_desall_crypt(desc, CPACF_KMCTR_DEA_ENC, ctx, &walk); return ctr_desall_crypt(desc, CPACF_KMCTR_DEA, ctx, &walk);
} }
static int ctr_des_decrypt(struct blkcipher_desc *desc, static int ctr_des_decrypt(struct blkcipher_desc *desc,
...@@ -467,7 +472,8 @@ static int ctr_des_decrypt(struct blkcipher_desc *desc, ...@@ -467,7 +472,8 @@ static int ctr_des_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_desall_crypt(desc, CPACF_KMCTR_DEA_DEC, ctx, &walk); return ctr_desall_crypt(desc, CPACF_KMCTR_DEA | CPACF_DECRYPT,
ctx, &walk);
} }
static struct crypto_alg ctr_des_alg = { static struct crypto_alg ctr_des_alg = {
...@@ -499,7 +505,7 @@ static int ctr_des3_encrypt(struct blkcipher_desc *desc, ...@@ -499,7 +505,7 @@ static int ctr_des3_encrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192_ENC, ctx, &walk); return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192, ctx, &walk);
} }
static int ctr_des3_decrypt(struct blkcipher_desc *desc, static int ctr_des3_decrypt(struct blkcipher_desc *desc,
...@@ -510,7 +516,8 @@ static int ctr_des3_decrypt(struct blkcipher_desc *desc, ...@@ -510,7 +516,8 @@ static int ctr_des3_decrypt(struct blkcipher_desc *desc,
struct blkcipher_walk walk; struct blkcipher_walk walk;
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192_DEC, ctx, &walk); return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192 | CPACF_DECRYPT,
ctx, &walk);
} }
static struct crypto_alg ctr_des3_alg = { static struct crypto_alg ctr_des3_alg = {
...@@ -538,8 +545,8 @@ static int __init des_s390_init(void) ...@@ -538,8 +545,8 @@ static int __init des_s390_init(void)
{ {
int ret; int ret;
if (!cpacf_query(CPACF_KM, CPACF_KM_DEA_ENC) || if (!cpacf_query(CPACF_KM, CPACF_KM_DEA) ||
!cpacf_query(CPACF_KM, CPACF_KM_TDEA_192_ENC)) !cpacf_query(CPACF_KM, CPACF_KM_TDEA_192))
return -EOPNOTSUPP; return -EOPNOTSUPP;
ret = crypto_register_alg(&des_alg); ret = crypto_register_alg(&des_alg);
...@@ -561,8 +568,8 @@ static int __init des_s390_init(void) ...@@ -561,8 +568,8 @@ static int __init des_s390_init(void)
if (ret) if (ret)
goto cbc_des3_err; goto cbc_des3_err;
if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_DEA_ENC) && if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_DEA) &&
cpacf_query(CPACF_KMCTR, CPACF_KMCTR_TDEA_192_ENC)) { cpacf_query(CPACF_KMCTR, CPACF_KMCTR_TDEA_192)) {
ret = crypto_register_alg(&ctr_des_alg); ret = crypto_register_alg(&ctr_des_alg);
if (ret) if (ret)
goto ctr_des_err; goto ctr_des_err;
......
...@@ -28,67 +28,51 @@ ...@@ -28,67 +28,51 @@
#define CPACF_PPNO 0xb93c /* MSA5 */ #define CPACF_PPNO 0xb93c /* MSA5 */
/* /*
* Function codes for the KM (CIPHER MESSAGE) * Decryption modifier bit
* instruction (0x80 is the decipher modifier bit) */
#define CPACF_DECRYPT 0x80
/*
* Function codes for the KM (CIPHER MESSAGE) instruction
*/ */
#define CPACF_KM_QUERY 0x00 #define CPACF_KM_QUERY 0x00
#define CPACF_KM_DEA_ENC 0x01 #define CPACF_KM_DEA 0x01
#define CPACF_KM_DEA_DEC 0x81 #define CPACF_KM_TDEA_128 0x02
#define CPACF_KM_TDEA_128_ENC 0x02 #define CPACF_KM_TDEA_192 0x03
#define CPACF_KM_TDEA_128_DEC 0x82 #define CPACF_KM_AES_128 0x12
#define CPACF_KM_TDEA_192_ENC 0x03 #define CPACF_KM_AES_192 0x13
#define CPACF_KM_TDEA_192_DEC 0x83 #define CPACF_KM_AES_256 0x14
#define CPACF_KM_AES_128_ENC 0x12 #define CPACF_KM_XTS_128 0x32
#define CPACF_KM_AES_128_DEC 0x92 #define CPACF_KM_XTS_256 0x34
#define CPACF_KM_AES_192_ENC 0x13
#define CPACF_KM_AES_192_DEC 0x93
#define CPACF_KM_AES_256_ENC 0x14
#define CPACF_KM_AES_256_DEC 0x94
#define CPACF_KM_XTS_128_ENC 0x32
#define CPACF_KM_XTS_128_DEC 0xb2
#define CPACF_KM_XTS_256_ENC 0x34
#define CPACF_KM_XTS_256_DEC 0xb4
/* /*
* Function codes for the KMC (CIPHER MESSAGE WITH CHAINING) * Function codes for the KMC (CIPHER MESSAGE WITH CHAINING)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_KMC_QUERY 0x00 #define CPACF_KMC_QUERY 0x00
#define CPACF_KMC_DEA_ENC 0x01 #define CPACF_KMC_DEA 0x01
#define CPACF_KMC_DEA_DEC 0x81 #define CPACF_KMC_TDEA_128 0x02
#define CPACF_KMC_TDEA_128_ENC 0x02 #define CPACF_KMC_TDEA_192 0x03
#define CPACF_KMC_TDEA_128_DEC 0x82 #define CPACF_KMC_AES_128 0x12
#define CPACF_KMC_TDEA_192_ENC 0x03 #define CPACF_KMC_AES_192 0x13
#define CPACF_KMC_TDEA_192_DEC 0x83 #define CPACF_KMC_AES_256 0x14
#define CPACF_KMC_AES_128_ENC 0x12
#define CPACF_KMC_AES_128_DEC 0x92
#define CPACF_KMC_AES_192_ENC 0x13
#define CPACF_KMC_AES_192_DEC 0x93
#define CPACF_KMC_AES_256_ENC 0x14
#define CPACF_KMC_AES_256_DEC 0x94
#define CPACF_KMC_PRNG 0x43 #define CPACF_KMC_PRNG 0x43
/* /*
* Function codes for the KMCTR (CIPHER MESSAGE WITH COUNTER) * Function codes for the KMCTR (CIPHER MESSAGE WITH COUNTER)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_KMCTR_QUERY 0x00 #define CPACF_KMCTR_QUERY 0x00
#define CPACF_KMCTR_DEA_ENC 0x01 #define CPACF_KMCTR_DEA 0x01
#define CPACF_KMCTR_DEA_DEC 0x81 #define CPACF_KMCTR_TDEA_128 0x02
#define CPACF_KMCTR_TDEA_128_ENC 0x02 #define CPACF_KMCTR_TDEA_192 0x03
#define CPACF_KMCTR_TDEA_128_DEC 0x82 #define CPACF_KMCTR_AES_128 0x12
#define CPACF_KMCTR_TDEA_192_ENC 0x03 #define CPACF_KMCTR_AES_192 0x13
#define CPACF_KMCTR_TDEA_192_DEC 0x83 #define CPACF_KMCTR_AES_256 0x14
#define CPACF_KMCTR_AES_128_ENC 0x12
#define CPACF_KMCTR_AES_128_DEC 0x92
#define CPACF_KMCTR_AES_192_ENC 0x13
#define CPACF_KMCTR_AES_192_DEC 0x93
#define CPACF_KMCTR_AES_256_ENC 0x14
#define CPACF_KMCTR_AES_256_DEC 0x94
/* /*
* Function codes for the KIMD (COMPUTE INTERMEDIATE MESSAGE DIGEST) * Function codes for the KIMD (COMPUTE INTERMEDIATE MESSAGE DIGEST)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_KIMD_QUERY 0x00 #define CPACF_KIMD_QUERY 0x00
#define CPACF_KIMD_SHA_1 0x01 #define CPACF_KIMD_SHA_1 0x01
...@@ -98,7 +82,7 @@ ...@@ -98,7 +82,7 @@
/* /*
* Function codes for the KLMD (COMPUTE LAST MESSAGE DIGEST) * Function codes for the KLMD (COMPUTE LAST MESSAGE DIGEST)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_KLMD_QUERY 0x00 #define CPACF_KLMD_QUERY 0x00
#define CPACF_KLMD_SHA_1 0x01 #define CPACF_KLMD_SHA_1 0x01
...@@ -107,7 +91,7 @@ ...@@ -107,7 +91,7 @@
/* /*
* function codes for the KMAC (COMPUTE MESSAGE AUTHENTICATION CODE) * function codes for the KMAC (COMPUTE MESSAGE AUTHENTICATION CODE)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_KMAC_QUERY 0x00 #define CPACF_KMAC_QUERY 0x00
#define CPACF_KMAC_DEA 0x01 #define CPACF_KMAC_DEA 0x01
...@@ -116,7 +100,7 @@ ...@@ -116,7 +100,7 @@
/* /*
* Function codes for the PPNO (PERFORM PSEUDORANDOM NUMBER OPERATION) * Function codes for the PPNO (PERFORM PSEUDORANDOM NUMBER OPERATION)
* instruction (0x80 is the decipher modifier bit) * instruction
*/ */
#define CPACF_PPNO_QUERY 0x00 #define CPACF_PPNO_QUERY 0x00
#define CPACF_PPNO_SHA512_DRNG_GEN 0x03 #define CPACF_PPNO_SHA512_DRNG_GEN 0x03
...@@ -194,7 +178,7 @@ static inline int cpacf_query(unsigned int opcode, unsigned int func) ...@@ -194,7 +178,7 @@ static inline int cpacf_query(unsigned int opcode, unsigned int func)
* Returns 0 for the query func, number of processed bytes for * Returns 0 for the query func, number of processed bytes for
* encryption/decryption funcs * encryption/decryption funcs
*/ */
static inline int cpacf_km(long func, void *param, static inline int cpacf_km(unsigned long func, void *param,
u8 *dest, const u8 *src, long src_len) u8 *dest, const u8 *src, long src_len)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -224,7 +208,7 @@ static inline int cpacf_km(long func, void *param, ...@@ -224,7 +208,7 @@ static inline int cpacf_km(long func, void *param,
* Returns 0 for the query func, number of processed bytes for * Returns 0 for the query func, number of processed bytes for
* encryption/decryption funcs * encryption/decryption funcs
*/ */
static inline int cpacf_kmc(long func, void *param, static inline int cpacf_kmc(unsigned long func, void *param,
u8 *dest, const u8 *src, long src_len) u8 *dest, const u8 *src, long src_len)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -253,7 +237,7 @@ static inline int cpacf_kmc(long func, void *param, ...@@ -253,7 +237,7 @@ static inline int cpacf_kmc(long func, void *param,
* *
* Returns 0 for the query func, number of processed bytes for digest funcs * Returns 0 for the query func, number of processed bytes for digest funcs
*/ */
static inline int cpacf_kimd(long func, void *param, static inline int cpacf_kimd(unsigned long func, void *param,
const u8 *src, long src_len) const u8 *src, long src_len)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -280,7 +264,7 @@ static inline int cpacf_kimd(long func, void *param, ...@@ -280,7 +264,7 @@ static inline int cpacf_kimd(long func, void *param,
* *
* Returns 0 for the query func, number of processed bytes for digest funcs * Returns 0 for the query func, number of processed bytes for digest funcs
*/ */
static inline int cpacf_klmd(long func, void *param, static inline int cpacf_klmd(unsigned long func, void *param,
const u8 *src, long src_len) const u8 *src, long src_len)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -308,7 +292,7 @@ static inline int cpacf_klmd(long func, void *param, ...@@ -308,7 +292,7 @@ static inline int cpacf_klmd(long func, void *param,
* *
* Returns 0 for the query func, number of processed bytes for digest funcs * Returns 0 for the query func, number of processed bytes for digest funcs
*/ */
static inline int cpacf_kmac(long func, void *param, static inline int cpacf_kmac(unsigned long func, void *param,
const u8 *src, long src_len) const u8 *src, long src_len)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -338,7 +322,7 @@ static inline int cpacf_kmac(long func, void *param, ...@@ -338,7 +322,7 @@ static inline int cpacf_kmac(long func, void *param,
* Returns 0 for the query func, number of processed bytes for * Returns 0 for the query func, number of processed bytes for
* encryption/decryption funcs * encryption/decryption funcs
*/ */
static inline int cpacf_kmctr(long func, void *param, u8 *dest, static inline int cpacf_kmctr(unsigned long func, void *param, u8 *dest,
const u8 *src, long src_len, u8 *counter) const u8 *src, long src_len, u8 *counter)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
...@@ -372,7 +356,7 @@ static inline int cpacf_kmctr(long func, void *param, u8 *dest, ...@@ -372,7 +356,7 @@ static inline int cpacf_kmctr(long func, void *param, u8 *dest,
* Returns 0 for the query func, number of random bytes stored in * Returns 0 for the query func, number of random bytes stored in
* dest buffer for generate function * dest buffer for generate function
*/ */
static inline int cpacf_ppno(long func, void *param, static inline int cpacf_ppno(unsigned long func, void *param,
u8 *dest, long dest_len, u8 *dest, long dest_len,
const u8 *seed, long seed_len) const u8 *seed, long seed_len)
{ {
...@@ -402,7 +386,7 @@ static inline int cpacf_ppno(long func, void *param, ...@@ -402,7 +386,7 @@ static inline int cpacf_ppno(long func, void *param,
* *
* Returns 0. * Returns 0.
*/ */
static inline int cpacf_pcc(long func, void *param) static inline int cpacf_pcc(unsigned long func, void *param)
{ {
register unsigned long r0 asm("0") = (unsigned long) func; register unsigned long r0 asm("0") = (unsigned long) func;
register unsigned long r1 asm("1") = (unsigned long) param; register unsigned long r1 asm("1") = (unsigned long) param;
......
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