View Javadoc
1   package civitas.crypto.signature;
2   
3   import org.springframework.beans.factory.annotation.Autowired;
4   import org.springframework.stereotype.Controller;
5   
6   import civitas.crypto.messagedigest.CryptoHash;
7   import civitas.crypto.parameters.ElGamalParameters;
8   import civitas.crypto.signedciphertext.ElGamalSignedCiphertext;
9   import civitas.util.CivitasBigInteger;
10  
11  @Controller
12  public class VerifyElGamalSignature {
13  	@Autowired
14  	CryptoHash cryptoHash;
15  
16  	public boolean apply(
17  			final ElGamalParameters params, final ElGamalSignedCiphertext ciphertext, final byte[] additionalEnv) {
18  		CivitasBigInteger x = params.g
19  				.modPow(ciphertext.d.mod(params.q), params.p)
20  				.modMultiply(ciphertext.a.modPow(ciphertext.c.modNegate(params.q), params.p), params.p);
21  		CivitasBigInteger v =
22  				cryptoHash.apply(x, ciphertext.a, ciphertext.b, additionalEnv).mod(params.q);
23  		return ciphertext.c.equals(v);
24  	}
25  
26  	public boolean apply(final ElGamalParameters params, final ElGamalSignedCiphertext ciphertext) {
27  		return apply(params, ciphertext, null);
28  	}
29  }