Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java b/core/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java
new file mode 100644
index 00000000..b0e89572
--- /dev/null
+++ b/core/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java
@@ -0,0 +1,57 @@
+package org.bouncycastle.crypto.tls;
+
+import org.bouncycastle.crypto.CipherParameters;
+import org.bouncycastle.crypto.CryptoException;
+import org.bouncycastle.crypto.DSA;
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.crypto.Signer;
+import org.bouncycastle.crypto.digests.NullDigest;
+import org.bouncycastle.crypto.digests.SHA1Digest;
+import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
+import org.bouncycastle.crypto.params.ParametersWithRandom;
+import org.bouncycastle.crypto.signers.DSADigestSigner;
+
+public abstract class TlsDSASigner
+ extends AbstractTlsSigner
+{
+
+ public byte[] generateRawSignature(AsymmetricKeyParameter privateKey, byte[] md5AndSha1)
+ throws CryptoException
+ {
+
+ // Note: Only use the SHA1 part of the hash
+ Signer signer = makeSigner(new NullDigest(), true,
+ new ParametersWithRandom(privateKey, this.context.getSecureRandom()));
+ signer.update(md5AndSha1, 16, 20);
+ return signer.generateSignature();
+ }
+
+ public boolean verifyRawSignature(byte[] sigBytes, AsymmetricKeyParameter publicKey, byte[] md5AndSha1)
+ throws CryptoException
+ {
+
+ // Note: Only use the SHA1 part of the hash
+ Signer signer = makeSigner(new NullDigest(), false, publicKey);
+ signer.update(md5AndSha1, 16, 20);
+ return signer.verifySignature(sigBytes);
+ }
+
+ public Signer createSigner(AsymmetricKeyParameter privateKey)
+ {
+ return makeSigner(new SHA1Digest(), true, new ParametersWithRandom(privateKey, this.context.getSecureRandom()));
+ }
+
+ public Signer createVerifyer(AsymmetricKeyParameter publicKey)
+ {
+ return makeSigner(new SHA1Digest(), false, publicKey);
+ }
+
+ protected Signer makeSigner(Digest d, boolean forSigning, CipherParameters cp)
+ {
+ Signer s = new DSADigestSigner(createDSAImpl(), d);
+ s.init(forSigning, cp);
+ return s;
+ }
+
+ protected abstract DSA createDSAImpl();
+}