mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-07 00:46:17 +08:00
Fix SMS4-XTS bug
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -41,9 +41,9 @@ extern "C" {
|
||||
*/
|
||||
# define OPENSSL_VERSION_NUMBER 0x1010004fL
|
||||
# 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
|
||||
# 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
|
||||
|
||||
/*-
|
||||
|
||||
Reference in New Issue
Block a user