mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-08 23:13:38 +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,
|
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;
|
||||||
/* key_len is two SMS4 keys */
|
|
||||||
(void)0; /* terminate potentially open 'else' */
|
|
||||||
|
|
||||||
if (enc) {
|
if (enc) {
|
||||||
sms4_set_encrypt_key(&xctx->ks1.ks, key);
|
sms4_set_encrypt_key(&xctx->ks1.ks, key);
|
||||||
xctx->xts.block1 = (block128_f)sms4_encrypt;
|
|
||||||
} else {
|
} else {
|
||||||
sms4_set_decrypt_key(&xctx->ks1.ks, key);
|
sms4_set_decrypt_key(&xctx->ks1.ks, key);
|
||||||
xctx->xts.block1 = (block128_f)sms4_encrypt;
|
|
||||||
}
|
}
|
||||||
|
sms4_set_encrypt_key(&xctx->ks2.ks, key + SMS4_KEY_LENGTH);
|
||||||
sms4_set_encrypt_key(&xctx->ks2.ks, key + EVP_CIPHER_CTX_key_length(ctx)/2);
|
xctx->xts.block1 = (block128_f)sms4_encrypt;
|
||||||
xctx->xts.block2 = (block128_f)sms4_encrypt;
|
xctx->xts.block2 = (block128_f)sms4_encrypt;
|
||||||
|
|
||||||
xctx->xts.key1 = &xctx->ks1;
|
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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
|||||||
Reference in New Issue
Block a user