meerkat-java/destributed-key-generation/src/main/java/SecureDistributedKeyGeneration/SecureDistributedKeyGenerat...

69 lines
2.8 KiB
Java
Raw Normal View History

2016-02-17 15:58:20 -05:00
package SecureDistributedKeyGeneration;
import Communication.Network;
import FeldmanVerifiableSecretSharing.VerifiableSecretSharing;
import JointFeldmanProtocol.DistributedKeyGeneration;
import com.google.protobuf.ByteString;
import meerkat.protobuf.DKGMessages;
import org.factcenter.qilin.primitives.concrete.Zpstar;
import java.math.BigInteger;
import java.util.Random;
/**
* Created by Tzlil on 2/17/2016.
*/
public class SecureDistributedKeyGeneration extends DistributedKeyGeneration {
VerifiableSecretSharing verifiableSecretSharing;
public SecureDistributedKeyGeneration(int t, int n, BigInteger zi, Random random, BigInteger p, BigInteger q, BigInteger g
,BigInteger h, Network network) {
super(t, n, zi, random, p, q, g, network.connect(new SecureDistributedKeyGenerationMessageHandler(t,n,g,new Zpstar(p))));
this.verifiableSecretSharing = new VerifiableSecretSharing(t,n,new BigInteger(q.bitLength(), random).mod(q),random,p,q,h,user);
}
@Override
protected void computeAndSendSecrets() {
DKGMessages.SecretMessage[] secretMessages1 = prepareSecretMessages();
DKGMessages.SecretMessage[] secretMessages2 = verifiableSecretSharing.prepareSecretMessages();
DKGMessages.DoubleSecretMessage doubleSecretMessage;
for (int j = 1; j <= n ; j++ ){
doubleSecretMessage = DKGMessages.DoubleSecretMessage.newBuilder()
.setS1(secretMessages1[j - 1])
.setS1(secretMessages2[j - 1])
.build();
user.send(j, DKGMessages.Mail.Type.SECRET,doubleSecretMessage);
}
}
@Override
public DKGMessages.CommitmentMessage[] prepareCommitmentMessages() {
DKGMessages.CommitmentMessage[] commitmentMessages = new DKGMessages.CommitmentMessage[t + 1];
BigInteger[] commitments2 = verifiableSecretSharing.getCommitments();
for (int k = 0; k <= t ; k ++) {
commitmentMessages[k] = DKGMessages.CommitmentMessage.newBuilder()
.setK(k)
.setCommitment(ByteString.copyFrom(zpstar.add(commitments[k],commitments2[k]).toByteArray()))
.build();
}
return commitmentMessages;
}
@Override
protected void answerComplaint(int j) {
DKGMessages.SecretMessage secretMessage1 = DKGMessages.SecretMessage.newBuilder()
.setSecret(getShare(j).asMessage())
.build();
DKGMessages.SecretMessage secretMessage2 = DKGMessages.SecretMessage.newBuilder()
.setSecret(verifiableSecretSharing.getShare(j).asMessage())
.build();
user.broadcast(DKGMessages.Mail.Type.SECRET, DKGMessages.DoubleSecretMessage.newBuilder()
.setS1(secretMessage1)
.setS2(secretMessage2)
.build());
}
}