From cc7e138a4303b7df7cee4a244f78e669d92e265e Mon Sep 17 00:00:00 2001 From: "tzlil.gon" Date: Tue, 1 Mar 2016 16:49:55 +0200 Subject: [PATCH] redesigned mail handler --- .../main/java/Communication/MailHandler.java | 43 +-- .../java/Communication/MessageHandler.java | 12 +- .../src/main/java/Communication/Network.java | 4 +- .../src/main/java/Communication/User.java | 10 +- .../VerifiableSecretSharing.java | 2 +- .../DistributedKeyGeneration.java | 39 +-- .../DistributedKeyGenerationMailHandler.java | 46 ++++ .../DistributedKeyGenerationUserImpl.java | 130 +++++---- ...ecureDistributedKeyGenerationUserImpl.java | 138 ---------- .../SecureDistributedKeyGeneration.java | 63 ++--- ...reDistributedKeyGenerationMailHandler.java | 60 +++++ ...ecureDistributedKeyGenerationUserImpl.java | 247 ++++++++++++++++++ .../java/ShamirSecretSharing/Polynomial.java | 17 -- .../ShamirSecretSharing/SecretSharing.java | 2 +- .../java/JointFeldmanProtocol/DKGTest.java | 2 +- .../src/test/java/SDKGTest.java | 6 +- .../SecretSharingTest.java | 3 +- .../src/main/proto/meerkat/DKGMessages.proto | 25 +- 18 files changed, 546 insertions(+), 303 deletions(-) create mode 100644 destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationMailHandler.java delete mode 100644 destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGenerationUserImpl.java rename destributed-key-generation/src/main/java/{SecureDistributedKeyGeneration => SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem}/SecureDistributedKeyGeneration.java (53%) create mode 100644 destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationMailHandler.java create mode 100644 destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationUserImpl.java diff --git a/destributed-key-generation/src/main/java/Communication/MailHandler.java b/destributed-key-generation/src/main/java/Communication/MailHandler.java index 618ba4f..13bd347 100644 --- a/destributed-key-generation/src/main/java/Communication/MailHandler.java +++ b/destributed-key-generation/src/main/java/Communication/MailHandler.java @@ -1,50 +1,53 @@ package Communication; import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.Message; import meerkat.protobuf.DKGMessages; /** * Created by Tzlil on 2/14/2016. */ -public class MailHandler { +public abstract class MailHandler { private MessageHandler messageHandler; public MailHandler(MessageHandler messageHandler){ this.messageHandler = messageHandler; } + public abstract Message extractMessage(DKGMessages.Mail mail); - public void handel(DKGMessages.Mail mail) throws InvalidProtocolBufferException { - switch (mail.getType()){ + public void handel(DKGMessages.Mail mail){ + + Message message = extractMessage(mail); + if (message == null) + return; + + switch (mail.getType()) { case SECRET: - DKGMessages.SecretMessage secretMessage = DKGMessages.SecretMessage.parseFrom(mail.getMessage()); - messageHandler.handelSecretMessage(mail.getSender(),mail.getDestination()== Network.BROADCAST,secretMessage); + messageHandler.handelSecretMessage(mail.getSender(), mail.getDestination() == Network.BROADCAST + , message); break; case COMMITMENT: - DKGMessages.CommitmentMessage commitmentMessage = DKGMessages.CommitmentMessage.parseFrom(mail.getMessage()); - messageHandler.handelCommitmentMessage(mail.getSender(),mail.getDestination()== Network.BROADCAST,commitmentMessage); + messageHandler.handelCommitmentMessage(mail.getSender(), mail.getDestination() == Network.BROADCAST + , message); break; case DONE: - DKGMessages.DoneMessage doneMessage = DKGMessages.DoneMessage.parseFrom(mail.getMessage()); - messageHandler.handelDoneMessage(mail.getSender(),mail.getDestination()== Network.BROADCAST,doneMessage); + messageHandler.handelDoneMessage(mail.getSender(), mail.getDestination() == Network.BROADCAST + , message); break; case COMPLAINT: - DKGMessages.ComplaintMessage complaintMessage = DKGMessages.ComplaintMessage.parseFrom(mail.getMessage()); - messageHandler.handelComplaintMessage(mail.getSender(),mail.getDestination()== Network.BROADCAST,complaintMessage); + messageHandler.handelComplaintMessage(mail.getSender(), mail.getDestination() == Network.BROADCAST + , message); break; - case DOUBLE: - DKGMessages.DoubleSecretMessage doubleSecretMessage = DKGMessages.DoubleSecretMessage.parseFrom(mail.getMessage()); - messageHandler.handelDoubleSecretMessage(mail.getSender(),mail.getDestination()== Network.BROADCAST,doubleSecretMessage); + case ANSWER: + messageHandler.handelAnswerMessage(mail.getSender(), mail.getDestination() == Network.BROADCAST + , message); default: break; } + + } - - - public MessageHandler getMessageHandler(){ - return messageHandler; - } - public void setMessageHandler(MessageHandler messageHandler) { this.messageHandler = messageHandler; } diff --git a/destributed-key-generation/src/main/java/Communication/MessageHandler.java b/destributed-key-generation/src/main/java/Communication/MessageHandler.java index 8d1447e..a12a600 100644 --- a/destributed-key-generation/src/main/java/Communication/MessageHandler.java +++ b/destributed-key-generation/src/main/java/Communication/MessageHandler.java @@ -1,14 +1,14 @@ package Communication; -import meerkat.protobuf.DKGMessages; +import com.google.protobuf.Message; /** * Created by Tzlil on 2/14/2016. */ public interface MessageHandler { - void handelComplaintMessage(int sender, boolean isBroadcast,DKGMessages.ComplaintMessage complaintMessage); - void handelDoneMessage(int sender, boolean isBroadcast, DKGMessages.DoneMessage doneMessage); - void handelCommitmentMessage(int sender, boolean isBroadcast,DKGMessages.CommitmentMessage commitmentMessage); - void handelSecretMessage(int sender, boolean isBroadcast,DKGMessages.SecretMessage secretMessage); - void handelDoubleSecretMessage(int sender, boolean isBroadcast,DKGMessages.DoubleSecretMessage doubleSecretMessage); + void handelSecretMessage(int sender, boolean isBroadcast, Message message); + void handelCommitmentMessage(int sender, boolean isBroadcast, Message message); + void handelComplaintMessage(int sender, boolean isBroadcast, Message message); + void handelDoneMessage(int sender, boolean isBroadcast, Message message); //will be remove + void handelAnswerMessage(int sender, boolean isBroadcast, Message message); } diff --git a/destributed-key-generation/src/main/java/Communication/Network.java b/destributed-key-generation/src/main/java/Communication/Network.java index fb6dca5..af7e5d6 100644 --- a/destributed-key-generation/src/main/java/Communication/Network.java +++ b/destributed-key-generation/src/main/java/Communication/Network.java @@ -28,11 +28,11 @@ public class Network { } } - public User connect(MessageHandler messageHandler){ + public User connect(MailHandler mailHandler){ Integer id = availableIDs.poll(); if (id == null) return null; - users[id - 1] = new User(id,this,new MailHandler(messageHandler)); + users[id - 1] = new User(id,this,mailHandler); return users[id - 1]; } diff --git a/destributed-key-generation/src/main/java/Communication/User.java b/destributed-key-generation/src/main/java/Communication/User.java index 2de1ba1..3851b4d 100644 --- a/destributed-key-generation/src/main/java/Communication/User.java +++ b/destributed-key-generation/src/main/java/Communication/User.java @@ -32,7 +32,9 @@ public class User{ public void broadcast(DKGMessages.Mail.Type type, Message message){ network.sendBroadcast(this,type,message); } - + public MailHandler getMailHandler(){ + return mailHandler; + } public void setMessageHandler(MessageHandler messageHandler) { mailHandler.setMessageHandler(messageHandler); } @@ -48,11 +50,7 @@ public class User{ public void run() { while (true){ if (!mailbox.isEmpty()){ - try { - mailHandler.handel(mailbox.poll()); - } catch (InvalidProtocolBufferException e) { - e.printStackTrace(); - } + mailHandler.handel(mailbox.poll()); }else{ try { Thread.sleep(30); diff --git a/destributed-key-generation/src/main/java/FeldmanVerifiableSecretSharing/VerifiableSecretSharing.java b/destributed-key-generation/src/main/java/FeldmanVerifiableSecretSharing/VerifiableSecretSharing.java index 51ae86e..521714d 100644 --- a/destributed-key-generation/src/main/java/FeldmanVerifiableSecretSharing/VerifiableSecretSharing.java +++ b/destributed-key-generation/src/main/java/FeldmanVerifiableSecretSharing/VerifiableSecretSharing.java @@ -58,7 +58,7 @@ public class VerifiableSecretSharing extends SecretSharing { * @param commitments * @param group * - * @return product of commitmentsArray[j] ^ (i ^ j) == g ^ polynomial(i) + * @return product of Aik ^ (j ^ k) == g ^ polynomial(i) */ public static BigInteger verify(int j,BigInteger[] commitments,Group group) { BigInteger v = group.zero(); diff --git a/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGeneration.java b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGeneration.java index bf789f1..b52a728 100644 --- a/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGeneration.java +++ b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGeneration.java @@ -50,8 +50,13 @@ public class DistributedKeyGeneration extends VerifiableSecretSharing{ } public void sendSecret(User user, int j){ - SecretMessage.Point secret = getShare(j).asMessage(); - user.send(j, Mail.Type.DOUBLE,SecretMessage.newBuilder().setSecret(secret).build()); + ByteString secret = ByteString.copyFrom(getShare(j).y.toByteArray()); + user.send(j, Mail.Type.SECRET, + SecretMessage.newBuilder() + .setI(id) + .setJ(j) + .setSecret(secret) + .build()); } /** @@ -66,13 +71,13 @@ public class DistributedKeyGeneration extends VerifiableSecretSharing{ } } - public boolean isValidSecret(int j,BigInteger[] commitments,int i){ - Polynomial.Point secret = shares[j - 1]; - return isValidSecret(secret,commitments,i); + public boolean isValidSecret(int i,BigInteger[] commitments,int j){ + Polynomial.Point secret = shares[i - 1]; + return isValidSecret(secret,commitments,j); } - public boolean isValidSecret(Polynomial.Point secret, BigInteger[] commitments, int i){ - BigInteger v = verify(i,commitments,group); + public boolean isValidSecret(Polynomial.Point secret, BigInteger[] commitments, int j){ + BigInteger v = verify(j,commitments,group); return group.multiply(g,secret.y).equals(v); } @@ -83,12 +88,12 @@ public class DistributedKeyGeneration extends VerifiableSecretSharing{ */ public void broadcastComplains(User user, BigInteger[][]commitmentsTable){ ComplaintMessage complaint; - for (int j = 1; j <= n ; j++ ){ - if(j != id) { - if (!isValidSecret(j,commitmentsTable[j - 1],id)) { + for (int i = 1; i <= n ; i++ ){ + if(i != id) { + if (!isValidSecret(i,commitmentsTable[i - 1],id)) { //message = new Message(Type.Complaint, j) complaint = ComplaintMessage.newBuilder() - .setId(j) + .setId(i) .build(); user.broadcast(Mail.Type.COMPLAINT, complaint); } @@ -98,8 +103,10 @@ public class DistributedKeyGeneration extends VerifiableSecretSharing{ public void broadcastComplaintAnswer(User user, int j){ - user.broadcast(Mail.Type.SECRET, SecretMessage.newBuilder() - .setSecret(getShare(j).asMessage()) + user.broadcast(Mail.Type.ANSWER, SecretMessage.newBuilder() + .setI(id) + .setJ(j) + .setSecret(ByteString.copyFrom(getShare(j).y.toByteArray())) .build()); } @@ -108,10 +115,10 @@ public class DistributedKeyGeneration extends VerifiableSecretSharing{ * if more than t players complain against a player Pi he is disqualified. */ public void answerAllComplainingPlayers(User user, DistributedKeyGenerationUserImpl.ComplainState[] complains){ - for (int j = 1; j <= n ; j++) { - switch (complains[j - 1]) { + for (int i = 1; i <= n ; i++) { + switch (complains[i - 1]) { case Waiting: - broadcastComplaintAnswer(user,j); + broadcastComplaintAnswer(user,i); break; default: break; diff --git a/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationMailHandler.java b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationMailHandler.java new file mode 100644 index 0000000..bc2c63e --- /dev/null +++ b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationMailHandler.java @@ -0,0 +1,46 @@ +package JointFeldmanProtocol; + +import Communication.MailHandler; +import Communication.MessageHandler; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.Message; +import meerkat.protobuf.DKGMessages; + +/** + * Created by Tzlil on 2/29/2016. + */ +public class DistributedKeyGenerationMailHandler extends MailHandler { + + public DistributedKeyGenerationMailHandler(MessageHandler messageHandler) { + super(messageHandler); + } + + @Override + public Message extractMessage(DKGMessages.Mail mail) { + try { + Message message; + switch (mail.getType()) { + case SECRET: + message = DKGMessages.SecretMessage.parseFrom(mail.getMessage()); + break; + case COMMITMENT: + message = DKGMessages.CommitmentMessage.parseFrom(mail.getMessage()); + break; + case COMPLAINT: + message = DKGMessages.ComplaintMessage.parseFrom(mail.getMessage()); + break; + case DONE: + message = DKGMessages.DoneMessage.parseFrom(mail.getMessage()); + break; + case ANSWER: + message = DKGMessages.SecretMessage.parseFrom(mail.getMessage()); + break; + default: + return null; + } + return message; + } catch (InvalidProtocolBufferException e) { + return null; + } + } +} diff --git a/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationUserImpl.java b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationUserImpl.java index faf0048..43958b2 100644 --- a/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationUserImpl.java +++ b/destributed-key-generation/src/main/java/JointFeldmanProtocol/DistributedKeyGenerationUserImpl.java @@ -1,9 +1,12 @@ package JointFeldmanProtocol; +import Communication.MailHandler; import Communication.Network; import Communication.User; import ShamirSecretSharing.Polynomial; import UserInterface.DistributedKeyGenerationUser; +import com.google.protobuf.ByteString; +import com.google.protobuf.Message; import meerkat.protobuf.DKGMessages; import org.factcenter.qilin.primitives.Group; @@ -39,7 +42,10 @@ public class DistributedKeyGenerationUserImpl implements DistributedKeyGeneratio protected Polynomial.Point share; // final share of the secrete protected BigInteger y; // final public value - public DistributedKeyGenerationUserImpl(DistributedKeyGeneration dkg, Network network) { + public DistributedKeyGenerationUserImpl(DistributedKeyGeneration dkg, Network network){ + this(dkg,network,new DistributedKeyGenerationMailHandler(null)); + } + public DistributedKeyGenerationUserImpl(DistributedKeyGeneration dkg, Network network, MailHandler mailHandler) { this.dkg = dkg; this.g = dkg.getGenerator(); @@ -49,11 +55,12 @@ public class DistributedKeyGenerationUserImpl implements DistributedKeyGeneratio this.id = dkg.getId(); this.messageHandler = new MessageHandler(); + mailHandler.setMessageHandler(this.messageHandler); + this.user = network.connect(mailHandler); this.shares = new Polynomial.Point[n]; this.shares[id - 1] = dkg.getShare(id); this.commitmentsTable = new BigInteger[n][t + 1]; this.doneFlags = new boolean[n]; - this.user = network.connect(messageHandler); this.complaintsTable = new ComplainState[n][n]; for (int i = 0; i < n; i++){ Arrays.fill(complaintsTable[i],ComplainState.Non); @@ -212,75 +219,100 @@ public class DistributedKeyGenerationUserImpl implements DistributedKeyGeneratio this.commitmentsCounter = 0; } - @Override - public void handelComplaintMessage(int sender, boolean isBroadcast, DKGMessages.ComplaintMessage complaintMessage) { - if(isBroadcast) { - int i = sender - 1; - int j = complaintMessage.getId() - 1; - switch (complaintsTable[i][j]) { - case Non: - complaintsTable[i][j] = ComplainState.Waiting; - break; - default: - break; - } - } + protected boolean isValidComplaintMessage(int sender, boolean isBroadcast, DKGMessages.ComplaintMessage complaintMessage){ + int i = sender; + int j = complaintMessage.getId(); + return isBroadcast && complaintsTable[i - 1][j - 1].equals( ComplainState.Non); } @Override - public void handelDoneMessage(int sender, boolean isBroadcast, DKGMessages.DoneMessage doneMessage) { - if(isBroadcast && !doneFlags[sender - 1]) { + public void handelComplaintMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.ComplaintMessage complaintMessage = (DKGMessages.ComplaintMessage)message; + if(isValidComplaintMessage(sender,isBroadcast,complaintMessage)){ + int i = sender; + int j = complaintMessage.getId(); + complaintsTable[i - 1][j - 1] = ComplainState.Waiting; + } + } + + protected boolean isValidDoneMessage(int sender, boolean isBroadcast){ + return isBroadcast && !doneFlags[sender - 1]; + } + + @Override + public void handelDoneMessage(int sender, boolean isBroadcast,Message message) { + if(isValidDoneMessage(sender,isBroadcast)) { doneFlags[sender - 1] = true; doneCounter++; } } + protected boolean isValidCommitmentMessage(int sender, boolean isBroadcast, DKGMessages.CommitmentMessage commitmentMessage){ + int i = sender - 1; + int k = commitmentMessage.getK(); + return isBroadcast && commitmentsTable[i][k] == null; + } + @Override - public void handelCommitmentMessage(int sender, boolean isBroadcast, DKGMessages.CommitmentMessage commitmentMessage) { - if(isBroadcast){ + public void handelCommitmentMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.CommitmentMessage commitmentMessage = (DKGMessages.CommitmentMessage) message; + if(isValidCommitmentMessage(sender,isBroadcast,commitmentMessage)){ int i = sender - 1; int k = commitmentMessage.getK(); - if(commitmentsTable[i][k] == null){ - commitmentsTable[i][k] = extractCommitment(commitmentMessage); - commitmentsCounter++; - } + commitmentsTable[i][k] = extractCommitment(commitmentMessage); + commitmentsCounter++; } } + protected boolean isValidSecretMessage(int sender, boolean isBroadcast, DKGMessages.SecretMessage secretMessage){ + int i = secretMessage.getI(); + int j = secretMessage.getJ(); + if(sender != i || isBroadcast) + return false; + else + return shares[i - 1] == null && j == id; + + } + @Override - public void handelSecretMessage(int sender, boolean isBroadcast, DKGMessages.SecretMessage secretMessage) { - Polynomial.Point secret = extractSecret(secretMessage); - if(!isBroadcast){ - if(shares[sender - 1] == null) { - shares[sender - 1] = secret; - secretsCounter++; - } - }else { - int i = sender; - int j = secret.x.intValue(); - switch (complaintsTable[i - 1][j - 1]){ - case Waiting: - if(dkg.isValidSecret(secret,commitmentsTable[i - 1],j)){ - complaintsTable[i - 1][j - 1] = ComplainState.NonDisqualified; - }else{ - complaintsTable[i - 1][j - 1] = ComplainState.Disqualified; - } - break; - default: - break; - } + public void handelSecretMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.SecretMessage secretMessage = (DKGMessages.SecretMessage) message; + if(isValidSecretMessage(sender,isBroadcast,secretMessage)) { + int i = secretMessage.getI(); + Polynomial.Point secret = extractSecret(i,secretMessage.getSecret()); + shares[i - 1] = secret; + secretsCounter++; } } + protected boolean isValidAnswerMessage(int sender, boolean isBroadcast, DKGMessages.SecretMessage secretMessage){ + int i = secretMessage.getI(); + int j = secretMessage.getJ(); + if(sender != i || !isBroadcast) + return false; + else + return j >= 1 && j <= n && complaintsTable[i - 1][j - 1].equals(ComplainState.Waiting); + } + @Override - public void handelDoubleSecretMessage(int sender, boolean isBroadcast, DKGMessages.DoubleSecretMessage doubleSecretMessage) { - + public void handelAnswerMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.SecretMessage secretMessage = (DKGMessages.SecretMessage) message; + if(isValidAnswerMessage(sender,isBroadcast,secretMessage)) { + int i = secretMessage.getI(); + int j = secretMessage.getJ(); + Polynomial.Point secret = extractSecret(i,secretMessage.getSecret()); + if (dkg.isValidSecret(secret, commitmentsTable[i - 1], j)) + complaintsTable[i - 1][j - 1] = ComplainState.NonDisqualified; + else + complaintsTable[i - 1][j - 1] = ComplainState.Disqualified; + } } - public Polynomial.Point extractSecret(DKGMessages.SecretMessage secretMessage){ - return new Polynomial.Point(secretMessage.getSecret()); + public Polynomial.Point extractSecret(int i, ByteString secret){ + BigInteger x = BigInteger.valueOf(i); + BigInteger y = new BigInteger(secret.toByteArray()); + return new Polynomial.Point(x,y); } - public BigInteger extractCommitment(DKGMessages.CommitmentMessage commitmentMessage){ return new BigInteger(commitmentMessage.getCommitment().toByteArray()); } diff --git a/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGenerationUserImpl.java b/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGenerationUserImpl.java deleted file mode 100644 index 02ae13e..0000000 --- a/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGenerationUserImpl.java +++ /dev/null @@ -1,138 +0,0 @@ -package SecureDistributedKeyGeneration; - -import Communication.Network; -import JointFeldmanProtocol.DistributedKeyGenerationUserImpl; -import ShamirSecretSharing.Polynomial; -import meerkat.protobuf.DKGMessages; - -import java.math.BigInteger; - -/** - * Created by Tzlil on 2/22/2016. - */ -public class SecureDistributedKeyGenerationUserImpl extends DistributedKeyGenerationUserImpl { - - private final SecureDistributedKeyGeneration sdkg; - - private final Polynomial.Point[] sharesT; - private final BigInteger[][] verificationValuesTable; - - public SecureDistributedKeyGenerationUserImpl(SecureDistributedKeyGeneration sdkg, Network network) { - super(sdkg, network); - this.sdkg = sdkg; - this.sharesT = new Polynomial.Point[n]; - this.verificationValuesTable = new BigInteger[n][t + 1]; - this.messageHandler = new MessageHandler(); - this.user.setMessageHandler(this.messageHandler); - } - - /** - * stage1 according to the protocol - * 1. Pi broadcasts Cik=Aik*Bik for k = 0,...,t. - * 2. Pi computes the shares Sij,Sij' for j = 1,...,n and sends Sij,Sij' secretly to Pj. - */ - @Override - protected void stage1() { - sdkg.broadcastVerificationValues(user); - sdkg.sendSecrets(user); - } - - /** - * stage2 according to the protocol - * Pj verifies all the shares,sharesT he received - * if check fails for an index i, Pj broadcasts a complaint against Pi. - * Pj broadcasts done message at the end of this stage - */ - @Override - protected void stage2(){ - sdkg.setShares(shares); - sdkg.setSharesT(sharesT); - sdkg.broadcastComplains(user,verificationValuesTable); - //broadcast done message after all complaints - DKGMessages.DoneMessage doneMessage = DKGMessages.DoneMessage.newBuilder().build(); - user.broadcast(DKGMessages.Mail.Type.DONE,doneMessage); - } - - private void ys(){ - sdkg.broadcastCommitments(user); - //wait for receive all commitments from all i in QUAL - for (int i:QUAL) { - for(int k = 0; k <= t; k++) { - while (commitmentsTable[i - 1][k] == null) { - try { - Thread.sleep(300); - } catch (InterruptedException e) { - // do nothing - } - } - } - } - sdkg.broadcastComplaints(user,commitmentsTable,true); - //do something with complaints' answers - - } - - @Override - protected void stage4() { - ys(); - super.stage4(); - } - - private class MessageHandler extends DistributedKeyGenerationUserImpl.MessageHandler{ - - final int NumberOfCommitmentsInStage1 = n * (t + 1); - - @Override - public void handelCommitmentMessage(int sender, boolean isBroadcast, DKGMessages.CommitmentMessage commitmentMessage) { - if(isBroadcast){ - if(commitmentsCounter < NumberOfCommitmentsInStage1){ - int i = sender - 1; - int k = commitmentMessage.getK(); - if(verificationValuesTable[i][k] == null){ - verificationValuesTable[i][k] = extractCommitment(commitmentMessage); - commitmentsCounter++; - } - } else{ - super.handelCommitmentMessage(sender,isBroadcast,commitmentMessage); - } - } - } - - @Override - public void handelSecretMessage(int sender, boolean isBroadcast, DKGMessages.SecretMessage secretMessage) { - //there is no secret message in this protocol - } - - @Override - public void handelDoubleSecretMessage(int sender, boolean isBroadcast, DKGMessages.DoubleSecretMessage doubleSecretMessage) { - - Polynomial.Point secret = extractSecret(doubleSecretMessage.getS1()); - Polynomial.Point secretT = extractSecret(doubleSecretMessage.getS2()); - if(!isBroadcast){ - if(shares[sender - 1] == null) { - shares[sender - 1] = secret; - sharesT[sender - 1] = secretT; - secretsCounter++; - } - }else { - if(commitmentsCounter <= NumberOfCommitmentsInStage1) { - int i = sender; - int j = secret.x.intValue(); - switch (complaintsTable[i - 1][j - 1]) { - case Waiting: - if (sdkg.isValidSecret(secret,secretT, verificationValuesTable[j - 1], i)) { - complaintsTable[i - 1][j - 1] = ComplainState.NonDisqualified; - } else { - complaintsTable[i - 1][j - 1] = ComplainState.Disqualified; - } - break; - default: - break; - } - }else{ // stage4 - - } - } - } - } -} diff --git a/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGeneration.java b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGeneration.java similarity index 53% rename from destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGeneration.java rename to destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGeneration.java index bd204c8..05e892e 100644 --- a/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGeneration.java +++ b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGeneration.java @@ -1,6 +1,5 @@ -package SecureDistributedKeyGeneration; +package SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem; -import Communication.Network; import Communication.User; import FeldmanVerifiableSecretSharing.VerifiableSecretSharing; import JointFeldmanProtocol.DistributedKeyGeneration; @@ -8,7 +7,6 @@ import ShamirSecretSharing.Polynomial; import com.google.protobuf.ByteString; import meerkat.protobuf.DKGMessages; import org.factcenter.qilin.primitives.Group; -import org.factcenter.qilin.primitives.concrete.Zpstar; import java.math.BigInteger; import java.util.Random; @@ -32,31 +30,34 @@ public class SecureDistributedKeyGeneration extends DistributedKeyGeneration { @Override public void sendSecret(User user,int j) { - DKGMessages.SecretMessage.Point secret = getShare(j).asMessage();; - DKGMessages.SecretMessage.Point secretT = verifiableSecretSharing.getShare(j).asMessage();; - DKGMessages.DoubleSecretMessage doubleSecretMessage = DKGMessages.DoubleSecretMessage.newBuilder() - .setS1(DKGMessages.SecretMessage.newBuilder().setSecret(secret).build()) - .setS2(DKGMessages.SecretMessage.newBuilder().setSecret(secretT).build()) - .build(); - user.send(j, DKGMessages.Mail.Type.DOUBLE, doubleSecretMessage); + Polynomial.Point secret = getShare(j); + Polynomial.Point secretT = verifiableSecretSharing.getShare(j); + DKGMessages.DoubleSecretMessage doubleSecretMessage = doubleSecretMessage(id,j,secret,secretT); + user.send(j, DKGMessages.Mail.Type.SECRET, doubleSecretMessage); } @Override - public boolean isValidSecret(int j, BigInteger[] commitments, int i){ - Polynomial.Point secret = shares[j - 1]; - Polynomial.Point secretT = sharesT[j - 1]; - return isValidSecret(secret,secretT,commitments,i); + public boolean isValidSecret(int i, BigInteger[] commitments, int j){ + Polynomial.Point secret = shares[i - 1]; + Polynomial.Point secretT = sharesT[i - 1]; + return isValidSecret(secret,secretT,commitments, j); } - public boolean isValidSecret(Polynomial.Point secret,Polynomial.Point secretT, BigInteger[] verificationValues, int i){ - BigInteger v = verify(i,verificationValues,group); + public boolean isValidSecret(Polynomial.Point secret,Polynomial.Point secretT, BigInteger[] verificationValues, int j){ + BigInteger v = verify(j,verificationValues,group); BigInteger exp = group.add(group.multiply(g, secret.y),group.multiply(h, secretT.y)); return exp.equals(v); } - public boolean isValidComplaint(Polynomial.Point secret,Polynomial.Point secretT, BigInteger[] commitments - ,BigInteger[] verificationValues, int i){ - return isValidSecret(secret,secretT,verificationValues,i) && !isValidSecret(secret,commitments,i); + + public void broadcastComplaint(User user,Polynomial.Point secret,Polynomial.Point secretT,int i){ + DKGMessages.DoubleSecretMessage complaint = doubleSecretMessage(i,id,secret,secretT); + user.broadcast(DKGMessages.Mail.Type.COMPLAINT,complaint); + } + + public void broadcastAnswer(User user,Polynomial.Point secret,Polynomial.Point secretT,int i){ + DKGMessages.DoubleSecretMessage complaint = doubleSecretMessage(i,id,secret,secretT); + user.broadcast(DKGMessages.Mail.Type.ANSWER,complaint); } /** @@ -67,10 +68,10 @@ public class SecureDistributedKeyGeneration extends DistributedKeyGeneration { if(!stage4){ broadcastComplains(user,commitmentsTable); }else{ - for (int j = 1; j <= n ; j++ ){ - if(j != id) { - if (!isValidSecret(shares[j - 1],commitmentsTable[j - 1],id)) { - broadcastDoubleSecret(user,shares[j - 1],sharesT[j - 1]); + for (int i = 1; i <= n ; i++ ){ + if(i != id) { + if (!isValidSecret(shares[i - 1],commitmentsTable[i - 1],id)) { + broadcastComplaint(user,shares[i - 1],sharesT[i - 1],i); } } } @@ -87,19 +88,21 @@ public class SecureDistributedKeyGeneration extends DistributedKeyGeneration { broadcastCommitments(user,verificationValues); } - private void broadcastDoubleSecret(User user ,Polynomial.Point secret, Polynomial.Point secretT){ - DKGMessages.SecretMessage.Point secretMessage = secret.asMessage(); - DKGMessages.SecretMessage.Point secretTMessage = secretT.asMessage(); + private DKGMessages.DoubleSecretMessage doubleSecretMessage(int i,int j,Polynomial.Point secret, Polynomial.Point secretT){ DKGMessages.DoubleSecretMessage doubleSecretMessage = DKGMessages.DoubleSecretMessage.newBuilder() - .setS1(DKGMessages.SecretMessage.newBuilder().setSecret(secretMessage).build()) - .setS1(DKGMessages.SecretMessage.newBuilder().setSecret(secretTMessage).build()) + .setI(i) + .setJ(j) + .setSecret(ByteString.copyFrom(secret.y.toByteArray())) + .setSecretT(ByteString.copyFrom(secretT.y.toByteArray())) .build(); - user.broadcast(DKGMessages.Mail.Type.DOUBLE, doubleSecretMessage); + return doubleSecretMessage; } @Override public void broadcastComplaintAnswer(User user, int j) { - broadcastDoubleSecret(user,getShare(j),verifiableSecretSharing.getShare(j)); + DKGMessages.DoubleSecretMessage answer = doubleSecretMessage(id,j,getShare(j) + ,verifiableSecretSharing.getShare(j)); + user.broadcast(DKGMessages.Mail.Type.ANSWER,answer); } public void setSharesT(Polynomial.Point[] sharesT) { diff --git a/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationMailHandler.java b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationMailHandler.java new file mode 100644 index 0000000..2f60c6d --- /dev/null +++ b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationMailHandler.java @@ -0,0 +1,60 @@ +package SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem; + +import Communication.MailHandler; +import Communication.MessageHandler; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.Message; +import meerkat.protobuf.DKGMessages; + +/** + * Created by Tzlil on 2/29/2016. + */ +public class SecureDistributedKeyGenerationMailHandler extends MailHandler { + + private boolean isStage4; + + public SecureDistributedKeyGenerationMailHandler(MessageHandler messageHandler) { + super(messageHandler); + this.isStage4 = false; + } + + @Override + public Message extractMessage(DKGMessages.Mail mail) { + try { + Message message; + switch (mail.getType()) { + case SECRET: + message = DKGMessages.DoubleSecretMessage.parseFrom(mail.getMessage()); + break; + case COMMITMENT: + message = DKGMessages.CommitmentMessage.parseFrom(mail.getMessage()); + break; + case COMPLAINT: + if(isStage4) + message = DKGMessages.ComplaintMessage.parseFrom(mail.getMessage()); + else + message = DKGMessages.DoubleSecretMessage.parseFrom(mail.getMessage()); + break; + case DONE: + message = DKGMessages.DoneMessage.parseFrom(mail.getMessage()); + break; + case ANSWER: + message = DKGMessages.DoubleSecretMessage.parseFrom(mail.getMessage()); + break; + default: + return null; + } + return message; + } catch (InvalidProtocolBufferException e) { + return null; + } + } + + public boolean isStage4() { + return isStage4; + } + + public void setStage4(boolean stage4) { + isStage4 = stage4; + } +} diff --git a/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationUserImpl.java b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationUserImpl.java new file mode 100644 index 0000000..e8fcf9d --- /dev/null +++ b/destributed-key-generation/src/main/java/SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem/SecureDistributedKeyGenerationUserImpl.java @@ -0,0 +1,247 @@ +package SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem; + +import Communication.Network; +import JointFeldmanProtocol.DistributedKeyGenerationUserImpl; +import ShamirSecretSharing.Polynomial; +import ShamirSecretSharing.SecretSharing; +import com.google.protobuf.Message; +import meerkat.protobuf.DKGMessages; + +import java.math.BigInteger; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Set; + +/** + * Created by Tzlil on 2/22/2016. + */ +public class SecureDistributedKeyGenerationUserImpl extends DistributedKeyGenerationUserImpl { + + private final SecureDistributedKeyGeneration sdkg; + private final Polynomial.Point[] sharesT; + private final BigInteger[][] verificationValuesTable; + private final Hashtable> ysRestoreShares; + + public SecureDistributedKeyGenerationUserImpl(SecureDistributedKeyGeneration sdkg, Network network) { + super(sdkg, network,new SecureDistributedKeyGenerationMailHandler(null)); + this.sdkg = sdkg; + this.sharesT = new Polynomial.Point[n]; + this.verificationValuesTable = new BigInteger[n][t + 1]; + this.ysRestoreShares = new Hashtable>(); + this.messageHandler = new MessageHandler(); + this.user.setMessageHandler(this.messageHandler); + } + + /** + * stage1 according to the protocol + * 1. Pi broadcasts Cik=Aik*Bik for k = 0,...,t. + * 2. Pi computes the shares Sij,Sij' for j = 1,...,n and sends Sij,Sij' secretly to Pj. + */ + @Override + protected void stage1() { + sdkg.broadcastVerificationValues(user); + sdkg.sendSecrets(user); + } + + /** + * stage2 according to the protocol + * Pj verifies all the shares,sharesT he received + * if check fails for an index i, Pj broadcasts a complaint against Pi. + * Pj broadcasts done message at the end of this stage + */ + @Override + protected void stage2(){ + sdkg.setShares(shares); + sdkg.setSharesT(sharesT); + sdkg.broadcastComplains(user,verificationValuesTable); + //broadcast done message after all complaints + DKGMessages.DoneMessage doneMessage = DKGMessages.DoneMessage.newBuilder().build(); + user.broadcast(DKGMessages.Mail.Type.DONE,doneMessage); + } + + private void ys(){ + sdkg.broadcastCommitments(user); + //wait for receive all commitments from all i in QUAL + for (int i:QUAL) { + for(int k = 0; k <= t; k++) { + while (commitmentsTable[i - 1][k] == null) { + try { + Thread.sleep(300); + } catch (InterruptedException e) { + // do nothing + } + } + } + } + sdkg.broadcastComplaints(user,commitmentsTable,true); + //broadcast done message after all complaints + DKGMessages.DoneMessage doneMessage = DKGMessages.DoneMessage.newBuilder().build(); + user.broadcast(DKGMessages.Mail.Type.DONE,doneMessage); + + for (int i:QUAL) { + while (doneFlags[i - 1]) { + try { + Thread.sleep(300); + } catch (InterruptedException e) { + // do nothing + } + } + } + BigInteger secret; + for (Integer i: ysRestoreShares.keySet()) { + try { + secret = SecretSharing.restoreSecret((Polynomial.Point[])ysRestoreShares.get(i).toArray()); + //ToDo use restored secret... + } catch (Exception e) { + // + } + } + } + + @Override + protected void stage4() { + isStage4 = true; + ((SecureDistributedKeyGenerationMailHandler)user.getMailHandler()).setStage4(true); + ys(); + super.stage4(); + } + boolean isStage4 = false; + private class MessageHandler extends DistributedKeyGenerationUserImpl.MessageHandler{ + + final int NumberOfCommitmentsInStage1 = n * (t + 1); + + @Override + protected boolean isValidCommitmentMessage(int sender, boolean isBroadcast, DKGMessages.CommitmentMessage commitmentMessage) { + if(commitmentsCounter < NumberOfCommitmentsInStage1) { + int i = sender - 1; + int k = commitmentMessage.getK(); + return isBroadcast && verificationValuesTable[i][k] == null; + }else { + return super.isValidCommitmentMessage(sender, isBroadcast, commitmentMessage); + } + } + + @Override + public void handelCommitmentMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.CommitmentMessage commitmentMessage = ( DKGMessages.CommitmentMessage)message; + if(commitmentsCounter < NumberOfCommitmentsInStage1) { + if(isValidCommitmentMessage(sender,isBroadcast,commitmentMessage)) { + int i = sender - 1; + int k = commitmentMessage.getK(); + verificationValuesTable[i][k] = extractCommitment(commitmentMessage); + commitmentsCounter++; + } + } + else{ + super.handelCommitmentMessage(sender,isBroadcast,commitmentMessage); + } + } + + protected boolean isValidSecretMessage(int sender, boolean isBroadcast, DKGMessages.DoubleSecretMessage doubleSecretMessage) { + DKGMessages.SecretMessage secretMessage = DKGMessages.SecretMessage.newBuilder() + .setI(doubleSecretMessage.getI()) + .setJ(doubleSecretMessage.getJ()) + .setSecret(doubleSecretMessage.getSecret()) + .build(); + return super.isValidSecretMessage(sender,isBroadcast,secretMessage); + } + + @Override + public void handelSecretMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.DoubleSecretMessage doubleSecretMessage = (DKGMessages.DoubleSecretMessage)message; + if (isValidSecretMessage(sender,isBroadcast,doubleSecretMessage)) { + int i = doubleSecretMessage.getI(); + + Polynomial.Point secret = extractSecret(i, doubleSecretMessage.getSecret()); + Polynomial.Point secretT = extractSecret(i, doubleSecretMessage.getSecretT()); + shares[i - 1] = secret; + sharesT[i - 1] = secretT; + secretsCounter++; + } + } + protected boolean isValidAnswerMessage(int sender, boolean isBroadcast, DKGMessages.DoubleSecretMessage doubleSecretMessage) { + if(!isStage4) { + DKGMessages.SecretMessage secretMessage = DKGMessages.SecretMessage.newBuilder() + .setI(doubleSecretMessage.getI()) + .setJ(doubleSecretMessage.getJ()) + .setSecret(doubleSecretMessage.getSecret()) + .build(); + return super.isValidAnswerMessage(sender, isBroadcast, secretMessage); + }else{ + int i = doubleSecretMessage.getI(); + int j = doubleSecretMessage.getJ(); + return isBroadcast && j == sender && QUAL.contains(i) && QUAL.contains(j)&& ysRestoreShares.containsKey(i); + } + } + + @Override + public void handelAnswerMessage(int sender, boolean isBroadcast, Message message) { + DKGMessages.DoubleSecretMessage doubleSecretMessage = (DKGMessages.DoubleSecretMessage)message; + if(isValidAnswerMessage(sender,isBroadcast,doubleSecretMessage)) { + int i = doubleSecretMessage.getI(); + int j = doubleSecretMessage.getJ(); + Polynomial.Point secret = extractSecret(i, doubleSecretMessage.getSecret()); + Polynomial.Point secretT = extractSecret(i, doubleSecretMessage.getSecretT()); + if (!isStage4) { + if (sdkg.isValidSecret(secret, secretT, verificationValuesTable[j - 1], i)) { + complaintsTable[i - 1][j - 1] = ComplainState.NonDisqualified; + } else { + complaintsTable[i - 1][j - 1] = ComplainState.Disqualified; + } + } else { + if (ysRestoreShares.get(i).add(secret) && sender != id) { + sdkg.broadcastAnswer(user, secret, secretT, i); + } + } + } + } + + @Override + protected boolean isValidDoneMessage(int sender, boolean isBroadcast) { + if(doneCounter < n) { + return super.isValidDoneMessage(sender, isBroadcast); + }else{ + return isBroadcast && doneFlags[sender - 1]; + } + } + + @Override + public void handelDoneMessage(int sender, boolean isBroadcast, Message message) { + if(doneCounter < n) + super.handelDoneMessage(sender, isBroadcast, message); + else{ + if(isValidDoneMessage(sender,isBroadcast)) { + doneFlags[sender - 1] = false; + } + } + } + + protected boolean isValidComplaintMessage(int sender, boolean isBroadcast, + DKGMessages.DoubleSecretMessage ysComplaintMessage){ + int i = ysComplaintMessage.getI(); + int j = ysComplaintMessage.getJ(); + return isBroadcast && j == sender && QUAL.contains(i) && QUAL.contains(j)&&!ysRestoreShares.containsKey(i); + } + + @Override + public void handelComplaintMessage(int sender, boolean isBroadcast, Message message) { + if(!isStage4) { + super.handelComplaintMessage(sender, isBroadcast, message); + }else { + DKGMessages.DoubleSecretMessage ysComplaintMessage =(DKGMessages.DoubleSecretMessage)message; + if (isValidComplaintMessage(sender,isBroadcast,ysComplaintMessage)) { + int i = ysComplaintMessage.getI(); + int j = ysComplaintMessage.getJ(); + Polynomial.Point secret = extractSecret(i,ysComplaintMessage.getSecret()); + Polynomial.Point secretT = extractSecret(i,ysComplaintMessage.getSecretT()); + if (sdkg.isValidSecret(secret, secretT, verificationValuesTable[i - 1], j) + && !sdkg.isValidSecret(secret, commitmentsTable[i - 1], j)) { + ysRestoreShares.put(i, new HashSet()); + ysRestoreShares.get(i).add(secret); + sdkg.broadcastAnswer(user, secret, secretT, i); + } + } + } + } + } +} diff --git a/destributed-key-generation/src/main/java/ShamirSecretSharing/Polynomial.java b/destributed-key-generation/src/main/java/ShamirSecretSharing/Polynomial.java index 1c8eb0e..cf8719f 100644 --- a/destributed-key-generation/src/main/java/ShamirSecretSharing/Polynomial.java +++ b/destributed-key-generation/src/main/java/ShamirSecretSharing/Polynomial.java @@ -199,15 +199,6 @@ public class Polynomial implements Comparable { this.y = polynomial.image(x); } - /** - * constructor - restore point from message - * @param pointMessage - */ - public Point(DKGMessages.SecretMessage.Point pointMessage) { - this.x = new BigInteger(pointMessage.getX().toByteArray()); - this.y = new BigInteger(pointMessage.getY().toByteArray()); - } - /** * constructor * @param x @@ -217,14 +208,6 @@ public class Polynomial implements Comparable { this.x = x; this.y = y; } - - public DKGMessages.SecretMessage.Point asMessage(){ - return DKGMessages.SecretMessage.Point.newBuilder() - .setX(ByteString.copyFrom(x.toByteArray())) - .setY(ByteString.copyFrom(y.toByteArray())) - .build(); - } - } } diff --git a/destributed-key-generation/src/main/java/ShamirSecretSharing/SecretSharing.java b/destributed-key-generation/src/main/java/ShamirSecretSharing/SecretSharing.java index 7dc0bca..7b6133f 100644 --- a/destributed-key-generation/src/main/java/ShamirSecretSharing/SecretSharing.java +++ b/destributed-key-generation/src/main/java/ShamirSecretSharing/SecretSharing.java @@ -66,7 +66,7 @@ public class SecretSharing{ * * @return image of interpolation(shares) at x = 0 */ - public static BigInteger restoreSecrete(Polynomial.Point[] shares) throws Exception { + public static BigInteger restoreSecret(Polynomial.Point[] shares) throws Exception { Polynomial polynomial = Polynomial.interpolation(shares); return polynomial.image(BigInteger.ZERO); } diff --git a/destributed-key-generation/src/test/java/JointFeldmanProtocol/DKGTest.java b/destributed-key-generation/src/test/java/JointFeldmanProtocol/DKGTest.java index 4000ec0..066daff 100644 --- a/destributed-key-generation/src/test/java/JointFeldmanProtocol/DKGTest.java +++ b/destributed-key-generation/src/test/java/JointFeldmanProtocol/DKGTest.java @@ -99,7 +99,7 @@ public class DKGTest { // index = indexes.remove(random.nextInt(indexes.size())); // shares[i] = dkgs[index - 1].getShare(); //} - BigInteger calculatedSecret = SecretSharing.restoreSecrete(shares).mod(q); + BigInteger calculatedSecret = SecretSharing.restoreSecret(shares).mod(q); assert (calculatedSecret.equals(secret)); } diff --git a/destributed-key-generation/src/test/java/SDKGTest.java b/destributed-key-generation/src/test/java/SDKGTest.java index 09bfc2e..e295099 100644 --- a/destributed-key-generation/src/test/java/SDKGTest.java +++ b/destributed-key-generation/src/test/java/SDKGTest.java @@ -1,7 +1,7 @@ import Communication.Network; import FeldmanVerifiableSecretSharing.VerifiableSecretSharing; -import SecureDistributedKeyGeneration.SecureDistributedKeyGeneration; -import SecureDistributedKeyGeneration.SecureDistributedKeyGenerationUserImpl; +import SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem.SecureDistributedKeyGeneration; +import SecureDistributedKeyGenerationForDiscreteLogBasedCryptosystem.SecureDistributedKeyGenerationUserImpl; import ShamirSecretSharing.Polynomial; import ShamirSecretSharing.SecretSharing; import UserInterface.DistributedKeyGenerationUser; @@ -99,7 +99,7 @@ public class SDKGTest { // index = indexes.remove(random.nextInt(indexes.size())); // shares[i] = dkgs[index - 1].getShare(); //} - BigInteger calculatedSecret = SecretSharing.restoreSecrete(shares).mod(q); + BigInteger calculatedSecret = SecretSharing.restoreSecret(shares).mod(q); assert (calculatedSecret.equals(secret)); } diff --git a/destributed-key-generation/src/test/java/ShamirSecretSharing/SecretSharingTest.java b/destributed-key-generation/src/test/java/ShamirSecretSharing/SecretSharingTest.java index 8c73ee0..14aa387 100644 --- a/destributed-key-generation/src/test/java/ShamirSecretSharing/SecretSharingTest.java +++ b/destributed-key-generation/src/test/java/ShamirSecretSharing/SecretSharingTest.java @@ -1,6 +1,5 @@ package ShamirSecretSharing; -import Communication.Network; import org.factcenter.qilin.primitives.CyclicGroup; import org.factcenter.qilin.primitives.concrete.Zn; import org.junit.Before; @@ -50,7 +49,7 @@ public class SecretSharingTest { for (int i = 0 ; i < shares.length ; i++){ shares[i] = secretSharing.getShare(indexes.remove(random.nextInt(indexes.size()))); } - assert(secret.equals(SecretSharing.restoreSecrete(shares))); + assert(secret.equals(SecretSharing.restoreSecret(shares))); } @Test diff --git a/meerkat-common/src/main/proto/meerkat/DKGMessages.proto b/meerkat-common/src/main/proto/meerkat/DKGMessages.proto index 4fbc4da..70d5808 100644 --- a/meerkat-common/src/main/proto/meerkat/DKGMessages.proto +++ b/meerkat-common/src/main/proto/meerkat/DKGMessages.proto @@ -8,9 +8,12 @@ message Mail{ enum Type { SECRET = 0; COMMITMENT = 1; - DONE = 2; - COMPLAINT = 3; - DOUBLE = 4; + COMPLAINT = 2; + DONE = 3; + ANSWER = 4; + YCOMMITMENT = 5; + YCOMPLAINT = 6; + YANSWER = 7; } int32 sender = 1; int32 destination = 2; @@ -20,16 +23,16 @@ message Mail{ } message SecretMessage { - message Point{ - bytes x = 1; - bytes y = 2; - } - Point secret = 1; + int32 i = 1; + int32 j = 2; + bytes secret = 3; } message DoubleSecretMessage{ - SecretMessage s1 = 1; - SecretMessage s2 = 2; + int32 i = 1; + int32 j = 2; + bytes secret = 3; + bytes secretT = 4; } message CommitmentMessage{ @@ -41,4 +44,4 @@ message DoneMessage{} message ComplaintMessage{ int32 id = 1; -} \ No newline at end of file +}