1 package civitas.crypto.oneoflreencryption;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller;
5
6 import civitas.crypto.ciphertext.ElGamalCiphertextish;
7 import civitas.crypto.ciphertext.ElGamalReencrypt;
8 import civitas.crypto.ciphertextlist.CiphertextList;
9 import civitas.crypto.proof1ofl.ConstructElGamalProof1OfL;
10 import civitas.crypto.proof1ofl.ElGamalProof1OfL;
11 import civitas.crypto.publickey.ElGamalPublicKey;
12 import civitas.crypto.reencryptfactor.ElGamalReencryptFactor;
13
14 @Controller
15 public class ConstructElGamal1OfLReencryption {
16
17 @Autowired
18 ConstructElGamalProof1OfL constructElGamalProof1OfL;
19
20 @Autowired
21 ElGamalReencrypt elGamalReencrypt;
22
23 public ElGamal1OfLReencryption apply(
24 final ElGamalPublicKey key,
25 final CiphertextList ciphertexts,
26 final int choice,
27 final ElGamalReencryptFactor factor) {
28 if (ciphertexts == null || choice >= ciphertexts.size()) {
29 return null;
30 }
31 ElGamalCiphertextish m = elGamalReencrypt.apply(key, ciphertexts.get(choice), factor);
32 ElGamalProof1OfL proof = constructElGamalProof1OfL.apply(key, ciphertexts, choice, m, factor);
33 return new ElGamal1OfLReencryption(m, proof);
34 }
35 }