2 ZSS Short Signature Scheme from Bilinear Pairing.
3 Based on papers "F. Zhang, R. Safavi-Naini and W. Susilo. An Efficient Signature Scheme from Bilinear Pairings and it's Applications. PKC 2004".
4 Contributed by Dmitry Kosolapov.
10 int main(int argc
, char **argv
) {
12 pbc_demo_pairing_init(pairing
, argc
, argv
);
13 if (!pairing_is_symmetric(pairing
)) pbc_die("pairing must be symmetric");
15 element_t P
, Ppub
, x
, S
, H
, t1
, t2
, t3
, t4
;
16 element_init_Zr(x
, pairing
);
17 element_init_Zr(H
, pairing
);
18 element_init_Zr(t1
, pairing
);
20 element_init_G1(S
, pairing
);
21 element_init_G1(P
, pairing
);
22 element_init_G1(Ppub
, pairing
);
23 element_init_G1(t2
, pairing
);
25 element_init_GT(t3
, pairing
);
26 element_init_GT(t4
, pairing
);
28 printf("ZSS short signature schema\n");
30 time1
= pbc_get_time();
33 element_mul_zn(Ppub
, P
, x
);
34 element_printf("P = %B\n", P
);
35 element_printf("x = %B\n", x
);
36 element_printf("Ppub = %B\n", Ppub
);
39 element_from_hash(H
, "Message", 7);
40 element_add(t1
, H
, x
);
41 element_invert(t1
, t1
);
42 element_mul_zn(S
, P
, t1
);
43 printf("Signature of message \"Message\" is:\n");
44 element_printf("S = %B\n", S
);
47 element_from_hash(H
, "Message", 7);
48 element_mul_zn(t2
, P
, H
);
49 element_add(t2
, t2
, Ppub
);
50 element_pairing(t3
, t2
, S
);
51 element_pairing(t4
, P
, P
);
52 element_printf("e(H(m)P + Ppub, S) = %B\n", t3
);
53 element_printf("e(P, P) = %B\n", t4
);
54 if (!element_cmp(t3
, t4
)) printf("Signature is valid\n");
55 else printf("Signature is invalid\n");
56 time2
= pbc_get_time();
57 printf("All time = %fs\n", time2
- time1
);
67 pairing_clear(pairing
);