• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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