14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.asymmetric.util; 28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 38212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.math.BigInteger; 48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.SignatureException; 58212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.SignatureSpi; 68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.spec.AlgorithmParameterSpec; 78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.x509.X509ObjectIdentifiers; 108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.DSA; 118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.Digest; 128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic abstract class DSABase 148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom extends SignatureSpi 158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom implements PKCSObjectIdentifiers, X509ObjectIdentifiers 168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected Digest digest; 188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected DSA signer; 198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected DSAEncoder encoder; 208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected DSABase( 228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom Digest digest, 238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom DSA signer, 248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom DSAEncoder encoder) 258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.digest = digest; 278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.signer = signer; 288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.encoder = encoder; 298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected void engineUpdate( 328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte b) 338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throws SignatureException 348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom digest.update(b); 368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected void engineUpdate( 398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte[] b, 408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom int off, 418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom int len) 428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throws SignatureException 438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom digest.update(b, off, len); 458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected byte[] engineSign() 488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throws SignatureException 498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte[] hash = new byte[digest.getDigestSize()]; 518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom digest.doFinal(hash, 0); 538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom try 558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger[] sig = signer.generateSignature(hash); 578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return encoder.encode(sig[0], sig[1]); 598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom catch (Exception e) 618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throw new SignatureException(e.toString()); 638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 658212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected boolean engineVerify( 678212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte[] sigBytes) 688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throws SignatureException 698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte[] hash = new byte[digest.getDigestSize()]; 718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom digest.doFinal(hash, 0); 738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger[] sig; 758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom try 778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom sig = encoder.decode(sigBytes); 798212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom catch (Exception e) 818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throw new SignatureException("error decoding signature bytes."); 838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return signer.verifySignature(hash, sig[0], sig[1]); 868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected void engineSetParameter( 898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom AlgorithmParameterSpec params) 908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throw new UnsupportedOperationException("engineSetParameter unsupported"); 928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @deprecated replaced with <a href = "#engineSetParameter(java.security.spec.AlgorithmParameterSpec)"> 968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected void engineSetParameter( 988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom String param, 998212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom Object value) 1008212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1018212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throw new UnsupportedOperationException("engineSetParameter unsupported"); 1028212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1038212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1048212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 1058212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @deprecated 1068212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 1078212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom protected Object engineGetParameter( 1088212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom String param) 1098212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom throw new UnsupportedOperationException("engineSetParameter unsupported"); 1118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 113