· 7 years ago · Dec 31, 2018, 04:24 PM
1package edu.jhu.isi.CLSign.helloworld2;
2
3import java.util.stream.Collectors;
4import edu.jhu.isi.CLSign.keygen.PublicKey;
5import edu.jhu.isi.CLSign.keygen.SecretKey;
6import it.unisa.dia.gas.jpbc.Element;
7import it.unisa.dia.gas.plaf.jpbc.field.z.ZrElement;
8import it.unisa.dia.gas.jpbc.Pairing;
9import it.unisa.dia.gas.jpbc.PairingParameters;
10import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
11import it.unisa.dia.gas.plaf.jpbc.pairing.a.TypeACurveGenerator;
12
13import java.math.BigInteger;
14import java.util.List;
15
16
17public class helloworld2 {
18
19
20 public static void main(String[] args){
21 int val1=5;
22 int val2=10;
23
24 if (args.length==3) {
25 val1= Integer.parseInt(args[1]);
26 val2= Integer.parseInt(args[2]);
27 }
28
29
30 int rBits = 160;
31 int qBits = 512;
32 final TypeACurveGenerator pairingGenerator = new TypeACurveGenerator(rBits, qBits);
33 final PairingParameters params = pairingGenerator.generate();
34 Pairing pairing=PairingFactory.getPairing(params);
35
36 final SecretKey sk = createSecretKey(pairing);
37 final PublicKey pk = createPublicKey(pairing, sk);
38
39
40 final Element generator = pairing.getG1().newRandomElement().getImmutable();
41 final Element generatorT = pairing.getGT().newRandomElement().getImmutable();
42
43
44
45 Element Val1 = generator.pow(BigInteger.valueOf(val1));
46 Element Val2 = generator.pow(BigInteger.valueOf(val2));
47 Element Val3 = generator.pow(BigInteger.valueOf(val1*val2));
48 Element Val4 = generator.pow(BigInteger.valueOf(1));
49
50 System.out.println("a:"+val1);
51 System.out.println("b:"+val2);
52 System.out.println("Generator:"+generator);
53
54
55 if (pairing.pairing(Val1, Val2).isEqual(pairing.pairing(Val3,Val4))) {
56 System.out.println("Successful Pairing of e(g^a,g^b) = e(g^{ab},g)");
57 } else {
58
59 System.out.println("Failed!!!");
60 }
61 if (pairing.pairing(Val1, Val2).isEqual(pairing.pairing(Val4,Val3))) {
62 System.out.println("Successful Pairing of e(g^a,g^b) = e(g,g^{ab})");
63 } else {
64
65 System.out.println("Failed!!!");
66 }
67
68 Val1 = generator.mul(BigInteger.valueOf(val1));
69 Val2 = generator.mul(BigInteger.valueOf(val2));
70 Val3 = generator.pow(BigInteger.valueOf(val1*val2));
71 Val4 = generator.pow(BigInteger.valueOf(1));
72
73 if (pairing.pairing(Val1, Val2).isEqual(pairing.pairing(Val3,Val4))) {
74 System.out.println("Successful Pairing of e(a g ,b g) = e(g^{ab},g)");
75 } else {
76
77 System.out.println("Failed!!!");
78 }
79
80
81 }
82 public static PublicKey createPublicKey(final Pairing pairing, final SecretKey sk) {
83 final Element generator = pairing.getG1().newRandomElement().getImmutable();
84 final Element generatorT = pairing.getGT().newRandomElement().getImmutable();
85 final Element X = generator.powZn(sk.getX());
86 final Element Y = generator.powZn(sk.getY());
87 final List<Element> Z = sk.getZ().stream()
88 .map(generator::powZn).collect(Collectors.toList());
89 final List<Element> W = sk.getZ().stream()
90 .map(Y::powZn).collect(Collectors.toList());
91 return new PublicKey(pairing, generator, generatorT,
92 X, Y, Z, W);
93 }
94 public static SecretKey createSecretKey(final Pairing pairing) {
95 final ZrElement z = (ZrElement) pairing.getZr().newRandomElement().getImmutable();
96 return new SecretKey((ZrElement) pairing.getZr().newRandomElement().getImmutable(),
97 (ZrElement) pairing.getZr().newRandomElement().getImmutable(), z);
98 }
99}