Beispiel #1
0
Datei: sing.c Projekt: blynn/pbc
int main(void)
{
    field_t c;
    field_t Z19;
    element_t P, Q, R;
    mpz_t q, z;
    element_t a;
    int i;

    mpz_init(q);
    mpz_init(z);

    mpz_set_ui(q, 19);

    field_init_fp(Z19, q);
    element_init(a, Z19);

    field_init_curve_singular_with_node(c, Z19);

    element_init(P, c);
    element_init(Q, c);
    element_init(R, c);

    //(3,+/-6) is a generator
    //we have an isomorphism from E_ns to F_19^*
    // (3,6) --> 3
    //(generally (x,y) --> (y+x)/(y-x)

    curve_set_si(R, 3, 6);

    for (i=1; i<=18; i++) {
        mpz_set_si(z, i);
        element_mul_mpz(Q, R, z);
        element_printf("%dR = %B\n", i, Q);
    }

    mpz_set_ui(z, 6);
    element_mul_mpz(P, R, z);
    //P has order 3
    element_printf("P = %B\n", P);

    for (i=1; i<=3; i++) {
        mpz_set_si(z, i);
        element_mul_mpz(Q, R, z);
        tate_3(a, P, Q, R);
        element_printf("e_3(P,%dP) = %B\n", i, a);
    }

    element_double(P, R);
    //P has order 9
    element_printf("P = %B\n", P);
    for (i=1; i<=9; i++) {
        mpz_set_si(z, i);
        element_mul_mpz(Q, P, z);
        tate_9(a, P, Q, R);
        element_printf("e_9(P,%dP) = %B\n", i, a);
    }

    return 0;
}
Beispiel #2
0
void pairing_init_singular_with_node(pairing_t pairing, mpz_t q) {
  sn_pairing_data_ptr p;

  mpz_init(pairing->r);
  mpz_sub_ui(pairing->r, q, 1);
  field_init_fp(pairing->Zr, pairing->r);
  pairing->map = sn_pairing;

  p = pairing->data = pbc_malloc(sizeof(sn_pairing_data_t));
  field_init_fp(p->Fq, q);
  field_init_curve_singular_with_node(p->Eq, p->Fq);

  //mpz_init(p->tateexp);
  //mpz_sub_ui(p->tateexp, p->Fq->order, 1);
  //mpz_divexact(p->tateexp, p->tateexp, pairing->r);

  pairing->G2 = pairing->G1 = p->Eq;

  pairing_GT_init(pairing, p->Fq);
}