1 package org.bouncycastle.jcajce.provider.asymmetric.util; 2 3 import java.math.BigInteger; 4 import java.security.SignatureException; 5 import java.security.SignatureSpi; 6 import java.security.spec.AlgorithmParameterSpec; 7 8 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 9 import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; 10 import org.bouncycastle.crypto.DSA; 11 import org.bouncycastle.crypto.Digest; 12 13 public abstract class DSABase 14 extends SignatureSpi 15 implements PKCSObjectIdentifiers, X509ObjectIdentifiers 16 { 17 protected Digest digest; 18 protected DSA signer; 19 protected DSAEncoder encoder; 20 DSABase( Digest digest, DSA signer, DSAEncoder encoder)21 protected DSABase( 22 Digest digest, 23 DSA signer, 24 DSAEncoder encoder) 25 { 26 this.digest = digest; 27 this.signer = signer; 28 this.encoder = encoder; 29 } 30 engineUpdate( byte b)31 protected void engineUpdate( 32 byte b) 33 throws SignatureException 34 { 35 digest.update(b); 36 } 37 engineUpdate( byte[] b, int off, int len)38 protected void engineUpdate( 39 byte[] b, 40 int off, 41 int len) 42 throws SignatureException 43 { 44 digest.update(b, off, len); 45 } 46 engineSign()47 protected byte[] engineSign() 48 throws SignatureException 49 { 50 byte[] hash = new byte[digest.getDigestSize()]; 51 52 digest.doFinal(hash, 0); 53 54 try 55 { 56 BigInteger[] sig = signer.generateSignature(hash); 57 58 return encoder.encode(sig[0], sig[1]); 59 } 60 catch (Exception e) 61 { 62 throw new SignatureException(e.toString()); 63 } 64 } 65 engineVerify( byte[] sigBytes)66 protected boolean engineVerify( 67 byte[] sigBytes) 68 throws SignatureException 69 { 70 byte[] hash = new byte[digest.getDigestSize()]; 71 72 digest.doFinal(hash, 0); 73 74 BigInteger[] sig; 75 76 try 77 { 78 sig = encoder.decode(sigBytes); 79 } 80 catch (Exception e) 81 { 82 throw new SignatureException("error decoding signature bytes."); 83 } 84 85 return signer.verifySignature(hash, sig[0], sig[1]); 86 } 87 engineSetParameter( AlgorithmParameterSpec params)88 protected void engineSetParameter( 89 AlgorithmParameterSpec params) 90 { 91 throw new UnsupportedOperationException("engineSetParameter unsupported"); 92 } 93 94 /** 95 * @deprecated replaced with <a href = "#engineSetParameter(java.security.spec.AlgorithmParameterSpec)"> 96 */ engineSetParameter( String param, Object value)97 protected void engineSetParameter( 98 String param, 99 Object value) 100 { 101 throw new UnsupportedOperationException("engineSetParameter unsupported"); 102 } 103 104 /** 105 * @deprecated 106 */ engineGetParameter( String param)107 protected Object engineGetParameter( 108 String param) 109 { 110 throw new UnsupportedOperationException("engineSetParameter unsupported"); 111 } 112 } 113