136 lines
5.3 KiB
Java
136 lines
5.3 KiB
Java
import com.entrouvert.cryptic.*;
|
|
|
|
class Myclass{
|
|
public static void main(String[] arg){
|
|
//System.out.println(System.getProperty("java.library.path"));
|
|
|
|
System.out.println("\n\t############## JAVA TESTS ##############\n");
|
|
|
|
test_1();
|
|
test_2();
|
|
}
|
|
|
|
private static void test_1(){
|
|
System.out.println("\n\t############## TEST 1 ##############\n");
|
|
|
|
String[] quantities = { "1234567890c", "1234567890b", "1234567890a", };
|
|
|
|
System.out.println("Group generation...");
|
|
PrimeOrderGroup g = new PrimeOrderGroup(256);
|
|
g.moreBases(5);
|
|
String[] bases = (String[]) g.getbases();
|
|
int i;
|
|
for(i=0;i<5;i++){
|
|
System.out.println("Base: " + bases[i]);
|
|
}
|
|
System.out.println("Group generation successful.");
|
|
|
|
System.out.println("Prover: DLREP to prove generation...");
|
|
String dlrep = CrypticJNI.get_dlrep(3,quantities,bases,g.getp());
|
|
System.out.println("DLREP: " + dlrep);
|
|
|
|
System.out.println("Prover: Proof round1");
|
|
ZkpkSchnorr s = new ZkpkSchnorr(g.getbases(),3,g.getp());
|
|
s.round1();
|
|
System.out.println("Prover: Send DLREP: " + dlrep);
|
|
System.out.println("Prover: Send commitments.");
|
|
|
|
String challenge = CrypticJNI.ret_random(80);
|
|
System.out.println("Verifier: Send challenge: " + challenge);
|
|
|
|
System.out.println("Prover: Proof round2");
|
|
s.round2(g.getorder(),challenge,quantities);
|
|
System.out.println("Prover: Send responses.");
|
|
|
|
|
|
ZkpkSchnorr s2 = new ZkpkSchnorr(g.getbases(),3,g.getp());
|
|
int rc = s2.verifyInteractiveProof(dlrep,s.getcommitment(),challenge,s.getresponses());
|
|
System.out.println("Verifier: Proof verification: " + rc);
|
|
}
|
|
|
|
private static void test_2(){
|
|
System.out.println("\n\t############## TEST 2 ##############\n");
|
|
|
|
System.out.println("\nServer: clsig parameters generation...");
|
|
Clsig c = new Clsig(1024,256,600,0,0,0,10);
|
|
c.generateParameters();
|
|
System.out.println("Server: clsig parameters generated.");
|
|
|
|
System.out.println("\nProver: clsig parameters init on the prover side.");
|
|
Clsig c2;
|
|
c2 = Clsig.newLoadPublicParameters(c.getz(),c.gets(),10,c.getbases(),c.getlgQuantities(),c.getlgExponent(),c.getmodulus(),c.getlgSecParam(),c.getlgZkSecParam(),c.getlgClsigSecParam());
|
|
|
|
System.out.println("\nProver: build a commitment to include in the certificate.");
|
|
String qa = CrypticJNI.char_to_bn("Kirk");
|
|
String qb = CrypticJNI.char_to_bn("Captain");
|
|
String[] tab_q = {qa, qb};
|
|
System.out.println("Attributes encoding...");
|
|
System.out.println("Kirk - " + tab_q[0]);
|
|
System.out.println("Captain - " + tab_q[1]);
|
|
|
|
System.out.println("Init commitment store with bases: 1, 5");
|
|
CommitDataStore pdc = new CommitDataStore();
|
|
String[] tab_b = {(String)c2.getbases()[1],(String)c2.getbases()[5]};
|
|
System.out.println("Compute commitment");
|
|
c2.computeCommittedValue(pdc,tab_b,tab_q,2);
|
|
|
|
System.out.println("\nServer: Attributes in certificate.");
|
|
String q1 = CrypticJNI.char_to_bn("Mik");
|
|
String q2 = CrypticJNI.char_to_bn("Ates");
|
|
String q3 = CrypticJNI.char_to_bn("Clermont-Fd");
|
|
String q4 = CrypticJNI.int_to_bn(1982280100);
|
|
String[] tab_q2 = {q1, q2, q3, q4};
|
|
System.out.println("Mik - " + tab_q2[0]);
|
|
System.out.println("Ates - " + tab_q2[1]);
|
|
System.out.println("Clermont-Fd - " + tab_q2[2]);
|
|
System.out.println("1982280100 - " + tab_q2[3]);
|
|
|
|
int[] index = {0,2,3,4};
|
|
System.out.println("\nServer: compute dlrep");
|
|
System.out.println("Bases index: " + index[0] + index[1] + index[2] + index[3]);
|
|
c.computeDlrepByIndex(tab_q2, index, 4);
|
|
|
|
System.out.println("\nServer: sign with the commitment");
|
|
c.signWithCommittedValue(pdc.getdlrep());
|
|
System.out.println("\nServer: verify signature");
|
|
c.verifySignatureNotRandomized();
|
|
|
|
/*c2.loadCertificateWithIndexWithCommittedValue(c.a,c.e,c.v,c.quantities,4,(qa,qb),2,pdc.dlrep,pdc.vprime,(0,2,3,4))
|
|
c2.randomizeSignature()
|
|
c2.verifySignatureRandomized()
|
|
dlrep = c2.buildDlrepBeforeProving((1,),(2,),1)
|
|
fixed_add_size = c2.lgZkSecParam + c2.lgQuantities
|
|
r0 = cryptic.retRandom(c2.intervalExponent + fixed_add_size)
|
|
r1 = cryptic.retRandom(c2.lgBlind + fixed_add_size)
|
|
r2 = cryptic.retRandom(c2.lgQuantities + fixed_add_size)
|
|
r3 = cryptic.retRandom(c2.lgQuantities + fixed_add_size)
|
|
r4 = cryptic.retRandom(c2.lgQuantities + fixed_add_size)
|
|
r5 = cryptic.retRandom(c2.lgQuantities + fixed_add_size)
|
|
r6 = cryptic.retRandom(c2.lgQuantities + fixed_add_size)
|
|
s = cryptic.ZkpkSchnorr((c2.aRand,c2.s,c2.bases[0],c2.bases[3],c2.bases[4],c2.bases[1],c2.bases[5]),7,c2.modulus)
|
|
s.round1RandomsChosen((r0,r1,r2,r3,r4,r5,r6))
|
|
pr = cryptic.ProofrangeQrg(c2.s,c2.z,c2.modulus)
|
|
b = cryptic.intToBn(1992040400)
|
|
pr.round1(cryptic.PROOF_RANGE_LT,q4,b,s.randoms[4],c2.lgSecParam,c2.lgZkSecParam,256)
|
|
h = cryptic.HashForNiProofs(256)
|
|
h.addProof(s,dlrep)
|
|
h.addProofrangeProver(pr)
|
|
h.computeHash()
|
|
s.round2WithoutOrder(h.hValue,(c2.eCorrected,c2.vRand,q1,q3,q4,qa,qb))
|
|
pr.round2(h.hValue)
|
|
c3 = cryptic.Clsig.newLoadPublicParameters(c.z,c.s,10,c.bases,c.lgQuantities,c.lgExponent,c.modulus,c.lgSecParam,c.lgZkSecParam,c.lgClsigSecParam)
|
|
s2 = cryptic.ZkpkSchnorr((c2.aRand,c3.s,c3.bases[0],c3.bases[3],c3.bases[4],c2.bases[1],c2.bases[5]),7,c3.modulus)
|
|
s2.verifyNoninteractiveProof(dlrep,h.hValue,s.responses)
|
|
pr2 = cryptic.ProofrangeQrg(c3.s,c3.z,c3.modulus)
|
|
pr2.verifyNoninteractiveProof(cryptic.PROOF_RANGE_LT,b,pr.dlreps,h.hValue,pr.responses)
|
|
h2 = cryptic.HashForNiProofs(256)
|
|
h2.addProof(s2,dlrep)
|
|
h2.addProofrangeVerifier(pr2,pr.dlreps)
|
|
h2.computeHash()
|
|
cryptic.cmpBn(h.hValue,h2.hValue)*/
|
|
|
|
}
|
|
|
|
}
|
|
|