mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-19 11:23:38 +08:00
Add SM4-CBC-Padding test
This commit is contained in:
732
tests/sm4_cbc_paddingtest.h
Normal file
732
tests/sm4_cbc_paddingtest.h
Normal file
@@ -0,0 +1,732 @@
|
||||
/*
|
||||
* Copyright 2014-2026 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License);
|
||||
* you may not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
static const TEST_SM4_CBC_PADDING_VECTOR sm4_cbc_padding_tests[] = {
|
||||
{
|
||||
1,
|
||||
"empty message",
|
||||
"Pseudorandom",
|
||||
"e34f15c7bd819930fe9d66e0c166e61c",
|
||||
"da9520f7d3520277035173299388bee2",
|
||||
"",
|
||||
"7694fc6b984c8abf9bbe826099f415f2",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
2,
|
||||
"message size divisible by block size",
|
||||
"Pseudorandom",
|
||||
"e09eaa5a3f5e56d279d5e7a03373f6ea",
|
||||
"c9ee3cd746bf208c65ca9e72a266d54f",
|
||||
"ef4eab37181f98423e53e947e7050fd0",
|
||||
"dcedae60f03d9d435405aacb8cdab67a2808b529fe970c069e84592571e785eb",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
3,
|
||||
"message size divisible by block size",
|
||||
"Pseudorandom",
|
||||
"9bd3902ed0996c869b572272e76f3889",
|
||||
"8b2e86a9a185cfa6f51c7cc595b822bc",
|
||||
"a7ba19d49ee1ea02f098aa8e30c740d893a4456ccc294040484ed8a00a55f93e",
|
||||
"e347260a62b24fd11350e8b9414e6d4782571fb3a1f8a53ce16be81182d3813f2fb3772576d67c43d600375b505f57ab",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
4,
|
||||
"message size divisible by block size",
|
||||
"Pseudorandom",
|
||||
"75ce184447cada672e02290310d224f7",
|
||||
"2717d10eb2eea3b39ec257e43307a260",
|
||||
"c774810a31a6421ad8eaafd5c22fa2455e2c167fee4a0b73ff927b2d96c69da1e939407b86b1c19bcfc69c434c3cf8a2",
|
||||
"8a1ec67097f2f18ee84d4c9fa8842d99a80b20eb8d70f7fbbb01d7310fe38a54277875e32d703a658d7012b3b4d782e38219ca3e0ba2dc47b1a4188875767961",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
5,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"e1e726677f4893890f8c027f9d8ef80d",
|
||||
"155fd397579b0b5d991d42607f2cc9ad",
|
||||
"3f",
|
||||
"ff18c9beb5b797ceefe57df2ff841542",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
6,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"b151f491c4c006d1f28214aa3da9a985",
|
||||
"4eb836be6808db264cb1111a3283b394",
|
||||
"27d9",
|
||||
"e6b6ca8251528300325dc6d7f24d9aa0",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
7,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"c36ff15f72777ee21deec07b63c1a0cd",
|
||||
"a8446c27ea9068d8d924d5c4eac91157",
|
||||
"50b428",
|
||||
"854a25f8d6b6ad4ddfbfff5feb7c72d7",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
8,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"32b9c5c78c3a0689a86052420fa1e8fc",
|
||||
"ef026d27da3702d7bb72e5e364a8f8f2",
|
||||
"0b9262ec",
|
||||
"52067802fcf07cf25875baf7f2b6a00b",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
9,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"43151bbaef367277ebfc97509d0aa49c",
|
||||
"c9defd3929dcd6c355c144e9750dd869",
|
||||
"eaa91273e7",
|
||||
"f8654c02f0165d3172c65738a9e838ad",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
10,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"481440298525cc261f8159159aedf62d",
|
||||
"ce91e0454b0123f1ead0f158826459e9",
|
||||
"6123c556c5cc",
|
||||
"23242edb53dde6626d390462d6c74f2a",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
11,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"9ca26eb88731efbf7f810d5d95e196ac",
|
||||
"1cb7bc8fe00523e7743d3cd9f483d6fe",
|
||||
"7e48f06183aa40",
|
||||
"d998cc56d3c76a0d394de477f96dba31",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
12,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"48f0d03e41cc55c4b58f737b5acdea32",
|
||||
"a345f084229dbfe0ceab6c6939571532",
|
||||
"f4a133aa6d5985a0",
|
||||
"7a505c820475e02d38de9086a23af43f",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
13,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"1c958849f31996b28939ce513087d1be",
|
||||
"e5b6f73f132355b7be7d977bea068dfc",
|
||||
"b0d2fee11b8e2f86b7",
|
||||
"d0b6e8296a29a67c2516f39e8edef12d",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
14,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"39de0ebea97c09b2301a90009a423253",
|
||||
"c7cd10ca949ea03e7d4ba204b69e09b8",
|
||||
"81e5c33b4c620852f044",
|
||||
"fc29ffb40fc1662664d755d32e796d32",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
15,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"91656d8fc0aced60ddb1c4006d0dde53",
|
||||
"bb8c9af30821dfeb7124392a554d9f01",
|
||||
"7b3e440fe566790064b2ec",
|
||||
"4f6058f3f3c56010baad3261fd63682e",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
16,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"af7d5134720b5386158d51ea126e7cf9",
|
||||
"54c3b90ca6e933f9094334d0263d3775",
|
||||
"7cc6fcc925c20f3c83b5567c",
|
||||
"1b8c0fae2851b42a194e7c2ee180bdb2",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
17,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"4ed56753de6f75a032ebabca3ce27971",
|
||||
"9a2c5e91d4f0b9b9da64b46c5c2c8cb2",
|
||||
"0c8c0f5619d9f8da5339281285",
|
||||
"5ee6d92cbc37c38d1445d354d3ccdff7",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
18,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"beba50c936b696c15e25046dffb23a64",
|
||||
"cf7951501104e1434309e6b936ec1742",
|
||||
"821ea8532fbabffb6e3d212e9b46",
|
||||
"6d9d80702e213ee72dbdd2d665498432",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
19,
|
||||
"small plaintext size",
|
||||
"Pseudorandom",
|
||||
"501d81ebf912ddb87fbe3b7aac1437bc",
|
||||
"90f5cf4fbfd2e2a1ab8eef402617bd5c",
|
||||
"2368e3c3636b5e8e94d2081adbf798",
|
||||
"35ea626cbf04067e5d71d6ff8c610c3f",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
20,
|
||||
"plaintext size > 16",
|
||||
"Pseudorandom",
|
||||
"831e664c9e3f0c3094c0b27b9d908eb2",
|
||||
"54f2459e40e002763144f4752cde2fb5",
|
||||
"26603bb76dd0a0180791c4ed4d3b058807",
|
||||
"f6b17ee314ca2f0d9f983aa1871794e92c3de602c87827dbb298e4e2e0d8849d",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
21,
|
||||
"plaintext size > 16",
|
||||
"Pseudorandom",
|
||||
"cbffc6c8c7f76f46349c32d666f4efb0",
|
||||
"088e01c2c65b26e7ad6af7b92ea09d73",
|
||||
"6df067add738195fd55ac2e76b476971b9a0e6d8",
|
||||
"ad76703fd6c97c5d8aa3b8540aaee57535a6cc8eec9ce5f7ee35c4e22fd9b569",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
22,
|
||||
"plaintext size > 16",
|
||||
"Pseudorandom",
|
||||
"fda6a01194beb462953d7e6c49b32dac",
|
||||
"d9c9468796a2f5741b84d2d41430c5d3",
|
||||
"f60ae3b036abcab78c98fc1d4b67970c0955cb6fe24483f8907fd73319679b",
|
||||
"a425da38e20996c37a39b5b69471a13fbcd34feeeeb96d94791613cb7c127b31",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
23,
|
||||
"plaintext size > 16",
|
||||
"Pseudorandom",
|
||||
"efd9caa8ac68e9e29acdae57e93bcea8",
|
||||
"c98b47808add45c0c891983ec4b09846",
|
||||
"3e1d2001f1e475b972738936443a5f51eedaf802a66fadf2406cfaadb0549149fcb9f485e534dc2d",
|
||||
"ac5aa3adae0aebee555d2bb8208cf37bbeeb1352bc0d6c78016d6ea020ba222120ee124abbf967e78010c20e4e5749ef",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
24,
|
||||
"plaintext size > 16",
|
||||
"Pseudorandom",
|
||||
"37e4dbdc436258d5a9adb9f205c77cf3",
|
||||
"08e9410de244d3f40607ebae38fa74e7",
|
||||
"24a874aec067116ad22eb55846ded3f5e86919a135585c929a86d92b2958fed110e52e33804887243584a6a94402cc9a105e0c940ec335bd2890f16dcce3fc8bd02873c80ade6f1ac08683130bcca454",
|
||||
"6533ff745d1c51519b1fd4f0382e3b65c6561a1f4b116104effde1386ada111e010fb9604d6c5fad4a11484bbb6165b07dccd107fd46415bb2712a67d8b2584f3eb11b3a42421f4eda72efa220c79ae8811d30088ab9cf7fb5d2cf13962163a0",
|
||||
TEST_RESULT_VALID,
|
||||
},
|
||||
{
|
||||
25,
|
||||
"empty ciphertext",
|
||||
"NoPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
26,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"6b81b4425cb91c1135ba97f16028afb2",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
27,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"84b7ea830a25215da33d2b823cb77077",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
28,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"303132333435363738396162636465",
|
||||
"0d3d9d820dbf446a04757026451992cc",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
29,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30fd0d314c2ee4d8f5debf63c435ef3cf7",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
30,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30e45c332301a46d7daf78257f0dfc7740",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
31,
|
||||
"Using zero padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e05e6809caa291b52b7e238c0c402ef2b",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
32,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"4f8527a6f551410b78a68e7efc36df2f",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
33,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"f21b5d079f7c76be68604bbe5b2382f7",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
34,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"303132333435363738396162636465",
|
||||
"84701dba2c6bede631c095c856bec420",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
35,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30f46416b3b621f115a69d4ef02e3fcfec",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
36,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c306a63a0fcc48d81b47775e11c085b78b3",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
37,
|
||||
"Using a padding with 0xff instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803ea881c78807a8fbdeff055951896212d9",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
38,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"1ff93df500e92c9feff895e7db2dea62",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
39,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"a0b5815b5d102a70b8ca2dc0e0f1365f",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
40,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"303132333435363738396162636465",
|
||||
"12a8723e41593567bb70d49032611cbc",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
41,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c3078ff9fdd6714bf6571ae8967080af516",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
42,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30c3f7935834dffff63515955665b7077e",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
43,
|
||||
"Using ISO/IEC 7816-4 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e1647564a24d922795e5fe709e58437f1",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
44,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"966a77e2edb8ee304a7f8aec6dfd6cb0fb460a37d028591b6ff8e2a3ba708dfa",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
45,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"ea62116ba98975c5b00cb8d214a09747e749f5d6295260b43e2523761b1eee80",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
46,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"303132333435363738396162636465",
|
||||
"3b09f1f830850168b390fa8456d9ed644c0135aa2438e4e7f2da2f91524d3078",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
47,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c308cc9205ed6eb928d7c73e8510f446a4dbe7b53960c8ce4f2dc55c698642759a8",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
48,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c306effa48c70c4e1924fed40a69ea5fe5a4f36e1dc5311129d386eb654e9068005",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
49,
|
||||
"The length of the padding is longer than 1 block",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e793aa1e3d0f80e66df71a0190c80d209083c09b5463bdfe208fffb8dbaa5df06",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
50,
|
||||
"Using ANSI X.923 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"da814701baf00eef5be3dccb3a3ad4eb",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
51,
|
||||
"Using ANSI X.923 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"1dc8b11608b5f2782158ac13dd0d6312",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
52,
|
||||
"Using ANSI X.923 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c307246b6abf86a5bf4d0b868740597ad15",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
53,
|
||||
"Using ANSI X.923 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c307c3849dbaa2ea976d63fb64c6eae98f8",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
54,
|
||||
"Using ANSI X.923 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e5b9e39839e279565ef6be71166b9d164",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
55,
|
||||
"Using ISO 10126 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"dcf0bc0b24fafbcddf975cc1260b56cd",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
56,
|
||||
"Using ISO 10126 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"ac9bf7f71c5c60634262c4ee70e565b2",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
57,
|
||||
"Using ISO 10126 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c3017043cd9bb318dcda0420abf3f64036e",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
58,
|
||||
"Using ISO 10126 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c3067c809771a465389490758db6415c70a",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
59,
|
||||
"Using ISO 10126 padding instead of PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803ee1ca0eab2703d8903a5623ab74c22872",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
60,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"966a77e2edb8ee304a7f8aec6dfd6cb0",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
61,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"b0b3caac565d0f68604393185889599b",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
62,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"303132333435363738396162636465",
|
||||
"45ef5c9ada93e41db3b05f93d96ea3a0",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
63,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30cc1ab4b7fff6883f66b7c2562ec85e92",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
64,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30426a38d6d71fbbc918ba75a742ec830a",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
65,
|
||||
"Padding is longer than the message",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e27271dc795f2cbea501315fc08c9dcb6",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
66,
|
||||
"Invalid PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"",
|
||||
"366cdab43793b82900d1a056484166ed",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
67,
|
||||
"Invalid PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"6162636465666768",
|
||||
"52acfd71ab9fb82e0dc967cfbe5c4066",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
68,
|
||||
"Invalid PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30aa8e6654563fde2b2b2c70bd083474ef",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
69,
|
||||
"Invalid PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"3031323334353637383941424344454647",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30b2ef7f630f9ada79b1a93fc6d4730df6",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
70,
|
||||
"Invalid PKCS #5 padding",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e5d67878dddbec48bba8956fa040be690",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
71,
|
||||
"Using no padding at all",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"30313233343536373839414243444546",
|
||||
"b88ad20ab7d9ca775ae9f3af9be58c30",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
{
|
||||
72,
|
||||
"Using no padding at all",
|
||||
"BadPadding",
|
||||
"db4f3e5e3795cc09a073fa6a81e5a6bc",
|
||||
"23468aa734f5f0f19827316ff168e94f",
|
||||
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
|
||||
"c7fff1aba9bb86c8c95da25e6e2f6c714103aa947d77d8026f270b4a273a803e",
|
||||
TEST_RESULT_INVALID,
|
||||
},
|
||||
};
|
||||
@@ -17,6 +17,30 @@
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/error.h>
|
||||
|
||||
#define TEST_SM4_CBC_PADDING_MAX_KEY_SIZE 16
|
||||
#define TEST_SM4_CBC_PADDING_MAX_IV_SIZE 16
|
||||
#define TEST_SM4_CBC_PADDING_MAX_MSG_SIZE 80
|
||||
#define TEST_SM4_CBC_PADDING_MAX_CT_SIZE 96
|
||||
|
||||
enum {
|
||||
TEST_RESULT_VALID,
|
||||
TEST_RESULT_INVALID,
|
||||
TEST_RESULT_ACCEPTABLE,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int tc_id;
|
||||
const char *comment;
|
||||
const char *flags;
|
||||
const char *key;
|
||||
const char *iv;
|
||||
const char *msg;
|
||||
const char *ct;
|
||||
int result;
|
||||
} TEST_SM4_CBC_PADDING_VECTOR;
|
||||
|
||||
#include "sm4_cbc_paddingtest.h"
|
||||
|
||||
|
||||
static int test_sm4_cbc(void)
|
||||
{
|
||||
@@ -185,6 +209,79 @@ static int test_sm4_cbc_padding(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_sm4_cbc_padding_openssl(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < sizeof(sm4_cbc_padding_tests)/sizeof(sm4_cbc_padding_tests[0]); i++) {
|
||||
const TEST_SM4_CBC_PADDING_VECTOR *tv = &sm4_cbc_padding_tests[i];
|
||||
SM4_KEY sm4_key;
|
||||
uint8_t key[TEST_SM4_CBC_PADDING_MAX_KEY_SIZE];
|
||||
uint8_t iv[TEST_SM4_CBC_PADDING_MAX_IV_SIZE];
|
||||
uint8_t msg[TEST_SM4_CBC_PADDING_MAX_MSG_SIZE];
|
||||
uint8_t ct[TEST_SM4_CBC_PADDING_MAX_CT_SIZE];
|
||||
uint8_t out[TEST_SM4_CBC_PADDING_MAX_CT_SIZE];
|
||||
size_t keylen, ivlen, msglen, ctlen, outlen;
|
||||
int ret;
|
||||
|
||||
if (strlen(tv->key)/2 > sizeof(key)
|
||||
|| strlen(tv->iv)/2 > sizeof(iv)
|
||||
|| strlen(tv->msg)/2 > sizeof(msg)
|
||||
|| strlen(tv->ct)/2 > sizeof(ct)) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (hex_to_bytes(tv->key, strlen(tv->key), key, &keylen) != 1
|
||||
|| hex_to_bytes(tv->iv, strlen(tv->iv), iv, &ivlen) != 1
|
||||
|| hex_to_bytes(tv->msg, strlen(tv->msg), msg, &msglen) != 1
|
||||
|| hex_to_bytes(tv->ct, strlen(tv->ct), ct, &ctlen) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (keylen != SM4_KEY_SIZE || ivlen != SM4_BLOCK_SIZE) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
sm4_set_encrypt_key(&sm4_key, key);
|
||||
if (tv->result == TEST_RESULT_VALID) {
|
||||
ret = sm4_cbc_padding_encrypt(&sm4_key, iv, msglen ? msg : NULL, msglen, out, &outlen);
|
||||
if (ret != 1 || outlen != ctlen || memcmp(out, ct, ctlen) != 0) {
|
||||
fprintf(stderr, "SM4-CBC-Padding encrypt tcId %d failed: %s %s\n",
|
||||
tv->tc_id, tv->comment, tv->flags);
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
sm4_set_decrypt_key(&sm4_key, key);
|
||||
ret = sm4_cbc_padding_decrypt(&sm4_key, iv, ctlen ? ct : NULL, ctlen, out, &outlen);
|
||||
if (tv->result == TEST_RESULT_VALID) {
|
||||
if (ret != 1 || outlen != msglen || memcmp(out, msg, msglen) != 0) {
|
||||
fprintf(stderr, "SM4-CBC-Padding decrypt tcId %d failed: %s %s\n",
|
||||
tv->tc_id, tv->comment, tv->flags);
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
} else if (tv->result == TEST_RESULT_INVALID) {
|
||||
if (ret == 1) {
|
||||
fprintf(stderr, "SM4-CBC-Padding decrypt tcId %d unexpectedly passed: %s %s\n",
|
||||
tv->tc_id, tv->comment, tv->flags);
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
if (ret != 1 && ret != -1 && ret != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_sm4_cbc_ctx(void)
|
||||
{
|
||||
SM4_KEY sm4_key;
|
||||
@@ -326,6 +423,7 @@ int main(void)
|
||||
if (test_sm4_cbc() != 1) goto err;
|
||||
if (test_sm4_cbc_test_vectors() != 1) goto err;
|
||||
if (test_sm4_cbc_padding() != 1) goto err;
|
||||
if (test_sm4_cbc_padding_openssl() != 1) goto err;
|
||||
if (test_sm4_cbc_ctx() != 1) goto err;
|
||||
printf("%s all tests passed\n", __FILE__);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user