⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curve_test.c

📁 The Stanford IBE library is a C implementation of the Boneh-Franklin identity-based encryption sche
💻 C
字号:
/* Tests Weil pairing code * (check by eye that the output is indeed bilinear) * Ben Lynn *//*Copyright (C) 2001 Benjamin Lynn (blynn@cs.stanford.edu)See LICENSE for license*/#include <stdlib.h>#include "curve.h"static mpz_t p, q;static mpz_t p1onq;static mpz_t p1;static point_t P;static point_t P1, P2, Psum;static point_t Q;static fp2_t r, r1, r2, r3, r4;static curve_t curve;void mympz_randomm(mpz_t x, mpz_t limit)//x = random in {0, ..., limit - 1}//not cryptographically strong, just for test purposes{    mpz_t n;    mpz_init(n);    mpz_set_ui(n, 1);    do {	mpz_mul_ui(n, n, rand());    } while (mpz_cmp(n, limit) < 0);    mpz_mod(x, n, limit);    mpz_clear(n);}void test(void){    //simple test    general_point_random(P, curve);    general_point_mul(P1, p1onq, P, curve);    general_point_random(P, curve);    general_point_mul(P2, p1onq, P, curve);    general_point_random(P, curve);    general_point_mul(Q, p1onq, P, curve);    point_add(Psum, P1, P2, curve);    printf("random P1: ");    fp2_out_str(stdout, 0, P1->x);    printf(" ");    fp2_out_str(stdout, 0, P1->y);    printf("\n");    printf("random P2: ");    fp2_out_str(stdout, 0, P2->x);    printf(" ");    fp2_out_str(stdout, 0, P2->y);    printf("\n");    printf("random Q: ");    fp2_out_str(stdout, 0, Q->x);    printf(" ");    fp2_out_str(stdout, 0, Q->y);    printf("\n");    tate_pairing(r, P1, P1, curve);    printf("e(P1, P1) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    tate_pairing(r1, P1, Q, curve);    printf("e(P1, Q) = ");    fp2_out_str(stdout, 0, r1);    printf("\n");    tate_pairing(r2, P2, Q, curve);    printf("e(P2, Q) = ");    fp2_out_str(stdout, 0, r2);    printf("\n");    fp2_mul(r, r1, r2, p);    printf("e(P1, Q)e(P2, Q) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    tate_pairing(r, Psum, Q, curve);    printf("e(P1 + P2, Q) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    tate_pairing(r3, Q, P1, curve);    printf("e(Q, P1) = ");    fp2_out_str(stdout, 0, r3);    printf("\n");    tate_pairing(r4, Q, P2, curve);    printf("e(Q, P2) = ");    fp2_out_str(stdout, 0, r4);    printf("\n");    fp2_mul(r, r3, r4, p);    printf("e(Q, P1)e(Q, P2) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    tate_pairing(r, Q, Psum, curve);    printf("e(Q, P1 + P2) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    fp2_mul(r, r1, r3, p);    printf("e(P1, Q)e(Q, P1) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    fp2_mul(r, r2, r4, p);    printf("e(P2, Q)e(Q, P2) = ");    fp2_out_str(stdout, 0, r);    printf("\n");    mpz_out_str(stdout, 0, p1);    printf("th powers should be 1\n");    fp2_pow(r, r1, p1, p);    fp2_out_str(stdout, 0, r);    printf("\n");    fp2_pow(r, r2, p1, p);    fp2_out_str(stdout, 0, r);    printf("\n");    fp2_pow(r, r3, p1, p);    fp2_out_str(stdout, 0, r);    printf("\n");    fp2_pow(r, r4, p1, p);    fp2_out_str(stdout, 0, r);    printf("\n");}int main(int argc, char **argv){    int i, prime;    if (argc > 1) {	sscanf(argv[1], "%d", &prime);    } else prime = 59;    mpz_init(p);    mpz_set_ui(p, prime);    /*    if (prime % 3 != 2 || !mpz_probab_prime_p(p, 40) || prime == 2) {	fprintf(stderr, "only works with odd prime p = 2 mod 3\n");	exit(1);    }    */    if (prime % 12 != 11 || !mpz_probab_prime_p(p, 40) || prime == 2) {	fprintf(stderr, "only works with odd prime p = 11 mod 12\n");	exit(1);    }    mpz_init(p1);    mpz_init(p1onq);    mpz_init(q);    mpz_add_ui(p1, p, 1);    //mpz_set_ui(p1onq, 6);    mpz_set_ui(p1onq, 12);    mpz_divexact(q, p1, p1onq);    curve_init(curve, p, q);    point_init(P);    point_init(P1);    point_init(P2);    point_init(Psum);    point_init(Q);    fp2_init(r);    fp2_init(r1);    fp2_init(r2);    for (i=0; i<10; i++) test();    point_clear(P);    point_clear(P1);    point_clear(P2);    point_clear(Psum);    point_clear(Q);    fp2_clear(r);    fp2_clear(r1);    fp2_clear(r2);    curve_clear(curve);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -