diff --git a/include/gmssl/sm2.h b/include/gmssl/sm2.h index 23878635..4c8d02ab 100644 --- a/include/gmssl/sm2.h +++ b/include/gmssl/sm2.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may @@ -172,11 +172,7 @@ extern const SM2_BN SM2_ONE; extern const SM2_BN SM2_TWO; extern const SM2_BN SM2_THREE; extern const SM2_BN SM2_U_PLUS_ONE; -extern SM2_JACOBIAN_POINT _SM2_G; // 应该同时给出Affine的 - - -extern SM2_JACOBIAN_POINT* SM2_G; - +extern const SM2_JACOBIAN_POINT *SM2_G; // 应该同时给出Affine的 typedef struct { diff --git a/src/sm2_alg.c b/src/sm2_alg.c index 58c63bd2..7d57e74e 100644 --- a/src/sm2_alg.c +++ b/src/sm2_alg.c @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may @@ -19,21 +19,21 @@ #include -#define sm2_print_bn(label,a) sm2_bn_print(stderr,0,0,label,a) // �����Ӧ�÷������Ӧ�÷��ڲ����ļ��� +#define sm2_print_bn(label,a) sm2_bn_print(stderr,0,0,label,a) // 这个不应该放在这里,应该放在测试文件中 -extern const SM2_BN SM2_P = { +const SM2_BN SM2_P = { 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, }; -extern const SM2_BN SM2_B = { +const SM2_BN SM2_B = { 0x4d940e93, 0xddbcbd41, 0x15ab8f92, 0xf39789f5, 0xcf6509a7, 0x4d5a9e4b, 0x9d9f5e34, 0x28e9fa9e, }; -extern SM2_JACOBIAN_POINT _SM2_G = { +const SM2_JACOBIAN_POINT _SM2_G = { { 0x334c74c7, 0x715a4589, 0xf2660be1, 0x8fe30bbf, 0x6a39c994, 0x5f990446, 0x1f198119, 0x32c4ae2c, @@ -46,9 +46,9 @@ extern SM2_JACOBIAN_POINT _SM2_G = { 1, 0, 0, 0, 0, 0, 0, 0, }, }; -extern SM2_JACOBIAN_POINT * SM2_G = &_SM2_G; +const SM2_JACOBIAN_POINT *SM2_G = &_SM2_G; -extern const SM2_BN SM2_N = { +const SM2_BN SM2_N = { 0x39d54123, 0x53bbf409, 0x21c6052b, 0x7203df6b, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, }; diff --git a/tests/sm2test.c b/tests/sm2test.c index 371da770..6e854550 100644 --- a/tests/sm2test.c +++ b/tests/sm2test.c @@ -44,6 +44,20 @@ int test_sm2_bn(void) { + const SM2_JACOBIAN_POINT _G = { + { + 0x334c74c7, 0x715a4589, 0xf2660be1, 0x8fe30bbf, + 0x6a39c994, 0x5f990446, 0x1f198119, 0x32c4ae2c, + }, + { + 0x2139f0a0, 0x02df32e5, 0xc62a4740, 0xd0a9877c, + 0x6b692153, 0x59bdcee3, 0xf4f6779c, 0xbc3736a2, + }, + { + 1, 0, 0, 0, 0, 0, 0, 0, + }, + }; + const SM2_JACOBIAN_POINT *G = &_G; SM2_BN r; SM2_BN x; SM2_BN y; @@ -58,8 +72,8 @@ int test_sm2_bn(void) SM2_BN t; - sm2_bn_copy(x, SM2_G->X); - sm2_bn_copy(y, SM2_G->Y); + sm2_bn_copy(x, G->X); + sm2_bn_copy(y, G->Y); sm2_bn_from_hex(r, hex_v); ok = (sm2_bn_cmp(r, v) == 0); @@ -190,8 +204,21 @@ int test_sm2_bn(void) int test_sm2_jacobian_point(void) { + const SM2_JACOBIAN_POINT _G = { + { + 0x334c74c7, 0x715a4589, 0xf2660be1, 0x8fe30bbf, + 0x6a39c994, 0x5f990446, 0x1f198119, 0x32c4ae2c, + }, + { + 0x2139f0a0, 0x02df32e5, 0xc62a4740, 0xd0a9877c, + 0x6b692153, 0x59bdcee3, 0xf4f6779c, 0xbc3736a2, + }, + { + 1, 0, 0, 0, 0, 0, 0, 0, + }, + }; + const SM2_JACOBIAN_POINT *G = &_G; SM2_JACOBIAN_POINT _P, *P = &_P; - SM2_JACOBIAN_POINT _G, *G = &_G; SM2_BN k; int i = 1, ok; @@ -199,7 +226,6 @@ int test_sm2_jacobian_point(void) printf("sm2_jacobian_point_test\n"); - sm2_jacobian_point_copy(G, SM2_G); ok = sm2_jacobian_point_equ_hex(G, hex_G); printf("sm2 point test %d %s\n", i++, ok ? "ok" : "failed"); if (!ok) return -1; diff --git a/tests/sm9test.c b/tests/sm9test.c index 237759e2..a99bb030 100644 --- a/tests/sm9test.c +++ b/tests/sm9test.c @@ -38,13 +38,29 @@ static int sm9_bn_equ_hex(const sm9_bn_t a, const char *hex) #define hex_fp_inv "7d404b0027a93e3fa8f8bc7ee367a96814c42a3b69feb1845093406948a34753" int test_sm9_fp() { + const SM9_TWIST_POINT _P2 = { + {{0xAF82D65B, 0xF9B7213B, 0xD19C17AB, 0xEE265948, 0xD34EC120, 0xD2AAB97F, 0x92130B08, 0x37227552}, + {0xD8806141, 0x54806C11, 0x0F5E93C4, 0xF1DD2C19, 0xB441A01F, 0x597B6027, 0x78640C98, 0x85AEF3D0}}, + {{0xC999A7C7, 0x6215BBA5, 0xA71A0811, 0x47EFBA98, 0x3D278FF2, 0x5F317015, 0x19BE3DA6, 0xA7CF28D5}, + {0x84EBEB96, 0x856DC76B, 0xA347C8BD, 0x0736A96F, 0x2CBEE6ED, 0x66BA0D26, 0x2E845C12, 0x17509B09}}, + {{1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}, + }; + const SM9_TWIST_POINT *P2 = &_P2; + const SM9_TWIST_POINT _Ppubs = { + {{0x96EA5E32, 0x8F14D656, 0x386A92DD, 0x414D2177, 0x24A3B573, 0x6CE843ED, 0x152D1F78, 0x29DBA116}, + {0x1B94C408, 0x0AB1B679, 0x5E392CFB, 0x1CE0711C, 0x41B56501, 0xE48AFF4B, 0x3084F733, 0x9F64080B}}, + {{0xB4E3216D, 0x0E75C05F, 0x5CDFF073, 0x1006E85F, 0xB7A46F74, 0x1A7CE027, 0xDDA532DA, 0x41E00A53}, + {0xD0EF1C25, 0xE89E1408, 0x1A77F335, 0xAD3E2FDB, 0x47E3A0CB, 0xB57329F4, 0xABEA0112, 0x69850938}}, + {{1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}, + }; + const SM9_TWIST_POINT *Ppubs = &_Ppubs; sm9_fp_t x; sm9_fp_t y; sm9_fp_t r; int j = 1; - sm9_bn_copy(x, SM9_P2->X[1]); - sm9_bn_copy(y, SM9_Ppubs->Y[0]); + sm9_bn_copy(x, P2->X[1]); + sm9_bn_copy(y, Ppubs->Y[0]); sm9_fp_t iv = {0x87654321, 0x0fedcba9, 0x9abcdef0, 0x12345678, 0x87654321, 0x0fedcba9, 0x9abcdef0, 0x12345678}; sm9_bn_from_hex(r, hex_iv); if (sm9_bn_cmp(r, iv) != 0) goto err; ++j; @@ -119,6 +135,22 @@ err: #define hex_fp2_div2 "0ba84d8497422e09335d0693165f7376839b54b7d1a3e45ec2b6e3b5c275f5cb-af07946a8e30f24c1a9a8db2995b2b9bb4f126f1e0ca7b76a3c2ab66d67576a2" int test_sm9_fp2() { + const SM9_TWIST_POINT _P2 = { + {{0xAF82D65B, 0xF9B7213B, 0xD19C17AB, 0xEE265948, 0xD34EC120, 0xD2AAB97F, 0x92130B08, 0x37227552}, + {0xD8806141, 0x54806C11, 0x0F5E93C4, 0xF1DD2C19, 0xB441A01F, 0x597B6027, 0x78640C98, 0x85AEF3D0}}, + {{0xC999A7C7, 0x6215BBA5, 0xA71A0811, 0x47EFBA98, 0x3D278FF2, 0x5F317015, 0x19BE3DA6, 0xA7CF28D5}, + {0x84EBEB96, 0x856DC76B, 0xA347C8BD, 0x0736A96F, 0x2CBEE6ED, 0x66BA0D26, 0x2E845C12, 0x17509B09}}, + {{1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}, + }; + const SM9_TWIST_POINT *P2 = &_P2; + const SM9_TWIST_POINT _Ppubs = { + {{0x96EA5E32, 0x8F14D656, 0x386A92DD, 0x414D2177, 0x24A3B573, 0x6CE843ED, 0x152D1F78, 0x29DBA116}, + {0x1B94C408, 0x0AB1B679, 0x5E392CFB, 0x1CE0711C, 0x41B56501, 0xE48AFF4B, 0x3084F733, 0x9F64080B}}, + {{0xB4E3216D, 0x0E75C05F, 0x5CDFF073, 0x1006E85F, 0xB7A46F74, 0x1A7CE027, 0xDDA532DA, 0x41E00A53}, + {0xD0EF1C25, 0xE89E1408, 0x1A77F335, 0xAD3E2FDB, 0x47E3A0CB, 0xB57329F4, 0xABEA0112, 0x69850938}}, + {{1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}, + }; + const SM9_TWIST_POINT *Ppubs = &_Ppubs; sm9_fp2_t x; sm9_fp2_t y; sm9_fp2_t r; @@ -126,8 +158,8 @@ int test_sm9_fp2() { sm9_fp_t k; int j = 1; - sm9_fp2_copy(x, SM9_P2->Y); - sm9_fp2_copy(y, SM9_Ppubs->X); + sm9_fp2_copy(x, P2->Y); + sm9_fp2_copy(y, Ppubs->X); sm9_bn_from_hex(k, hex_iv); sm9_fp2_t iv2 = {{0xc9bb073c, 0xf1fdd299, 0xd14f49a9, 0xd632457d, 0x664a2b72, 0x6e492768, 0x4e243d80, 0xa3965402}, @@ -198,6 +230,14 @@ err: "3a70e829b83dc311970bc8d3e3e652f88a1ecd49b4672aa18c1c613c9a97d86f" int test_sm9_fp4() { + const SM9_TWIST_POINT _Ppubs = { + {{0x96EA5E32, 0x8F14D656, 0x386A92DD, 0x414D2177, 0x24A3B573, 0x6CE843ED, 0x152D1F78, 0x29DBA116}, + {0x1B94C408, 0x0AB1B679, 0x5E392CFB, 0x1CE0711C, 0x41B56501, 0xE48AFF4B, 0x3084F733, 0x9F64080B}}, + {{0xB4E3216D, 0x0E75C05F, 0x5CDFF073, 0x1006E85F, 0xB7A46F74, 0x1A7CE027, 0xDDA532DA, 0x41E00A53}, + {0xD0EF1C25, 0xE89E1408, 0x1A77F335, 0xAD3E2FDB, 0x47E3A0CB, 0xB57329F4, 0xABEA0112, 0x69850938}}, + {{1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}, + }; + const SM9_TWIST_POINT *Ppubs = &_Ppubs; sm9_fp4_t x; sm9_fp4_t y; sm9_fp4_t r;