]>
git.ipfire.org Git - thirdparty/openssl.git/blob - test/sm4_internal_test.c
2 * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
3 * Copyright 2017 Ribose Inc. All Rights Reserved.
5 * Licensed under the OpenSSL license (the "License"). You may not use
6 * this file except in compliance with the License. You can obtain a copy
7 * in the file LICENSE in the source distribution or at
8 * https://www.openssl.org/source/license.html
12 * Internal tests for the SM4 module.
16 #include <openssl/opensslconf.h>
19 #ifndef OPENSSL_NO_SM4
20 # include "crypto/sm4.h"
22 static int test_sm4_ecb(void)
24 static const uint8_t k
[SM4_BLOCK_SIZE
] = {
25 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
26 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
29 static const uint8_t input
[SM4_BLOCK_SIZE
] = {
30 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
31 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
35 * This test vector comes from Example 1 of GB/T 32907-2016,
36 * and described in Internet Draft draft-ribose-cfrg-sm4-02.
38 static const uint8_t expected
[SM4_BLOCK_SIZE
] = {
39 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e,
40 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46
44 * This test vector comes from Example 2 from GB/T 32907-2016,
45 * and described in Internet Draft draft-ribose-cfrg-sm4-02.
46 * After 1,000,000 iterations.
48 static const uint8_t expected_iter
[SM4_BLOCK_SIZE
] = {
49 0x59, 0x52, 0x98, 0xc7, 0xc6, 0xfd, 0x27, 0x1f,
50 0x04, 0x02, 0xf8, 0x04, 0xc3, 0x3d, 0x3f, 0x66
55 uint8_t block
[SM4_BLOCK_SIZE
];
58 memcpy(block
, input
, SM4_BLOCK_SIZE
);
60 SM4_encrypt(block
, block
, &key
);
61 if (!TEST_mem_eq(block
, SM4_BLOCK_SIZE
, expected
, SM4_BLOCK_SIZE
))
64 for (i
= 0; i
!= 999999; ++i
)
65 SM4_encrypt(block
, block
, &key
);
67 if (!TEST_mem_eq(block
, SM4_BLOCK_SIZE
, expected_iter
, SM4_BLOCK_SIZE
))
70 for (i
= 0; i
!= 1000000; ++i
)
71 SM4_decrypt(block
, block
, &key
);
73 if (!TEST_mem_eq(block
, SM4_BLOCK_SIZE
, input
, SM4_BLOCK_SIZE
))
82 #ifndef OPENSSL_NO_SM4
83 ADD_TEST(test_sm4_ecb
);