diff --git a/crypto/src/asn1/x9/ECNamedCurveTable.cs b/crypto/src/asn1/x9/ECNamedCurveTable.cs
index 317ef17b4..f91bded18 100644
--- a/crypto/src/asn1/x9/ECNamedCurveTable.cs
+++ b/crypto/src/asn1/x9/ECNamedCurveTable.cs
@@ -2,10 +2,12 @@
using System.Collections;
using Org.BouncyCastle.Asn1.Anssi;
+using Org.BouncyCastle.Asn1.CryptoPro;
using Org.BouncyCastle.Asn1.GM;
using Org.BouncyCastle.Asn1.Nist;
using Org.BouncyCastle.Asn1.Sec;
using Org.BouncyCastle.Asn1.TeleTrust;
+using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.Utilities.Collections;
@@ -44,6 +46,10 @@ namespace Org.BouncyCastle.Asn1.X9
}
if (ecP == null)
{
+ ecP = FromDomainParameters(ECGost3410NamedCurves.GetByName(name));
+ }
+ if (ecP == null)
+ {
ecP = GMNamedCurves.GetByName(name);
}
return ecP;
@@ -70,6 +76,10 @@ namespace Org.BouncyCastle.Asn1.X9
}
if (name == null)
{
+ name = ECGost3410NamedCurves.GetName(oid);
+ }
+ if (name == null)
+ {
name = GMNamedCurves.GetName(oid);
}
return name;
@@ -102,6 +112,10 @@ namespace Org.BouncyCastle.Asn1.X9
}
if (oid == null)
{
+ oid = ECGost3410NamedCurves.GetOid(name);
+ }
+ if (oid == null)
+ {
oid = GMNamedCurves.GetOid(name);
}
return oid;
@@ -134,6 +148,10 @@ namespace Org.BouncyCastle.Asn1.X9
}
if (ecP == null)
{
+ ecP = FromDomainParameters(ECGost3410NamedCurves.GetByOid(oid));
+ }
+ if (ecP == null)
+ {
ecP = GMNamedCurves.GetByOid(oid);
}
return ecP;
@@ -154,9 +172,15 @@ namespace Org.BouncyCastle.Asn1.X9
CollectionUtilities.AddRange(v, NistNamedCurves.Names);
CollectionUtilities.AddRange(v, TeleTrusTNamedCurves.Names);
CollectionUtilities.AddRange(v, AnssiNamedCurves.Names);
+ CollectionUtilities.AddRange(v, ECGost3410NamedCurves.Names);
CollectionUtilities.AddRange(v, GMNamedCurves.Names);
return v;
}
}
+
+ private static X9ECParameters FromDomainParameters(ECDomainParameters dp)
+ {
+ return dp == null ? null : new X9ECParameters(dp.Curve, dp.G, dp.N, dp.H, dp.GetSeed());
+ }
}
}
|