More refactoring
parent
b9abd847c7
commit
273338010d
|
@ -1,20 +0,0 @@
|
|||
package meerkat.crypto.mixnet;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
||||
/**
|
||||
* Prove in zero knowledge that two ciphertexts are a mix of two original ciphertexts.
|
||||
*/
|
||||
public interface Mix2ZeroKnowledgeProver {
|
||||
public Mixing.Mix2Proof prove(Crypto.RerandomizableEncryptedMessage in1,
|
||||
Crypto.RerandomizableEncryptedMessage in2,
|
||||
Crypto.RerandomizableEncryptedMessage out1,
|
||||
Crypto.RerandomizableEncryptedMessage out2,
|
||||
boolean switched, int layer, int switchIdx, int out0Idx, int out1Idx, // switch info
|
||||
Crypto.EncryptionRandomness r1,
|
||||
Crypto.EncryptionRandomness r2) throws InvalidProtocolBufferException;
|
||||
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package meerkat.crypto.mixnet;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
||||
/**
|
||||
* Verify the two-ciphertext mix proof
|
||||
*/
|
||||
public interface Mix2ZeroKnowledgeVerifier {
|
||||
/**
|
||||
* Return true iff the proof is valid.
|
||||
* @param in1
|
||||
* @param in2
|
||||
* @param out1
|
||||
* @param out2
|
||||
* @return
|
||||
*/
|
||||
boolean verify(Crypto.RerandomizableEncryptedMessage in1,
|
||||
Crypto.RerandomizableEncryptedMessage in2,
|
||||
Crypto.RerandomizableEncryptedMessage out1,
|
||||
Crypto.RerandomizableEncryptedMessage out2,
|
||||
Mixing.Mix2Proof proof) throws InvalidProtocolBufferException;
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package meerkat.crypto.mixnet;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.protobuf.Crypto;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Created by talm on 25/10/15.
|
||||
*/
|
||||
public interface Mixer {
|
||||
public MixerOutput mix(List<Crypto.RerandomizableEncryptedMessage> ciphertexts,Random random)
|
||||
throws InvalidProtocolBufferException;
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package meerkat.crypto.mixnet;
|
||||
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
||||
/**
|
||||
* Created by Tzlil on 1/18/2016.
|
||||
*/
|
||||
public interface MixerOutput {
|
||||
public Mixing.Mix2Proof[][] getProofs();
|
||||
public Crypto.RerandomizableEncryptedMessage[][] getEncryptedMessages();
|
||||
public int getLogN();
|
||||
public int getNumLayers();
|
||||
}
|
|
@ -2,11 +2,10 @@ package meerkat.mixer;
|
|||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.crypto.Encryption;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeProver;
|
||||
import meerkat.crypto.mixnet.MixerOutput;
|
||||
import meerkat.mixer.network.BenesNetwork;
|
||||
import meerkat.mixer.network.PermutationNetwork;
|
||||
import meerkat.mixer.network.RandomPermutation;
|
||||
import meerkat.mixer.proofs.Mix2nizk;
|
||||
import meerkat.protobuf.Crypto.EncryptionRandomness;
|
||||
import meerkat.protobuf.Crypto.RerandomizableEncryptedMessage;
|
||||
import meerkat.protobuf.Mixing.Mix2Proof;
|
||||
|
@ -15,18 +14,17 @@ import java.util.List;
|
|||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* an implementation of meerkat.crypto.mixnet.Mixer
|
||||
* meerkat.mixer.network algorithm on set of n encrypted votes:
|
||||
* 0. asset n is power of two
|
||||
* 1. set switches according to benes network on random permutation
|
||||
* Run Abe's permutation network mixing algorithm on set of n encrypted votes:
|
||||
* 0. n is power of two
|
||||
* 1. set switches according to Benes network on random permutation
|
||||
* 2. re encrypt and mix with respect to switches values (encryptor.rerandomize)
|
||||
* 3. generate zero knowledge proof on each re encrypted couple
|
||||
* 4. return proofs table + encryption table
|
||||
*
|
||||
*/
|
||||
public class MixGenerator implements meerkat.crypto.mixnet.Mixer {
|
||||
public class MixGenerator {
|
||||
|
||||
private final Mix2ZeroKnowledgeProver prover;
|
||||
private final Mix2nizk.Prover prover;
|
||||
private final Encryption encryptor;
|
||||
|
||||
/**
|
||||
|
@ -34,7 +32,7 @@ public class MixGenerator implements meerkat.crypto.mixnet.Mixer {
|
|||
* @param prover
|
||||
* @param encryptor
|
||||
*/
|
||||
public MixGenerator(Mix2ZeroKnowledgeProver prover, Encryption encryptor) {
|
||||
public MixGenerator(Mix2nizk.Prover prover, Encryption encryptor) {
|
||||
this.prover = prover;
|
||||
this.encryptor = encryptor;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
package meerkat.mixer;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
import meerkat.crypto.mixnet.MixerOutput;
|
||||
import meerkat.mixer.proofs.Mix2nizk;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
||||
|
@ -20,7 +19,7 @@ public final class MixVerifier {
|
|||
* @return true iff the meerkat.mixer.network output is valid
|
||||
* @throws InvalidProtocolBufferException
|
||||
*/
|
||||
public static boolean verifyTable(Mix2ZeroKnowledgeVerifier verifier, MixerOutput mixerOutput)
|
||||
public static boolean verifyTable(Mix2nizk.Verifier verifier, MixerOutput mixerOutput)
|
||||
throws InvalidProtocolBufferException {
|
||||
int out0,out1,layer, switchIdx;
|
||||
|
||||
|
|
|
@ -8,10 +8,9 @@ import java.io.OutputStream;
|
|||
|
||||
/**
|
||||
* Created by Tzlil on 1/18/2016.
|
||||
* implements meerkat.crypto.mixnet.MixerOutput interface
|
||||
* container for meerkat.mixer.network.mix result.
|
||||
*/
|
||||
public class MixerOutput implements meerkat.crypto.mixnet.MixerOutput {
|
||||
public class MixerOutput {
|
||||
private final Mixing.Mix2Proof[][] proofs;
|
||||
private final Crypto.RerandomizableEncryptedMessage[][] encryptedMessages;
|
||||
private final int logN;
|
||||
|
@ -30,22 +29,18 @@ public class MixerOutput implements meerkat.crypto.mixnet.MixerOutput {
|
|||
this.logN = logN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mixing.Mix2Proof[][] getProofs() {
|
||||
return proofs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Crypto.RerandomizableEncryptedMessage[][] getEncryptedMessages() {
|
||||
return encryptedMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLogN() {
|
||||
return logN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumLayers() {
|
||||
return 2 * logN - 1;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package meerkat.mixer.main;
|
||||
|
||||
import meerkat.crypto.mixnet.MixerOutput;
|
||||
import meerkat.mixer.MixerOutput;
|
||||
import meerkat.protobuf.BulletinBoardAPI;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package meerkat.mixer.main;
|
||||
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
import meerkat.crypto.mixnet.MixerOutput;
|
||||
import meerkat.mixer.MixerOutput;
|
||||
import meerkat.mixer.proofs.Mix2nizk;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.mixer.necessary.AsyncBulletinBoardClient;
|
||||
import meerkat.mixer.necessary.CompleteBatch;
|
||||
|
@ -21,13 +21,13 @@ public class BatchHandler implements AsyncBulletinBoardClient.ClientCallback<Com
|
|||
private Throwable t;
|
||||
private CompleteBatch msg;
|
||||
|
||||
private final Mix2ZeroKnowledgeVerifier verifier;
|
||||
private final Mix2nizk.Verifier verifier;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
* @param verifier
|
||||
*/
|
||||
public BatchHandler(Mix2ZeroKnowledgeVerifier verifier) {
|
||||
public BatchHandler(Mix2nizk.Verifier verifier) {
|
||||
this.mixerOutput = null;
|
||||
this.msgReceived = false;
|
||||
this.t = null;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package meerkat.mixer.main;
|
||||
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
import meerkat.crypto.mixnet.Mixer;
|
||||
import meerkat.crypto.mixnet.MixerOutput;
|
||||
import meerkat.mixer.MixGenerator;
|
||||
import meerkat.mixer.MixerOutput;
|
||||
import meerkat.mixer.proofs.Mix2nizk;
|
||||
import meerkat.protobuf.BulletinBoardAPI;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.mixer.necessary.AsyncBulletinBoardClient;
|
||||
|
@ -23,8 +23,8 @@ import java.util.Random;
|
|||
*/
|
||||
public class MainMixing {
|
||||
|
||||
private final Mixer mixer;
|
||||
private final Mix2ZeroKnowledgeVerifier verifier;
|
||||
private final MixGenerator mixer;
|
||||
private final Mix2nizk.Verifier verifier;
|
||||
private final AsyncBulletinBoardClient asyncBulletinBoardClient;
|
||||
private final byte[] id;
|
||||
|
||||
|
@ -36,7 +36,7 @@ public class MainMixing {
|
|||
* @param asyncBulletinBoardClient
|
||||
* @param id
|
||||
*/
|
||||
public MainMixing(Mixer mixer, Mix2ZeroKnowledgeVerifier verifier,
|
||||
public MainMixing(MixGenerator mixer, Mix2nizk.Verifier verifier,
|
||||
AsyncBulletinBoardClient asyncBulletinBoardClient, byte[] id) {
|
||||
this.mixer = mixer;
|
||||
this.verifier = verifier;
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package meerkat.mixer.proofs;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
||||
/**
|
||||
* Created by talm on 20/01/17.
|
||||
*/
|
||||
public interface Mix2nizk {
|
||||
/**
|
||||
* Prove in zero knowledge that two ciphertexts are a mix of two original ciphertexts.
|
||||
*/
|
||||
public interface Prover {
|
||||
public Mixing.Mix2Proof prove(Crypto.RerandomizableEncryptedMessage in1,
|
||||
Crypto.RerandomizableEncryptedMessage in2,
|
||||
Crypto.RerandomizableEncryptedMessage out1,
|
||||
Crypto.RerandomizableEncryptedMessage out2,
|
||||
boolean switched, int layer, int switchIdx, int out0Idx, int out1Idx, // switch info
|
||||
Crypto.EncryptionRandomness r1,
|
||||
Crypto.EncryptionRandomness r2) throws InvalidProtocolBufferException;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify the two-ciphertext mix proof
|
||||
*/
|
||||
public interface Verifier {
|
||||
/**
|
||||
* Return true iff the proof is valid.
|
||||
* @param in1
|
||||
* @param in2
|
||||
* @param out1
|
||||
* @param out2
|
||||
* @return
|
||||
*/
|
||||
boolean verify(Crypto.RerandomizableEncryptedMessage in1,
|
||||
Crypto.RerandomizableEncryptedMessage in2,
|
||||
Crypto.RerandomizableEncryptedMessage out1,
|
||||
Crypto.RerandomizableEncryptedMessage out2,
|
||||
Mixing.Mix2Proof proof) throws InvalidProtocolBufferException;
|
||||
}
|
||||
}
|
|
@ -2,8 +2,8 @@ package meerkat.mixer.proofs.concrete;
|
|||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.crypto.concrete.ECElGamalEncryption;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeProver;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
import meerkat.mixer.proofs.Mix2nizk.Prover;
|
||||
import meerkat.mixer.proofs.Mix2nizk.Verifier;
|
||||
import meerkat.mixer.proofs.generic.SigmaFiatShamir;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
@ -14,10 +14,10 @@ import java.util.Random;
|
|||
|
||||
|
||||
/**
|
||||
* implements of Mix2ZeroKnowledgeProver and Mix2ZeroKnowledgeVerifier interfaces
|
||||
* implements of Prover and Verifier interfaces
|
||||
* this implementation assumes that each RerandomizableEncryptedMessage is an ElGamalCiphertext
|
||||
*/
|
||||
public class Mix2nizk implements Mix2ZeroKnowledgeProver, Mix2ZeroKnowledgeVerifier {
|
||||
public class Mix2nizk implements Prover, Verifier {
|
||||
//
|
||||
private final ECGroup group;
|
||||
private final Random rand;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
//package meerkat.mixer;
|
||||
//
|
||||
//import meerkat.crypto.concrete.ECElGamalEncryption;
|
||||
//import meerkat.crypto.mixnet.Mix2ZeroKnowledgeProver;
|
||||
//import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
//import meerkat.mixer.proofs.Mix2nizk.Prover;
|
||||
//import meerkat.mixer.proofs.Mix2nizk.Verifier;
|
||||
//import meerkat.mixer.Mixer;
|
||||
//import meerkat.mixer.MixerOutput;
|
||||
//import meerkat.mixer.proofs.Prover;
|
||||
|
@ -32,8 +32,8 @@
|
|||
// ECGroup group;
|
||||
// Random random,randomMixer,randomProver;
|
||||
// RandomOracle randomOracle;
|
||||
// Mix2ZeroKnowledgeVerifier verifier;
|
||||
// Mix2ZeroKnowledgeProver prover;
|
||||
// Verifier verifier;
|
||||
// Prover prover;
|
||||
// meerkat.crypto.mixnet.Mixer mixer;
|
||||
// private int layers;
|
||||
// private int n;
|
||||
|
@ -84,8 +84,8 @@
|
|||
// //@SimpleRerandomizeTest
|
||||
// public void createInvalidTest() throws IOException {
|
||||
//
|
||||
// //Mix2ZeroKnowledgeVerifier corruptedVerifier = new Verifier(enc,randomOracle,true);
|
||||
// //Mix2ZeroKnowledgeProver corruptedProver = new Prover(randomProver,enc,randomOracle,true);
|
||||
// //Verifier corruptedVerifier = new Verifier(enc,randomOracle,true);
|
||||
// //Prover corruptedProver = new Prover(randomProver,enc,randomOracle,true);
|
||||
// //mixer = new Mixer(randomMixer,corruptedProver,enc,corruptedVerifier);
|
||||
//
|
||||
// List<Crypto.RerandomizableEncryptedMessage> mixerInput = generateMixerInput();
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.util.Random;
|
|||
public class MixingTest extends ECParamTestBase {
|
||||
Random random,randomMixer,randomProver;
|
||||
Mix2nizk mix2nizk;
|
||||
meerkat.crypto.mixnet.Mixer mixer;
|
||||
MixGenerator mixer;
|
||||
private int layers;
|
||||
private int n;
|
||||
|
||||
|
@ -57,7 +57,7 @@ public class MixingTest extends ECParamTestBase {
|
|||
System.out.println(" start network");
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
meerkat.crypto.mixnet.MixerOutput mixerOutput = mixer.mix(mixerInput,randomMixer);
|
||||
MixerOutput mixerOutput = mixer.mix(mixerInput,randomMixer);
|
||||
|
||||
long finishTime = System.currentTimeMillis();
|
||||
System.out.println(" that took: "+(finishTime-startTime)+ " ms");
|
||||
|
|
|
@ -2,11 +2,8 @@ package meerkat.mixer.proofs.concrete;
|
|||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.crypto.concrete.ECElGamalEncryption;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeProver;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeVerifier;
|
||||
import meerkat.mixer.ECParamTestBase;
|
||||
import meerkat.mixer.Utils;
|
||||
import meerkat.mixer.proofs.concrete.Mix2nizk;
|
||||
import meerkat.protobuf.ConcreteCrypto;
|
||||
import meerkat.protobuf.Crypto;
|
||||
import meerkat.protobuf.Mixing;
|
||||
|
@ -23,8 +20,8 @@ import static org.junit.Assert.assertTrue;
|
|||
*/
|
||||
public class Mix2ProofTest extends ECParamTestBase {
|
||||
Mix2nizk nizk;
|
||||
Mix2ZeroKnowledgeVerifier verifier ;
|
||||
Mix2ZeroKnowledgeProver prover ;
|
||||
meerkat.mixer.proofs.Mix2nizk.Verifier verifier ;
|
||||
meerkat.mixer.proofs.Mix2nizk.Prover prover ;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
|
|
|
@ -3,7 +3,6 @@ package profiling;
|
|||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.crypto.concrete.ECElGamalEncryption;
|
||||
import meerkat.crypto.mixnet.Mix2ZeroKnowledgeProver;
|
||||
import meerkat.mixer.proofs.concrete.Mix2nizk;
|
||||
import meerkat.protobuf.ConcreteCrypto;
|
||||
import meerkat.protobuf.Crypto;
|
||||
|
@ -28,7 +27,7 @@ public class ZeroKnowledgeProof {
|
|||
ECGroup group;
|
||||
ECElGamalEncryption enc;
|
||||
ConcreteCrypto.ElGamalPublicKey serializedPk;
|
||||
Mix2ZeroKnowledgeProver prover ;
|
||||
meerkat.mixer.proofs.Mix2nizk.Prover prover ;
|
||||
int n;
|
||||
Crypto.EncryptionRandomness[] randomnesses;
|
||||
Crypto.RerandomizableEncryptedMessage[] encryptedMessage;
|
||||
|
|
Loading…
Reference in New Issue