Add SM4-CBC-Padding test

This commit is contained in:
Zhi Guan
2026-06-09 20:04:13 +08:00
parent 7cf0fdd537
commit 5284b54e15
2 changed files with 830 additions and 0 deletions

732
tests/sm4_cbc_paddingtest.h Normal file
View 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,
},
};

View File

@@ -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;