1 package civitas.crypto.keyshare;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller;
5
6 import civitas.crypto.CryptoError;
7 import civitas.crypto.keypairshare.ElGamalKeyPairShare;
8 import civitas.crypto.proofknowndisclog.ConstructProofKnowDiscLog;
9 import civitas.crypto.proofknowndisclog.ElGamalProofKnowDiscLog;
10 import civitas.crypto.publickey.ElGamalPublicKey;
11
12 @Controller
13 public class ConstructElGamalKeyShare {
14 @Autowired
15 ConstructProofKnowDiscLog constructProofKnowDiscLog;
16
17 @Autowired
18 VerifyElGamalKeyShare verifyElGamalKeyShare;
19
20 public ElGamalKeyShare apply(final ElGamalKeyPairShare kps) {
21 ElGamalKeyShare egks = apply(kps.pubKey(), constructProofKnowDiscLog.apply(kps.pubKey().params, kps.privKey()));
22 if (!verifyElGamalKeyShare.apply(egks)) {
23 throw new CryptoError("Cannot verify a newly created key share!");
24 }
25 return egks;
26 }
27
28 public ElGamalKeyShare apply(final ElGamalPublicKey k, final ElGamalProofKnowDiscLog proof) {
29 return new ElGamalKeyShare(k, proof);
30 }
31 }