69 lines
2.8 KiB
Java
69 lines
2.8 KiB
Java
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());
|
|
}
|
|
}
|