History

avutil/tests/aes_ctr: also check the encrypted buffer

The test in its current form is just ensuring the plain text output is the same as the plain text input, not bothering to check if anything was done with the latter. av_aes_ctr_crypt() could be a simple memcpy under the hood and this test would still succeed. To check the integrity of the encrypted buffer, both the IV and the key need to be fixed. As such, and in order to not remove the existing randomization of the input IV, do two runs, one with random initialization data, and one with static data.

James Almer committed 1 year ago

Commit 19085281 parent 0a34f001 file · +23 −0Browse files

Unified · Split

libavutil/tests/aes_ctr.c+23−0
@@ -26,6 +26,16 @@ static const DECLARE_ALIGNED(8, uint8_t, plain)[] = { · 25 unmodified lines
26 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f,26 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f,
27 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f27 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x6f
28};28};
29
30static const DECLARE_ALIGNED(8, uint8_t, encrypted)[] = {
31 0x95, 0xcd, 0x9a, 0x8a, 0x83, 0xa2, 0x1a, 0x84, 0x92, 0xed,
32 0xd6, 0xf2, 0x57, 0x2f, 0x61, 0x98, 0xbc, 0x20, 0x98, 0xee
33};
34
35static const DECLARE_ALIGNED(8, uint8_t, fixed_iv)[] = {
36 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef
37};
38
29static DECLARE_ALIGNED(8, uint8_t, tmp)[20];39static DECLARE_ALIGNED(8, uint8_t, tmp)[20];
30 40
31int main (void)41int main (void)
@@ -34,6 +44,7 @@ int main (void) · 2 unmodified lines
34 struct AVAESCTR *ae, *ad;44 struct AVAESCTR *ae, *ad;
35 const uint8_t *iv;45 const uint8_t *iv;
36 46
47 for (int i = 0; i < 2; i++) {
37 ae = av_aes_ctr_alloc();48 ae = av_aes_ctr_alloc();
38 ad = av_aes_ctr_alloc();49 ad = av_aes_ctr_alloc();
39 50
@@ -46,11 +57,18 @@ int main (void) · 6 unmodified lines
46 if (av_aes_ctr_init(ad, (const uint8_t*)"0123456789abcdef") < 0)57 if (av_aes_ctr_init(ad, (const uint8_t*)"0123456789abcdef") < 0)
47 goto ERROR;58 goto ERROR;
48 59
60 if (i)
61 av_aes_ctr_set_iv(ae, fixed_iv);
62 else
49 av_aes_ctr_set_random_iv(ae);63 av_aes_ctr_set_random_iv(ae);
50 iv = av_aes_ctr_get_iv(ae);64 iv = av_aes_ctr_get_iv(ae);
51 av_aes_ctr_set_full_iv(ad, iv);65 av_aes_ctr_set_full_iv(ad, iv);
52 66
53 av_aes_ctr_crypt(ae, tmp, plain, sizeof(tmp));67 av_aes_ctr_crypt(ae, tmp, plain, sizeof(tmp));
68 if (i && memcmp(tmp, encrypted, sizeof(tmp)) != 0) {
69 av_log(NULL, AV_LOG_ERROR, "test failed\n");
70 goto ERROR;
71 }
54 av_aes_ctr_crypt(ad, tmp, tmp, sizeof(tmp));72 av_aes_ctr_crypt(ad, tmp, tmp, sizeof(tmp));
55 73
56 if (memcmp(tmp, plain, sizeof(tmp)) != 0){74 if (memcmp(tmp, plain, sizeof(tmp)) != 0){
@@ -58,6 +76,11 @@ int main (void) · 1 unmodified line
58 goto ERROR;76 goto ERROR;
59 }77 }
60 78
79 av_aes_ctr_free(ae);
80 av_aes_ctr_free(ad);
81 ae = ad = NULL;
82 }
83
61 av_log(NULL, AV_LOG_INFO, "test passed\n");84 av_log(NULL, AV_LOG_INFO, "test passed\n");
62 ret = 0;85 ret = 0;
63 86

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t