diff --git a/crypto/src/cms/CMSSignedHelper.cs b/crypto/src/cms/CMSSignedHelper.cs
index 0ab7790d1..8df9e8f01 100644
--- a/crypto/src/cms/CMSSignedHelper.cs
+++ b/crypto/src/cms/CMSSignedHelper.cs
@@ -7,6 +7,7 @@ using Org.BouncyCastle.Asn1.Eac;
using Org.BouncyCastle.Asn1.Nist;
using Org.BouncyCastle.Asn1.Oiw;
using Org.BouncyCastle.Asn1.Pkcs;
+using Org.BouncyCastle.Asn1.Rosstandart;
using Org.BouncyCastle.Asn1.TeleTrust;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.X9;
@@ -82,15 +83,21 @@ namespace Org.BouncyCastle.Cms
AddEntries(EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_256, "SHA256", "RSA");
AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_1, "SHA1", "RSAandMGF1");
AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_256, "SHA256", "RSAandMGF1");
+ AddEntries(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, "GOST3411", "GOST3410");
+ AddEntries(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001, "GOST3411", "ECGOST3410");
+ AddEntries(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256, "GOST3411_2012_256", "ECGOST3410");
+ AddEntries(RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512, "GOST3411_2012_512", "ECGOST3410");
- m_encryptionAlgs.Add(X9ObjectIdentifiers.IdDsa.Id, "DSA");
+ m_encryptionAlgs.Add(X9ObjectIdentifiers.IdDsa.Id, "DSA");
m_encryptionAlgs.Add(PkcsObjectIdentifiers.RsaEncryption.Id, "RSA");
m_encryptionAlgs.Add(TeleTrusTObjectIdentifiers.TeleTrusTRsaSignatureAlgorithm.Id, "RSA");
m_encryptionAlgs.Add(X509ObjectIdentifiers.IdEARsa.Id, "RSA");
m_encryptionAlgs.Add(CmsSignedGenerator.EncryptionRsaPss, "RSAandMGF1");
m_encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x94.Id, "GOST3410");
m_encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x2001.Id, "ECGOST3410");
- m_encryptionAlgs.Add("1.3.6.1.4.1.5849.1.6.2", "ECGOST3410");
+ m_encryptionAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256.Id, "ECGOST3410");
+ m_encryptionAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512.Id, "ECGOST3410");
+ m_encryptionAlgs.Add("1.3.6.1.4.1.5849.1.6.2", "ECGOST3410");
m_encryptionAlgs.Add("1.3.6.1.4.1.5849.1.1.5", "GOST3410");
m_digestAlgs.Add(PkcsObjectIdentifiers.MD2.Id, "MD2");
@@ -112,15 +119,17 @@ namespace Org.BouncyCastle.Cms
m_digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, "RIPEMD256");
m_digestAlgs.Add(CryptoProObjectIdentifiers.GostR3411.Id, "GOST3411");
m_digestAlgs.Add("1.3.6.1.4.1.5849.1.2.1", "GOST3411");
+ m_digestAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256.Id, "GOST3411_2012_256");
+ m_digestAlgs.Add(RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512.Id, "GOST3411_2012_512");
- m_digestAliases.Add("SHA1", new string[]{ "SHA-1" });
+ m_digestAliases.Add("SHA1", new string[]{ "SHA-1" });
m_digestAliases.Add("SHA224", new string[]{ "SHA-224" });
m_digestAliases.Add("SHA256", new string[]{ "SHA-256" });
m_digestAliases.Add("SHA384", new string[]{ "SHA-384" });
m_digestAliases.Add("SHA512", new string[]{ "SHA-512" });
noParams.Add(CmsSignedGenerator.EncryptionDsa);
- // noParams.Add(EncryptionECDsa);
+ //noParams.Add(EncryptionECDsa);
noParams.Add(EncryptionECDsaWithSha1);
noParams.Add(EncryptionECDsaWithSha224);
noParams.Add(EncryptionECDsaWithSha256);
diff --git a/crypto/src/security/GeneratorUtilities.cs b/crypto/src/security/GeneratorUtilities.cs
index c48a71f2e..5e670b7c2 100644
--- a/crypto/src/security/GeneratorUtilities.cs
+++ b/crypto/src/security/GeneratorUtilities.cs
@@ -222,6 +222,8 @@ namespace Org.BouncyCastle.Security
AddKpgAlgorithm("ECGOST3410",
"ECGOST-3410",
"GOST-3410-2001");
+ AddKpgAlgorithm("ECGOST3410-2012",
+ "GOST-3410-2012");
AddKpgAlgorithm("Ed25519",
"Ed25519ctx",
"Ed25519ph",
@@ -358,7 +360,7 @@ namespace Org.BouncyCastle.Security
if (canonicalName == "DSA")
return new DsaKeyPairGenerator();
- // "EC", "ECDH", "ECDHC", "ECDSA", "ECGOST3410", "ECMQV"
+ // "EC", "ECDH", "ECDHC", "ECDSA", "ECGOST3410", "ECGOST3410-2012", "ECMQV"
if (Platform.StartsWith(canonicalName, "EC"))
return new ECKeyPairGenerator(canonicalName);
diff --git a/crypto/src/security/SignerUtilities.cs b/crypto/src/security/SignerUtilities.cs
index e42e217cc..e6210dad7 100644
--- a/crypto/src/security/SignerUtilities.cs
+++ b/crypto/src/security/SignerUtilities.cs
@@ -19,6 +19,7 @@ using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Signers;
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.Utilities.Collections;
+using Org.BouncyCastle.Asn1.Rosstandart;
namespace Org.BouncyCastle.Security
{
@@ -367,13 +368,29 @@ namespace Org.BouncyCastle.Security
AlgorithmMap["GOST-3410"] = "GOST3410";
AlgorithmMap["GOST-3410-94"] = "GOST3410";
AlgorithmMap["GOST3411WITHGOST3410"] = "GOST3410";
+ AlgorithmMap["GOST3411/GOST3410"] = "GOST3410";
AlgorithmMap[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94.Id] = "GOST3410";
AlgorithmMap["ECGOST-3410"] = "ECGOST3410";
- AlgorithmMap["ECGOST-3410-2001"] = "ECGOST3410";
+ AlgorithmMap["GOST-3410-2001"] = "ECGOST3410";
AlgorithmMap["GOST3411WITHECGOST3410"] = "ECGOST3410";
+ AlgorithmMap["GOST3411/ECGOST3410"] = "ECGOST3410";
AlgorithmMap[CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001.Id] = "ECGOST3410";
+ AlgorithmMap["GOST-3410-2012-256"] = "ECGOST3410-2012-256";
+ AlgorithmMap["GOST3411WITHECGOST3410-2012-256"] = "ECGOST3410-2012-256";
+ AlgorithmMap["GOST3411-2012-256WITHECGOST3410-2012-256"] = "ECGOST3410-2012-256";
+ AlgorithmMap["GOST3411-2012-256/ECGOST3410-2012-256"] = "ECGOST3410-2012-256";
+ AlgorithmMap[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256.Id] =
+ "ECGOST3410-2012-256";
+
+ AlgorithmMap["GOST-3410-2012-512"] = "ECGOST3410-2012-512";
+ AlgorithmMap["GOST3411WITHECGOST3410-2012-512"] = "ECGOST3410-2012-512";
+ AlgorithmMap["GOST3411-2012-512WITHECGOST3410-2012-512"] = "ECGOST3410-2012-512";
+ AlgorithmMap["GOST3411-2012-512/ECGOST3410-2012-512"] = "ECGOST3410-2012-512";
+ AlgorithmMap[RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512.Id] =
+ "ECGOST3410-2012-512";
+
AlgorithmMap["ED25519"] = "Ed25519";
AlgorithmMap[EdECObjectIdentifiers.id_Ed25519.Id] = "Ed25519";
AlgorithmMap["ED25519CTX"] = "Ed25519ctx";
@@ -439,6 +456,9 @@ namespace Org.BouncyCastle.Security
Oids["GOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94;
Oids["ECGOST3410"] = CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001;
+ Oids["ECGOST3410-2012-256"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_256;
+ Oids["ECGOST3410-2012-512"] = RosstandartObjectIdentifiers.id_tc26_signwithdigest_gost_3410_12_512;
+
Oids["Ed25519"] = EdECObjectIdentifiers.id_Ed25519;
Oids["Ed448"] = EdECObjectIdentifiers.id_Ed448;
@@ -618,6 +638,14 @@ namespace Org.BouncyCastle.Security
{
return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest());
}
+ if (mechanism.Equals("ECGOST3410-2012-256"))
+ {
+ return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411_2012_256Digest());
+ }
+ if (mechanism.Equals("ECGOST3410-2012-512"))
+ {
+ return new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411_2012_512Digest());
+ }
if (mechanism.Equals("SHA1WITHRSA/ISO9796-2"))
{
diff --git a/crypto/test/src/security/test/TestSignerUtil.cs b/crypto/test/src/security/test/TestSignerUtil.cs
index 2c569d030..57545cdc6 100644
--- a/crypto/test/src/security/test/TestSignerUtil.cs
+++ b/crypto/test/src/security/test/TestSignerUtil.cs
@@ -162,7 +162,7 @@ namespace Org.BouncyCastle.Security.Tests
signParams = dsaPriv;
verifyParams = dsaPub;
}
- else if (cipherName == "ECGOST3410")
+ else if (cipherName.StartsWith("ECGOST"))
{
signParams = ecGostPair.Private;
verifyParams = ecGostPair.Public;
|