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 'pkix/src/main/java/org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.java')
-rw-r--r--pkix/src/main/java/org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.java234
1 files changed, 0 insertions, 234 deletions
diff --git a/pkix/src/main/java/org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.java b/pkix/src/main/java/org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.java
deleted file mode 100644
index 380ec143..00000000
--- a/pkix/src/main/java/org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package org.bouncycastle.eac.operator.jcajce;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.util.Arrays;
-import java.util.Hashtable;
-
-import org.bouncycastle.asn1.ASN1Integer;
-import org.bouncycastle.asn1.ASN1ObjectIdentifier;
-import org.bouncycastle.asn1.ASN1Sequence;
-import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
-import org.bouncycastle.eac.operator.EACSigner;
-import org.bouncycastle.operator.OperatorCreationException;
-import org.bouncycastle.operator.OperatorStreamException;
-import org.bouncycastle.operator.RuntimeOperatorException;
-
-public class JcaEACSignerBuilder
-{
- private static final Hashtable sigNames = new Hashtable();
-
- static
- {
- sigNames.put("SHA1withRSA", EACObjectIdentifiers.id_TA_RSA_v1_5_SHA_1);
- sigNames.put("SHA256withRSA", EACObjectIdentifiers.id_TA_RSA_v1_5_SHA_256);
- sigNames.put("SHA1withRSAandMGF1", EACObjectIdentifiers.id_TA_RSA_PSS_SHA_1);
- sigNames.put("SHA256withRSAandMGF1", EACObjectIdentifiers.id_TA_RSA_PSS_SHA_256);
- sigNames.put("SHA512withRSA", EACObjectIdentifiers.id_TA_RSA_v1_5_SHA_512);
- sigNames.put("SHA512withRSAandMGF1", EACObjectIdentifiers.id_TA_RSA_PSS_SHA_512);
-
- sigNames.put("SHA1withECDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
- sigNames.put("SHA224withECDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
- sigNames.put("SHA256withECDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
- sigNames.put("SHA384withECDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_384);
- sigNames.put("SHA512withECDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_512);
- }
-
- private EACHelper helper = new DefaultEACHelper();
-
- public JcaEACSignerBuilder setProvider(String providerName)
- {
- this.helper = new NamedEACHelper(providerName);
-
- return this;
- }
-
- public JcaEACSignerBuilder setProvider(Provider provider)
- {
- this.helper = new ProviderEACHelper(provider);
-
- return this;
- }
-
- public EACSigner build(String algorithm, PrivateKey privKey)
- throws OperatorCreationException
- {
- return build((ASN1ObjectIdentifier)sigNames.get(algorithm), privKey);
- }
-
- public EACSigner build(final ASN1ObjectIdentifier usageOid, PrivateKey privKey)
- throws OperatorCreationException
- {
- Signature sig;
- try
- {
- sig = helper.getSignature(usageOid);
-
- sig.initSign(privKey);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new OperatorCreationException("unable to find algorithm: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new OperatorCreationException("unable to find provider: " + e.getMessage(), e);
- }
- catch (InvalidKeyException e)
- {
- throw new OperatorCreationException("invalid key: " + e.getMessage(), e);
- }
-
- final SignatureOutputStream sigStream = new SignatureOutputStream(sig);
-
- return new EACSigner()
- {
- public ASN1ObjectIdentifier getUsageIdentifier()
- {
- return usageOid;
- }
-
- public OutputStream getOutputStream()
- {
- return sigStream;
- }
-
- public byte[] getSignature()
- {
- try
- {
- byte[] signature = sigStream.getSignature();
-
- if (usageOid.on(EACObjectIdentifiers.id_TA_ECDSA))
- {
- return reencode(signature);
- }
-
- return signature;
- }
- catch (SignatureException e)
- {
- throw new RuntimeOperatorException("exception obtaining signature: " + e.getMessage(), e);
- }
- }
- };
- }
-
- public static int max(int el1, int el2)
- {
- return el1 > el2 ? el1 : el2;
- }
-
- private static byte[] reencode(byte[] rawSign)
- {
- ASN1Sequence sData = ASN1Sequence.getInstance(rawSign);
-
- BigInteger r = ASN1Integer.getInstance(sData.getObjectAt(0)).getValue();
- BigInteger s = ASN1Integer.getInstance(sData.getObjectAt(1)).getValue();
-
- byte[] rB = r.toByteArray();
- byte[] sB = s.toByteArray();
-
- int rLen = unsignedIntLength(rB);
- int sLen = unsignedIntLength(sB);
-
- byte[] ret;
- int len = max(rLen, sLen);
-
- ret = new byte[len * 2];
- Arrays.fill(ret, (byte)0);
-
- copyUnsignedInt(rB, ret, len - rLen);
- copyUnsignedInt(sB, ret, 2 * len - sLen);
-
- return ret;
- }
-
- private static int unsignedIntLength(byte[] i)
- {
- int len = i.length;
- if (i[0] == 0)
- {
- len--;
- }
-
- return len;
- }
-
- private static void copyUnsignedInt(byte[] src, byte[] dst, int offset)
- {
- int len = src.length;
- int readoffset = 0;
- if (src[0] == 0)
- {
- len--;
- readoffset = 1;
- }
-
- System.arraycopy(src, readoffset, dst, offset, len);
- }
-
- private class SignatureOutputStream
- extends OutputStream
- {
- private Signature sig;
-
- SignatureOutputStream(Signature sig)
- {
- this.sig = sig;
- }
-
- public void write(byte[] bytes, int off, int len)
- throws IOException
- {
- try
- {
- sig.update(bytes, off, len);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(byte[] bytes)
- throws IOException
- {
- try
- {
- sig.update(bytes);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(int b)
- throws IOException
- {
- try
- {
- sig.update((byte)b);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- byte[] getSignature()
- throws SignatureException
- {
- return sig.sign();
- }
- }
-}