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