MCPcopy Create free account
hub / github.com/ElementsProject/elements / test_ge

Function test_ge

src/secp256k1/src/tests.c:3786–4007  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3784}
3785
3786static void test_ge(void) {
3787 int i, i1;
3788 int runs = 6;
3789 /* 25 points are used:
3790 * - infinity
3791 * - for each of four random points p1 p2 p3 p4, we add the point, its
3792 * negation, and then those two again but with randomized Z coordinate.
3793 * - The same is then done for lambda*p1 and lambda^2*p1.
3794 */
3795 secp256k1_ge *ge = (secp256k1_ge *)checked_malloc(&CTX->error_callback, sizeof(secp256k1_ge) * (1 + 4 * runs));
3796 secp256k1_gej *gej = (secp256k1_gej *)checked_malloc(&CTX->error_callback, sizeof(secp256k1_gej) * (1 + 4 * runs));
3797 secp256k1_fe zf, r;
3798 secp256k1_fe zfi2, zfi3;
3799
3800 secp256k1_gej_set_infinity(&gej[0]);
3801 secp256k1_ge_clear(&ge[0]);
3802 secp256k1_ge_set_gej_var(&ge[0], &gej[0]);
3803 for (i = 0; i < runs; i++) {
3804 int j;
3805 secp256k1_ge g;
3806 random_group_element_test(&g);
3807 if (i >= runs - 2) {
3808 secp256k1_ge_mul_lambda(&g, &ge[1]);
3809 }
3810 if (i >= runs - 1) {
3811 secp256k1_ge_mul_lambda(&g, &g);
3812 }
3813 ge[1 + 4 * i] = g;
3814 ge[2 + 4 * i] = g;
3815 secp256k1_ge_neg(&ge[3 + 4 * i], &g);
3816 secp256k1_ge_neg(&ge[4 + 4 * i], &g);
3817 secp256k1_gej_set_ge(&gej[1 + 4 * i], &ge[1 + 4 * i]);
3818 random_group_element_jacobian_test(&gej[2 + 4 * i], &ge[2 + 4 * i]);
3819 secp256k1_gej_set_ge(&gej[3 + 4 * i], &ge[3 + 4 * i]);
3820 random_group_element_jacobian_test(&gej[4 + 4 * i], &ge[4 + 4 * i]);
3821 for (j = 0; j < 4; j++) {
3822 random_field_element_magnitude(&ge[1 + j + 4 * i].x);
3823 random_field_element_magnitude(&ge[1 + j + 4 * i].y);
3824 random_field_element_magnitude(&gej[1 + j + 4 * i].x);
3825 random_field_element_magnitude(&gej[1 + j + 4 * i].y);
3826 random_field_element_magnitude(&gej[1 + j + 4 * i].z);
3827 }
3828 }
3829
3830 /* Generate random zf, and zfi2 = 1/zf^2, zfi3 = 1/zf^3 */
3831 random_fe_non_zero_test(&zf);
3832 random_field_element_magnitude(&zf);
3833 secp256k1_fe_inv_var(&zfi3, &zf);
3834 secp256k1_fe_sqr(&zfi2, &zfi3);
3835 secp256k1_fe_mul(&zfi3, &zfi3, &zfi2);
3836
3837 /* Generate random r */
3838 random_fe_non_zero_test(&r);
3839
3840 for (i1 = 0; i1 < 1 + 4 * runs; i1++) {
3841 int i2;
3842 for (i2 = 0; i2 < 1 + 4 * runs; i2++) {
3843 /* Compute reference result using gej + gej (var). */

Callers 1

run_geFunction · 0.85

Calls 15

checked_mallocFunction · 0.85
random_fe_non_zero_testFunction · 0.85
secp256k1_testrand_intFunction · 0.85
secp256k1_ge_clearFunction · 0.70
secp256k1_ge_set_gej_varFunction · 0.70
secp256k1_ge_mul_lambdaFunction · 0.70

Tested by

no test coverage detected