From 302f4e67bfc07b0a2ef193a77fa42a76f62c630b Mon Sep 17 00:00:00 2001 From: Gorachya <38173958+Gorachya@users.noreply.github.com> Date: Wed, 11 May 2022 14:49:06 +0800 Subject: [PATCH 1/3] Add files via upload --- src/sm9_alg.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sm9_alg.c b/src/sm9_alg.c index 46ff9a8a..02fef94f 100644 --- a/src/sm9_alg.c +++ b/src/sm9_alg.c @@ -1078,7 +1078,7 @@ void sm9_fp12_pow(sm9_fp12_t r, const sm9_fp12_t a, const sm9_bn_t k) sm9_bn_to_bits(k, kbits); sm9_fp12_set_one(t); - for (i = 1; i < 256; i++) { + for (i = 0; i < 256; i++) { sm9_fp12_sqr(t, t); if (kbits[i] == '1') { sm9_fp12_mul(t, t, a); @@ -1246,7 +1246,7 @@ void sm9_point_from_hex(sm9_point_t *R, const char hex[65 * 2]) } int sm9_point_is_at_infinity(const sm9_point_t *P) { - return sm9_fp_is_zero(P->X); + return sm9_fp_is_zero(P->Z); } void sm9_point_set_infinity(sm9_point_t *R) { @@ -1419,6 +1419,7 @@ void sm9_point_mul(sm9_point_t *R, const sm9_bn_t k, const sm9_point_t *P) int i; sm9_bn_to_bits(k, kbits); + sm9_point_set_infinity(Q); for (i = 0; i < 256; i++) { sm9_point_dbl(Q, Q); if (kbits[i] == '1') { From 40b0677ba370fbe6f531c8fadf3312ce7c0cad7e Mon Sep 17 00:00:00 2001 From: Gorachya <38173958+Gorachya@users.noreply.github.com> Date: Wed, 11 May 2022 14:52:29 +0800 Subject: [PATCH 2/3] Add files via upload --- tests/sm9test.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/tests/sm9test.c b/tests/sm9test.c index 9fe91b72..3bed6fb9 100644 --- a/tests/sm9test.c +++ b/tests/sm9test.c @@ -301,8 +301,55 @@ err: return -1; } -int test_sm9_pairing() -{ +#define hex_point1 "917be49d159184fba140f4dfc5d653464e94f718fe195b226b3f715829e6e768-288578d9505d462867a50acee40ee143b896e72505be10e8ce4c6b0c945b642b" +#define hex_point2 "593417680f252445fd0522383e23c77a54b11fe222de4a886eabc26e16bffa3c-38e8fc9a8b60f5ba0c6c411f721c117044435a833757d8fee65828511b8b245d" +#define hex_point_dbl "268def7968f1e8c51635e277425403df88355fb2ecf16f7920f112eb2a7e50c9-5c596b534bbaa85c1d3aecf436e61ff1bfd9f70856f0309c2a63d8248205d84e" +#define hex_point_add "056610cb69f8d5659ea94e4a67bbf3b93fb0bd449672d7ca2525ec3b68c894d1-88f3f99ce78ed3ffe6ca1cface5242570cb5d053f16a8e0baae10414babd86a7" +#define hex_point_neg "917be49d159184fba140f4dfc5d653464e94f718fe195b226b3f715829e6e768-8dba8726b24660c96e5ea081117fe601695bac2614bcddf31723301b4ef5e152" +#define hex_point_sub "29e4a54cad98da9939b95f677784bff3b1dd9334c83d93e351e0f8f7c4ce2dc5-4473eba3b8ff990b8456c41ec0727b76cb2b0f960495b144949f70bf95643b82" +#define hex_point_mul "997fcff625adbae62566f684f9e89181713f972c5a9cd9ce6764636761ba87d1-8142a28d1bd109501452a649e2d68f012e265460e0c7d3da743fb036eb23b03b" +#define hex_point_mul_g "7cf689748f3714490d7a19eae0e7bfad0e0182498b7bcd8a6998dfd00f59be51-4e2e98d190e9d775e0caa943196bfb066d9c30818b2d768fb5299e7135830a6f" + +int test_sm9_point() { + sm9_point_t p; + sm9_point_t q; + sm9_point_t r; + sm9_point_t s; + sm9_bn_t k; + int j = 1; + + sm9_bn_from_hex(k, hex_iv); + + sm9_point_from_hex(&p, hex_point1); if(!sm9_point_is_on_curve(&p)) goto err; ++j; + sm9_point_from_hex(&q, hex_point2); if(!sm9_point_is_on_curve(&q)) goto err; ++j; + sm9_point_dbl(&r, &p); sm9_point_from_hex(&s, hex_point_dbl); if(!sm9_point_equ(&r, &s)) goto err; ++j; + sm9_point_add(&r, &p, &q); sm9_point_from_hex(&s, hex_point_add); if(!sm9_point_equ(&r, &s)) goto err; ++j; + sm9_point_neg(&r, &p); sm9_point_from_hex(&s, hex_point_neg); if(!sm9_point_equ(&r, &s)) goto err; ++j; + sm9_point_sub(&r, &p, &q); sm9_point_from_hex(&s, hex_point_sub); if(!sm9_point_equ(&r, &s)) goto err; ++j; + sm9_point_mul(&r, k, &p); sm9_point_from_hex(&s, hex_point_mul); if(!sm9_point_equ(&r, &s)) goto err; ++j; + sm9_point_mul_generator(&r, k); sm9_point_from_hex(&s, hex_point_mul_g); if(!sm9_point_equ(&r, &s)) goto err; ++j; + + printf("%s() ok\n", __FUNCTION__); + return 1; +err: + printf("%s test %d failed\n", __FUNCTION__, j); + error_print(); + return -1; +} + +int test_sm9_twist_point() { + + int j = 1; + + printf("%s() ok\n", __FUNCTION__); + return 1; +err: + printf("%s test %d failed\n", __FUNCTION__, j); + error_print(); + return -1; +} + +int test_sm9_pairing() { // will be finished in this week sm9_fp12_t r; sm9_fp12_init(r); @@ -324,7 +371,14 @@ int test_sm9_pairing() sm9_pairing(r, SM9_Ppubs, SM9_P1); // FIXME: check //printf("test pairing: %d\n", sm9_fp12_equ(&r, sm9_fp12_from_hex(g))); + + + printf("%s() ok\n", __FUNCTION__); return 1; +err: + printf("%s test %d failed\n", __FUNCTION__, j); + error_print(); + return -1; } int main(void) { @@ -332,6 +386,8 @@ int main(void) { if (test_sm9_fp2() != 1) goto err; if (test_sm9_fp4() != 1) goto err; if (test_sm9_fp12() != 1) goto err; + if (test_sm9_point() != 1) goto err; + if (test_sm9_twist_point() != 1) goto err; if (test_sm9_pairing() != 1) goto err; printf("%s all tests passed\n", __FILE__); From d3873cfab7c2d10d0aef36163389ab117233212b Mon Sep 17 00:00:00 2001 From: Gorachya <38173958+Gorachya@users.noreply.github.com> Date: Wed, 11 May 2022 14:57:47 +0800 Subject: [PATCH 3/3] Update sm9test.c --- tests/sm9test.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/sm9test.c b/tests/sm9test.c index 3bed6fb9..97bf78c9 100644 --- a/tests/sm9test.c +++ b/tests/sm9test.c @@ -350,6 +350,8 @@ err: } int test_sm9_pairing() { // will be finished in this week + int j = 1; + sm9_fp12_t r; sm9_fp12_init(r);