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 'prov/src/main/java/org/spongycastle/jce/spec/GOST3410ParameterSpec.java')
-rw-r--r--prov/src/main/java/org/spongycastle/jce/spec/GOST3410ParameterSpec.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/prov/src/main/java/org/spongycastle/jce/spec/GOST3410ParameterSpec.java b/prov/src/main/java/org/spongycastle/jce/spec/GOST3410ParameterSpec.java
new file mode 100644
index 00000000..755a5284
--- /dev/null
+++ b/prov/src/main/java/org/spongycastle/jce/spec/GOST3410ParameterSpec.java
@@ -0,0 +1,133 @@
+package org.spongycastle.jce.spec;
+
+import java.security.spec.AlgorithmParameterSpec;
+
+import org.spongycastle.asn1.ASN1ObjectIdentifier;
+import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
+import org.spongycastle.asn1.cryptopro.GOST3410NamedParameters;
+import org.spongycastle.asn1.cryptopro.GOST3410ParamSetParameters;
+import org.spongycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
+import org.spongycastle.jce.interfaces.GOST3410Params;
+
+/**
+ * ParameterSpec for a GOST 3410-94 key.
+ */
+public class GOST3410ParameterSpec
+ implements AlgorithmParameterSpec, GOST3410Params
+{
+ private GOST3410PublicKeyParameterSetSpec keyParameters;
+ private String keyParamSetOID;
+ private String digestParamSetOID;
+ private String encryptionParamSetOID;
+
+ public GOST3410ParameterSpec(
+ String keyParamSetID,
+ String digestParamSetOID,
+ String encryptionParamSetOID)
+ {
+ GOST3410ParamSetParameters ecP = null;
+
+ try
+ {
+ ecP = GOST3410NamedParameters.getByOID(new ASN1ObjectIdentifier(keyParamSetID));
+ }
+ catch (IllegalArgumentException e)
+ {
+ ASN1ObjectIdentifier oid = GOST3410NamedParameters.getOID(keyParamSetID);
+ if (oid != null)
+ {
+ keyParamSetID = oid.getId();
+ ecP = GOST3410NamedParameters.getByOID(oid);
+ }
+ }
+
+ if (ecP == null)
+ {
+ throw new IllegalArgumentException("no key parameter set for passed in name/OID.");
+ }
+
+ this.keyParameters = new GOST3410PublicKeyParameterSetSpec(
+ ecP.getP(),
+ ecP.getQ(),
+ ecP.getA());
+
+ this.keyParamSetOID = keyParamSetID;
+ this.digestParamSetOID = digestParamSetOID;
+ this.encryptionParamSetOID = encryptionParamSetOID;
+ }
+
+ public GOST3410ParameterSpec(
+ String keyParamSetID,
+ String digestParamSetOID)
+ {
+ this(keyParamSetID, digestParamSetOID, null);
+ }
+
+ public GOST3410ParameterSpec(
+ String keyParamSetID)
+ {
+ this(keyParamSetID, CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet.getId(), null);
+ }
+
+ public GOST3410ParameterSpec(
+ GOST3410PublicKeyParameterSetSpec spec)
+ {
+ this.keyParameters = spec;
+ this.digestParamSetOID = CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet.getId();
+ this.encryptionParamSetOID = null;
+ }
+
+ public String getPublicKeyParamSetOID()
+ {
+ return this.keyParamSetOID;
+ }
+
+ public GOST3410PublicKeyParameterSetSpec getPublicKeyParameters()
+ {
+ return keyParameters;
+ }
+
+ public String getDigestParamSetOID()
+ {
+ return this.digestParamSetOID;
+ }
+
+ public String getEncryptionParamSetOID()
+ {
+ return this.encryptionParamSetOID;
+ }
+
+ public boolean equals(Object o)
+ {
+ if (o instanceof GOST3410ParameterSpec)
+ {
+ GOST3410ParameterSpec other = (GOST3410ParameterSpec)o;
+
+ return this.keyParameters.equals(other.keyParameters)
+ && this.digestParamSetOID.equals(other.digestParamSetOID)
+ && (this.encryptionParamSetOID == other.encryptionParamSetOID
+ || (this.encryptionParamSetOID != null && this.encryptionParamSetOID.equals(other.encryptionParamSetOID)));
+ }
+
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return this.keyParameters.hashCode() ^ this.digestParamSetOID.hashCode()
+ ^ (this.encryptionParamSetOID != null ? this.encryptionParamSetOID.hashCode() : 0);
+ }
+
+ public static GOST3410ParameterSpec fromPublicKeyAlg(
+ GOST3410PublicKeyAlgParameters params)
+ {
+ if (params.getEncryptionParamSet() != null)
+ {
+ return new GOST3410ParameterSpec(params.getPublicKeyParamSet().getId(), params.getDigestParamSet().getId(), params.getEncryptionParamSet().getId());
+ }
+ else
+ {
+ return new GOST3410ParameterSpec(params.getPublicKeyParamSet().getId(), params.getDigestParamSet().getId());
+ }
+ }
+}