1 package civitas.common.capabilityencryption;
2
3 import java.util.Map;
4
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Controller;
7
8 import civitas.crypto.ciphertext.ElGamalCiphertextish;
9 import civitas.crypto.ciphertext.ElGamalEncrypt;
10 import civitas.crypto.publickey.ElGamalPublicKey;
11 import civitas.crypto.reencryptfactor.ElGamalReencryptFactor;
12 import civitas.crypto.reencryptfactor.GenerateElGamalReencryptFactor;
13 import civitas.crypto.votecapability.VoteCapability;
14
15 @Controller
16 public class EncryptCapability {
17
18 @Autowired
19 GenerateElGamalReencryptFactor generateElGamalReencryptFactor;
20
21 @Autowired
22 ElGamalEncrypt elGamalEncrypt;
23
24 public CapabilityEncryption apply(
25 final ElGamalPublicKey key, final Map<String, VoteCapability> capabilities, final String desiredContext) {
26 VoteCapability c = capabilities.get(desiredContext);
27 if (c == null) {
28 throw new IllegalArgumentException("No capability supplied for context " + desiredContext);
29 }
30
31 ElGamalReencryptFactor encCapFactor = generateElGamalReencryptFactor.apply(key.params);
32 ElGamalCiphertextish encCap = elGamalEncrypt.apply(key, c, encCapFactor);
33
34 return new CapabilityEncryption(encCapFactor, encCap);
35 }
36 }