Fix SMS4-XTS bug

This commit is contained in:
Zhi Guan
2019-08-01 09:15:08 +08:00
parent fa68930083
commit 1811f1b51d
2 changed files with 16 additions and 23 deletions

View File

@@ -107,29 +107,22 @@ static int sms4_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
static int sms4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
EVP_SMS4_XTS_CTX *xctx = EVP_C_DATA(EVP_SMS4_XTS_CTX,ctx);
EVP_SMS4_XTS_CTX *xctx = EVP_C_DATA(EVP_SMS4_XTS_CTX, ctx);
if (!iv && !key)
return 1;
if (key)
do {
xctx->stream = NULL;
/* key_len is two SMS4 keys */
(void)0; /* terminate potentially open 'else' */
if (enc) {
sms4_set_encrypt_key(&xctx->ks1.ks, key);
xctx->xts.block1 = (block128_f)sms4_encrypt;
} else {
sms4_set_decrypt_key(&xctx->ks1.ks, key);
xctx->xts.block1 = (block128_f)sms4_encrypt;
}
sms4_set_encrypt_key(&xctx->ks2.ks, key + EVP_CIPHER_CTX_key_length(ctx)/2);
xctx->xts.block2 = (block128_f)sms4_encrypt;
xctx->xts.key1 = &xctx->ks1;
} while (0);
if (key) {
xctx->stream = NULL;
if (enc) {
sms4_set_encrypt_key(&xctx->ks1.ks, key);
} else {
sms4_set_decrypt_key(&xctx->ks1.ks, key);
}
sms4_set_encrypt_key(&xctx->ks2.ks, key + SMS4_KEY_LENGTH);
xctx->xts.block1 = (block128_f)sms4_encrypt;
xctx->xts.block2 = (block128_f)sms4_encrypt;
xctx->xts.key1 = &xctx->ks1;
}
if (iv) {
xctx->xts.key2 = &xctx->ks2;
@@ -167,7 +160,7 @@ static int sms4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
static const EVP_CIPHER sms4_xts = {
NID_sms4_xts,
SMS4_XTS_BLOCK_SIZE,
SMS4_KEY_LENGTH,
SMS4_KEY_LENGTH * 2,
SMS4_IV_LENGTH,
SMS4_XTS_FLAGS,
sms4_xts_init_key,