mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-20 03:44:15 +08:00
Merge pull request #1899 from wangtsiao/dev/fix_sdf_cbc
修复 SDF CBC 流式解密 IV 未更新问题
This commit is contained in:
@@ -291,9 +291,13 @@ static int sdf_cbc_encrypt_blocks(SDF_KEY *key, uint8_t iv[16], const uint8_t *i
|
|||||||
|
|
||||||
static int sdf_cbc_decrypt_blocks(SDF_KEY *key, uint8_t iv[16], const uint8_t *in, size_t nblocks, uint8_t *out)
|
static int sdf_cbc_decrypt_blocks(SDF_KEY *key, uint8_t iv[16], const uint8_t *in, size_t nblocks, uint8_t *out)
|
||||||
{
|
{
|
||||||
|
uint8_t last_block[16];
|
||||||
unsigned int inlen = (unsigned int)(nblocks * 16);
|
unsigned int inlen = (unsigned int)(nblocks * 16);
|
||||||
unsigned int outlen = 0;
|
unsigned int outlen = 0;
|
||||||
|
|
||||||
|
if (inlen) {
|
||||||
|
memcpy(last_block, in + inlen - 16, 16);
|
||||||
|
}
|
||||||
if (SDF_Decrypt(key->session, key->handle, SGD_SM4_CBC,
|
if (SDF_Decrypt(key->session, key->handle, SGD_SM4_CBC,
|
||||||
iv, (unsigned char *)in, inlen, out, &outlen) != SDR_OK) {
|
iv, (unsigned char *)in, inlen, out, &outlen) != SDR_OK) {
|
||||||
error_print();
|
error_print();
|
||||||
@@ -304,9 +308,7 @@ static int sdf_cbc_decrypt_blocks(SDF_KEY *key, uint8_t iv[16], const uint8_t *i
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (inlen) {
|
if (inlen) {
|
||||||
if (memcmp(iv, in + inlen - 16, 16) != 0) {
|
memcpy(iv, last_block, 16);
|
||||||
memcmp(iv, in + inlen - 16, 16);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user