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, static int sms4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc) 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) if (!iv && !key)
return 1; return 1;
if (key) if (key) {
do { xctx->stream = NULL;
xctx->stream = NULL; if (enc) {
/* key_len is two SMS4 keys */ sms4_set_encrypt_key(&xctx->ks1.ks, key);
(void)0; /* terminate potentially open 'else' */ } else {
sms4_set_decrypt_key(&xctx->ks1.ks, key);
if (enc) { }
sms4_set_encrypt_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.block1 = (block128_f)sms4_encrypt;
} else { xctx->xts.block2 = (block128_f)sms4_encrypt;
sms4_set_decrypt_key(&xctx->ks1.ks, key); xctx->xts.key1 = &xctx->ks1;
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 (iv) { if (iv) {
xctx->xts.key2 = &xctx->ks2; 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 = { static const EVP_CIPHER sms4_xts = {
NID_sms4_xts, NID_sms4_xts,
SMS4_XTS_BLOCK_SIZE, SMS4_XTS_BLOCK_SIZE,
SMS4_KEY_LENGTH, SMS4_KEY_LENGTH * 2,
SMS4_IV_LENGTH, SMS4_IV_LENGTH,
SMS4_XTS_FLAGS, SMS4_XTS_FLAGS,
sms4_xts_init_key, sms4_xts_init_key,

View File

@@ -41,9 +41,9 @@ extern "C" {
*/ */
# define OPENSSL_VERSION_NUMBER 0x1010004fL # define OPENSSL_VERSION_NUMBER 0x1010004fL
# ifdef OPENSSL_FIPS # ifdef OPENSSL_FIPS
# define OPENSSL_VERSION_TEXT "GmSSL 2.5.2 - OpenSSL 1.1.0d-fips 18 July 2019" # define OPENSSL_VERSION_TEXT "GmSSL 2.5.2 - OpenSSL 1.1.0d-fips 1 Aug 2019"
# else # else
# define OPENSSL_VERSION_TEXT "GmSSL 2.5.2 - OpenSSL 1.1.0d 18 July 2019" # define OPENSSL_VERSION_TEXT "GmSSL 2.5.2 - OpenSSL 1.1.0d 1 Aug 2019"
# endif # endif
/*- /*-