//private static ECDomainParameters GetCurveParameters( private static X9ECParameters GetCurveParameters( string name) { // TODO ECGost3410NamedCurves support (returns ECDomainParameters though) X9ECParameters ecP = X962NamedCurves.GetByName(name); if (ecP == null) { ecP = SecNamedCurves.GetByName(name); if (ecP == null) { ecP = NistNamedCurves.GetByName(name); if (ecP == null) { ecP = TeleTrusTNamedCurves.GetByName(name); if (ecP == null) { throw new Exception("unknown curve name: " + name); } } } } //return new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); return(ecP); }
// private static readonly Hashtable CurveNames = new Hashtable(); // private static readonly Hashtable CurveAliases = new Hashtable(); // // static NamedCurveTest() // { // CurveNames.Add("prime192v1", "prime192v1"); // X9.62 // CurveNames.Add("sect571r1", "sect571r1"); // sec // CurveNames.Add("secp224r1", "secp224r1"); // CurveNames.Add("B-409", SecNamedCurves.GetName(NistNamedCurves.GetOid("B-409"))); // nist // CurveNames.Add("P-521", SecNamedCurves.GetName(NistNamedCurves.GetOid("P-521"))); // CurveNames.Add("brainpoolp160r1", "brainpoolp160r1"); // TeleTrusT // // CurveAliases.Add("secp192r1", "prime192v1"); // CurveAliases.Add("secp256r1", "prime256v1"); // } private static ECDomainParameters GetCurveParameters( string name) { ECDomainParameters ecdp = ECGost3410NamedCurves.GetByName(name); if (ecdp != null) { return(ecdp); } X9ECParameters ecP = X962NamedCurves.GetByName(name); if (ecP == null) { ecP = SecNamedCurves.GetByName(name); if (ecP == null) { ecP = NistNamedCurves.GetByName(name); if (ecP == null) { ecP = TeleTrusTNamedCurves.GetByName(name); if (ecP == null) { throw new Exception("unknown curve name: " + name); } } } } return(new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed())); }
public void TestECNR192bitPrime() { BigInteger r = new BigInteger("2474388605162950674935076940284692598330235697454145648371"); BigInteger s = new BigInteger("2997192822503471356158280167065034437828486078932532073836"); byte[] kData = new BigInteger("dcc5d1f1020906df2782360d36b2de7a17ece37d503784af", 16).ToByteArrayUnsigned(); SecureRandom k = FixedSecureRandom.From(kData); X9ECParameters p = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime192v1); ECDomainParameters spec = new ECDomainParameters(p.Curve, p.G, p.N, p.H); ECCurve curve = spec.Curve; ECPrivateKeyParameters priKey = new ECPrivateKeyParameters( new BigInteger("651056770906015076056810763456358567190100156695615665659"), // d spec); ECPublicKeyParameters pubKey = new ECPublicKeyParameters( curve.DecodePoint(Hex.Decode("0262B12D60690CDCF330BABAB6E69763B471F994DD702D16A5")), // Q spec); ISigner sgr = SignerUtilities.GetSigner("SHA1withECNR"); byte[] message = new byte[] { (byte)'a', (byte)'b', (byte)'c' }; checkSignature(192, priKey, pubKey, sgr, k, message, r, s); }
public void TestECNR239bitPrime() { BigInteger r = new BigInteger("308636143175167811492623515537541734843573549327605293463169625072911693"); BigInteger s = new BigInteger("852401710738814635664888632022555967400445256405412579597015412971797143"); byte[] kData = new BigInteger("700000017569056646655505781757157107570501575775705779575555657156756655").ToByteArrayUnsigned(); SecureRandom k = FixedSecureRandom.From(kData); X9ECParameters p = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime239v1); ECDomainParameters spec = new ECDomainParameters(p.Curve, p.G, p.N, p.H); ECCurve curve = spec.Curve; ECPrivateKeyParameters priKey = new ECPrivateKeyParameters( new BigInteger("876300101507107567501066130761671078357010671067781776716671676178726717"), // d spec); ECPublicKeyParameters pubKey = new ECPublicKeyParameters( curve.DecodePoint(Hex.Decode("025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70")), // Q spec); ISigner sgr = SignerUtilities.GetSigner("SHA1withECNR"); byte[] message = new byte[] { (byte)'a', (byte)'b', (byte)'c' }; checkSignature(239, priKey, pubKey, sgr, k, message, r, s); }
public static X509Certificate2 GenerateSelfSignedCertEcdsa() { var randomGenerator = new CryptoApiRandomGenerator(); var random = new SecureRandom(randomGenerator); var certificateGenerator = new X509V3CertificateGenerator(); var serialNumber = BigIntegers.CreateRandomInRange( BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random); certificateGenerator.SetSerialNumber(serialNumber); const string signatureAlgorithm = "SHA256withECDSA"; certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm); var subjectDN = new X509Name("CN=simpletorrent"); var issuerDN = subjectDN; certificateGenerator.SetIssuerDN(issuerDN); certificateGenerator.SetSubjectDN(subjectDN); var notBefore = DateTime.UtcNow.Date.AddHours(-24); var notAfter = notBefore.AddYears(1000); certificateGenerator.SetNotBefore(notBefore); certificateGenerator.SetNotAfter(notAfter); ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(X962NamedCurves.GetOid("prime256v1"), random); var keyPairGenerator = new ECKeyPairGenerator(); keyPairGenerator.Init(genParam); var subjectKeyPair = keyPairGenerator.GenerateKeyPair(); certificateGenerator.SetPublicKey(subjectKeyPair.Public); var issuerKeyPair = subjectKeyPair; var certificate = certificateGenerator.Generate(issuerKeyPair.Private, random); var store = new Pkcs12Store(); string friendlyName = certificate.SubjectDN.ToString(); var certificateEntry = new X509CertificateEntry(certificate); store.SetCertificateEntry(friendlyName, certificateEntry); store.SetKeyEntry(friendlyName, new AsymmetricKeyEntry(subjectKeyPair.Private), new[] { certificateEntry }); string password = "******"; var stream = new MemoryStream(); store.Save(stream, password.ToCharArray(), random); //mono bug #1660 fix -> convert to definite-length encoding byte[] pfx = Pkcs12Utilities.ConvertToDefiniteLength(stream.ToArray(), password.ToCharArray()); var convertedCertificate = new X509Certificate2( pfx, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); return(convertedCertificate); }
internal static X9ECParameters FindECCurveByOid(DerObjectIdentifier oid) { // TODO ECGost3410NamedCurves support (returns ECDomainParameters though) return(X962NamedCurves.GetByOid(oid) ?? (SecNamedCurves.GetByOid(oid) ?? (NistNamedCurves.GetByOid(oid) ?? TeleTrusTNamedCurves.GetByOid(oid)))); }
private static AsymmetricCipherKeyPair GenerateKeyPairEcc() { var oid = X962NamedCurves.GetOid("prime256v1"); var generator = new ECKeyPairGenerator(); var genParam = new ECKeyGenerationParameters(oid, RandomUtil.SecureRandomBc); generator.Init(genParam); return(generator.GenerateKeyPair()); }
private void EncodePrivateKey() { X9ECParameters ecP = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime239v3); // // named curve // X962Parameters _params = new X962Parameters(X9ObjectIdentifiers.Prime192v1); X9ECPoint pPoint = new X9ECPoint( new FPPoint(ecP.Curve, new FPFieldElement(BigInteger.Two, BigInteger.One), new FPFieldElement(BigInteger.ValueOf(4), BigInteger.ValueOf(3)), true)); Asn1OctetString p = (Asn1OctetString)pPoint.ToAsn1Object(); if (p == null) { Fail("failed to convert to ASN.1"); } PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), new ECPrivateKeyStructure(BigInteger.Ten).ToAsn1Object()); if (!Arrays.AreEqual(info.GetEncoded(), namedPriv)) { Fail("failed private named generation"); } Asn1Object o = Asn1Object.FromByteArray(namedPriv); if (!info.Equals(o)) { Fail("failed private named equality"); } // // explicit curve parameters // _params = new X962Parameters(ecP); info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), new ECPrivateKeyStructure(BigInteger.ValueOf(20)).ToAsn1Object()); if (!Arrays.AreEqual(info.GetEncoded(), expPriv)) { Fail("failed private explicit generation"); } o = Asn1Object.FromByteArray(expPriv); if (!info.Equals(o)) { Fail("failed private explicit equality"); } }
/// <summary> /// Get the curve from an EC key blob /// </summary> /// <param name="magic">Magic number</param> /// <returns>Curve </returns> private static X9ECParameters getCurve(int magic, CurveNamespace nameSpace) { switch (magic) { case (int)KeyBlobMagicNumber.ECDHPublicP256: case (int)KeyBlobMagicNumber.ECDsaPublicP256: switch (nameSpace) { case CurveNamespace.X962: return(X962NamedCurves.GetByName("prime256v1")); case CurveNamespace.NIST: return(NistNamedCurves.GetByName("P-256")); case CurveNamespace.SEC: return(SecNamedCurves.GetByName("SecP256r1")); } break; case (int)KeyBlobMagicNumber.ECDHPublicP384: case (int)KeyBlobMagicNumber.ECDsaPublicP384: switch (nameSpace) { case CurveNamespace.X962: // These aren't in the BC list return(X962NamedCurves.GetByName("prime384v1")); case CurveNamespace.NIST: return(NistNamedCurves.GetByName("P-384")); case CurveNamespace.SEC: return(SecNamedCurves.GetByName("SecP384r1")); } break; case (int)KeyBlobMagicNumber.ECDHPublicP521: case (int)KeyBlobMagicNumber.ECDsaPublicP521: switch (nameSpace) { case CurveNamespace.X962: // These aren't in the BC list return(X962NamedCurves.GetByName("prime521v1")); case CurveNamespace.NIST: return(NistNamedCurves.GetByName("P-521")); case CurveNamespace.SEC: return(SecNamedCurves.GetByName("SecP521r1")); } break; } return(null); }
public static ECPrivateKeyParameters PrivateKeyFromBytes(byte[] key) { /* * Convert public_key into a public key object * The public key comprises two co-ordinates X followed by Y, both 32 bytes */ var bi_key = new BigInteger(1, key); // the key needs to relate to a specific curve X9ECParameters ecP = X962NamedCurves.GetByName("prime256v1"); var ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); return(new ECPrivateKeyParameters("ECDSA", bi_key, ecSpec)); }
public void Init( KeyGenerationParameters parameters) { if (parameters is ECKeyGenerationParameters) { ECKeyGenerationParameters ecP = (ECKeyGenerationParameters)parameters; if (ecP.PublicKeyParamSet != null) { if (algorithm != "ECGOST3410") { throw new ArgumentException("parameters invalid for algorithm: " + algorithm, "parameters"); } this.publicKeyParamSet = ecP.PublicKeyParamSet; } this.parameters = ecP.DomainParameters; } else { DerObjectIdentifier oid; switch (parameters.Strength) { case 192: oid = X9ObjectIdentifiers.Prime192v1; break; case 239: oid = X9ObjectIdentifiers.Prime239v1; break; case 256: oid = X9ObjectIdentifiers.Prime256v1; break; default: throw new InvalidParameterException("unknown key size."); } X9ECParameters ecps = X962NamedCurves.GetByOid(oid); this.parameters = new ECDomainParameters( ecps.Curve, ecps.G, ecps.N, ecps.H, ecps.GetSeed()); } this.random = parameters.Random; }
public void NoncompliantGetByName(string arg) { X9ECParameters curve = null; // Elliptic curves always have the key length as part of their names. Rule implementation looks for this // key length pattern, so that all curves with a key length smaller than 224 will raise an issue curve = SecNamedCurves.GetByName("secp192k1"); // Noncompliant {{Use a key length of at least 224 bits for EC cipher algorithm.}} curve = SecNamedCurves.GetByName("secp192r1"); // Noncompliant curve = SecNamedCurves.GetByName("sect163k1"); // Noncompliant curve = SecNamedCurves.GetByName("sect163r1"); // Noncompliant curve = SecNamedCurves.GetByName("sect163r2"); // Noncompliant curve = SecNamedCurves.GetByName("sect193r1"); // Noncompliant curve = SecNamedCurves.GetByName("sect193r2"); // Noncompliant curve = X962NamedCurves.GetByName("prime192v1"); // Noncompliant curve = X962NamedCurves.GetByName("prime192v2"); // Noncompliant curve = X962NamedCurves.GetByName("prime192v3"); // Noncompliant curve = X962NamedCurves.GetByName("c2pnb163v1"); // Noncompliant curve = X962NamedCurves.GetByName("c2pnb163v2"); // Noncompliant curve = X962NamedCurves.GetByName("c2pnb163v3"); // Noncompliant curve = X962NamedCurves.GetByName("c2pnb176w1"); // Noncompliant curve = X962NamedCurves.GetByName("c2tnb191v1"); // Noncompliant curve = X962NamedCurves.GetByName("c2tnb191v2"); // Noncompliant curve = X962NamedCurves.GetByName("c2tnb191v3"); // Noncompliant curve = X962NamedCurves.GetByName("c2pnb208w1"); // Noncompliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp160r1"); // Noncompliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp160t1"); // Noncompliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp192r1"); // Noncompliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp192t1"); // Noncompliant curve = NistNamedCurves.GetByName("B-163"); // Noncompliant curve = NistNamedCurves.GetByName("K-163"); // Noncompliant curve = NistNamedCurves.GetByName("P-192"); // Noncompliant curve = ECNamedCurveTable.GetByName("secp192k1"); // Noncompliant curve = ECNamedCurveTable.GetByName("c2pnb208w1"); // Noncompliant curve = ECNamedCurveTable.GetByName("brainpoolp192t1"); // Noncompliant curve = ECNamedCurveTable.GetByName("B-163"); // Noncompliant ECNamedCurveTable.GetByName(arg); // Compliant var variable = "RandomString"; ECNamedCurveTable.GetByName(variable); // Compliant variable = "B-163"; ECNamedCurveTable.GetByName(variable); // Noncompliant }
private void EncodePrivateKey() { X9ECParameters ecP = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime192v1); // // named curve // X962Parameters _params = new X962Parameters(X9ObjectIdentifiers.Prime192v1); PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), new ECPrivateKeyStructure(ecP.N.BitLength, BigInteger.Ten).ToAsn1Object()); if (!Arrays.AreEqual(info.GetEncoded(), namedPriv)) { Fail("failed private named generation"); } Asn1Object o = Asn1Object.FromByteArray(namedPriv); if (!info.Equals(o)) { Fail("failed private named equality"); } // // explicit curve parameters // ecP = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime239v3); _params = new X962Parameters(ecP); info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), new ECPrivateKeyStructure(ecP.N.BitLength, BigInteger.ValueOf(20)).ToAsn1Object()); if (!Arrays.AreEqual(info.GetEncoded(), expPriv)) { Fail("failed private explicit generation"); } o = Asn1Object.FromByteArray(expPriv); if (!info.Equals(o)) { Fail("failed private explicit equality"); } }
public static X9ECParameters GetByOid(DerObjectIdentifier oid) { X9ECParameters byOid = X962NamedCurves.GetByOid(oid); if (byOid == null) { byOid = SecNamedCurves.GetByOid(oid); } if (byOid == null) { byOid = TeleTrusTNamedCurves.GetByOid(oid); } if (byOid == null) { byOid = AnssiNamedCurves.GetByOid(oid); } return(byOid); }
public void TestDeserializeEcdsaFromPrivate() { var formatter = new PemKeyFormatter(); var key = formatter.Deserialize(Resources.ecdsa_1); Assert.That(key.Version, Is.EqualTo(SshVersion.SSH2)); Assert.That(key.Algorithm, Is.EqualTo(PublicKeyAlgorithm.ECDSA_SHA2_NISTP256)); var publicKey = (ECPublicKeyParameters)key.GetPublicKeyParameters(); var privateKey = (ECPrivateKeyParameters)key.GetPrivateKeyParameters(); var param_curve = X962NamedCurves.GetByName(Resources.ecdsa_1_param_curve.Trim()); var param_priv = new BigInteger(Resources.ecdsa_1_param_priv.Trim(), 16); var param_pub = new BigInteger(Resources.ecdsa_1_param_pub.Trim(), 16); Assert.That(privateKey.Parameters.Curve, Is.EqualTo(param_curve.Curve)); Assert.That(privateKey.D, Is.EqualTo(param_priv)); // TODO: figure out how to convert public key to BigInteger that matches param_pub //Assert.That(publicKey.Q, Is.EqualTo(param_pub)); }
public void TestDeserializeEcdsaFromNewForamt() { // This is actaully exactly the same as TestDeserializeEcdsaFromPrivate var formatter = new PemKeyFormatter(); var key = formatter.Deserialize(Resources.ecdsa_n); Assert.That(key.Version, Is.EqualTo(SshVersion.SSH2)); Assert.That(key.Algorithm, Is.EqualTo(PublicKeyAlgorithm.ECDSA_SHA2_NISTP256)); var publicKey = (ECPublicKeyParameters)key.GetPublicKeyParameters(); var privateKey = (ECPrivateKeyParameters)key.GetPrivateKeyParameters(); var param_curve = X962NamedCurves.GetByName(Resources.ecdsa_1_param_curve.Trim()); var param_priv = new BigInteger(Resources.ecdsa_1_param_priv.Trim(), 16); var param_pub = new BigInteger(Resources.ecdsa_1_param_pub.Trim(), 16); Assert.That(privateKey.Parameters.Curve, Is.EqualTo(param_curve.Curve)); Assert.That(privateKey.D, Is.EqualTo(param_priv)); var q = new BigInteger(publicKey.Q.GetEncoded()); Assert.That(q, Is.EqualTo(param_pub)); }
public void TestDeserializeEcdsaFromNewFormatWithPassphrase() { var formatter = new OpensshPrivateKeyFormatter(); formatter.GetPassphraseCallbackMethod = passphraseCallback; var key = formatter.Deserialize(Resources.ecdsa_n_pw); Assert.That(key.Version, Is.EqualTo(SshVersion.SSH2)); Assert.That(key.Algorithm, Is.EqualTo(PublicKeyAlgorithm.ECDSA_SHA2_NISTP256)); var publicKey = (ECPublicKeyParameters)key.GetPublicKeyParameters(); var privateKey = (ECPrivateKeyParameters)key.GetPrivateKeyParameters(); var param_curve = X962NamedCurves.GetByName(Resources.ecdsa_1_param_curve.Trim()); var param_priv = new BigInteger(Resources.ecdsa_1_param_priv.Trim(), 16); var param_pub = new BigInteger(Resources.ecdsa_1_param_pub.Trim(), 16); Assert.That(privateKey.Parameters.Curve, Is.EqualTo(param_curve.Curve)); Assert.That(privateKey.D, Is.EqualTo(param_priv)); var q = new BigInteger(publicKey.Q.GetEncoded()); Assert.That(q, Is.EqualTo(param_pub)); }
// private static ECDomainParameters GetCurveParameters( private static X9ECParameters GetCurveParameters( string name) { X9ECParameters ecP = X962NamedCurves.GetByName(name); if (ecP == null) { ecP = SecNamedCurves.GetByName(name); if (ecP == null) { ecP = NistNamedCurves.GetByName(name); if (ecP == null) { throw new Exception("unknown curve name: " + name); } } } // return new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); return(ecP); }
public static X9ECParameters GetByName(string name) { X9ECParameters byName = X962NamedCurves.GetByName(name); if (byName == null) { byName = SecNamedCurves.GetByName(name); } if (byName == null) { byName = NistNamedCurves.GetByName(name); } if (byName == null) { byName = TeleTrusTNamedCurves.GetByName(name); } if (byName == null) { byName = AnssiNamedCurves.GetByName(name); } return(byName); }
public static DerObjectIdentifier GetOid(string name) { DerObjectIdentifier oid = X962NamedCurves.GetOid(name); if (oid == null) { oid = SecNamedCurves.GetOid(name); } if (oid == null) { oid = NistNamedCurves.GetOid(name); } if (oid == null) { oid = TeleTrusTNamedCurves.GetOid(name); } if (oid == null) { oid = AnssiNamedCurves.GetOid(name); } return(oid); }
public static string GetName(DerObjectIdentifier oid) { string name = X962NamedCurves.GetName(oid); if (name == null) { name = SecNamedCurves.GetName(oid); } if (name == null) { name = NistNamedCurves.GetName(oid); } if (name == null) { name = TeleTrusTNamedCurves.GetName(oid); } if (name == null) { name = AnssiNamedCurves.GetName(oid); } return(name); }
internal static X9ECParameters FindECCurveByOid(DerObjectIdentifier oid) { // TODO ECGost3410NamedCurves support (returns ECDomainParameters though) X9ECParameters ecP = X962NamedCurves.GetByOid(oid); if (ecP == null) { ecP = SecNamedCurves.GetByOid(oid); if (ecP == null) { ecP = NistNamedCurves.GetByOid(oid); if (ecP == null) { ecP = TeleTrusTNamedCurves.GetByOid(oid); } } } return(ecP); }
private void EncodePublicKey() { X9ECParameters ecP = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime239v3); if (X9IntegerConverter.GetByteLength(ecP.Curve) != 30) { Fail("wrong byte length reported for curve"); } if (ecP.Curve.FieldSize != 239) { Fail("wrong field size reported for curve"); } // // named curve // X962Parameters _params = new X962Parameters(X9ObjectIdentifiers.Prime192v1); X9ECPoint pPoint = new X9ECPoint( new FPPoint(ecP.Curve, new FPFieldElement(BigInteger.Two, BigInteger.One), new FPFieldElement(BigInteger.ValueOf(4), BigInteger.ValueOf(3)), true)); Asn1OctetString p = (Asn1OctetString)pPoint.ToAsn1Object(); if (p == null) { Fail("failed to convert to ASN.1"); } SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), p.GetOctets()); if (!Arrays.AreEqual(info.GetEncoded(), namedPub)) { Fail("failed public named generation"); } Asn1Object o = Asn1Object.FromByteArray(namedPub); if (!info.Equals(o)) { Fail("failed public named equality"); } // // explicit curve parameters // _params = new X962Parameters(ecP); info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), p.GetOctets()); if (!Arrays.AreEqual(info.GetEncoded(), expPub)) { Fail("failed public explicit generation"); } o = Asn1Object.FromByteArray(expPub); if (!info.Equals(o)) { Fail("failed public explicit equality"); } }
public static AsymmetricKeyParameter CreateKey( SubjectPublicKeyInfo keyInfo) { AlgorithmIdentifier algID = keyInfo.AlgorithmID; if (algID.ObjectID.Equals(PkcsObjectIdentifiers.RsaEncryption) || algID.ObjectID.Equals(X509ObjectIdentifiers.IdEARsa)) { RsaPublicKeyStructure pubKey = RsaPublicKeyStructure.GetInstance(keyInfo.GetPublicKey()); return(new RsaKeyParameters(false, pubKey.Modulus, pubKey.PublicExponent)); } else if (algID.ObjectID.Equals(PkcsObjectIdentifiers.DhKeyAgreement) || algID.ObjectID.Equals(X9ObjectIdentifiers.DHPublicNumber)) { DHParameter para = new DHParameter((Asn1Sequence)keyInfo.AlgorithmID.Parameters); DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); return(new DHPublicKeyParameters(derY.Value, new DHParameters(para.P, para.G))); } else if (algID.ObjectID.Equals(OiwObjectIdentifiers.ElGamalAlgorithm)) { ElGamalParameter para = new ElGamalParameter((Asn1Sequence)keyInfo.AlgorithmID.Parameters); DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); return(new ElGamalPublicKeyParameters(derY.Value, new ElGamalParameters(para.P, para.G))); } else if (algID.ObjectID.Equals(X9ObjectIdentifiers.IdDsa) || algID.ObjectID.Equals(OiwObjectIdentifiers.DsaWithSha1)) { DsaParameter para = DsaParameter.GetInstance(keyInfo.AlgorithmID.Parameters); DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); return(new DsaPublicKeyParameters(derY.Value, new DsaParameters(para.P, para.Q, para.G))); } else if (algID.ObjectID.Equals(X9ObjectIdentifiers.IdECPublicKey)) { X962Parameters para = new X962Parameters((Asn1Object)keyInfo.AlgorithmID.Parameters); ECDomainParameters dParams = null; if (para.IsNamedCurve) { DerObjectIdentifier oid = (DerObjectIdentifier)para.Parameters; X9ECParameters ecP = X962NamedCurves.GetByOid(oid); if (ecP == null) { ecP = SecNamedCurves.GetByOid(oid); if (ecP == null) { ecP = NistNamedCurves.GetByOid(oid); } } dParams = new ECDomainParameters( ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); } else { X9ECParameters ecP = new X9ECParameters((Asn1Sequence)para.Parameters.ToAsn1Object()); dParams = new ECDomainParameters( ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); } DerBitString bits = keyInfo.PublicKeyData; byte[] data = bits.GetBytes(); Asn1OctetString key = new DerOctetString(data); X9ECPoint derQ = new X9ECPoint(dParams.Curve, key); return(new ECPublicKeyParameters(derQ.Point, dParams)); } else if (algID.ObjectID.Equals(CryptoProObjectIdentifiers.GostR3410x2001)) { Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( (Asn1Sequence)algID.Parameters); Asn1OctetString key; try { key = (Asn1OctetString)keyInfo.GetPublicKey(); } catch (IOException) { throw new ArgumentException("invalid info structure in GOST3410 public key"); } byte[] keyEnc = key.GetOctets(); byte[] x = new byte[32]; byte[] y = new byte[32]; for (int i = 0; i != y.Length; i++) { x[i] = keyEnc[32 - 1 - i]; } for (int i = 0; i != x.Length; i++) { y[i] = keyEnc[64 - 1 - i]; } ECDomainParameters ecP = ECGost3410NamedCurves.GetByOid(gostParams.PublicKeyParamSet); if (ecP == null) { return(null); } ECCurve curve = ecP.Curve; ECPoint q; if (curve is FpCurve) { FpCurve curveFp = (FpCurve)curve; q = new FpPoint( curveFp, new FpFieldElement(curveFp.Q, new BigInteger(1, x)), new FpFieldElement(curveFp.Q, new BigInteger(1, y))); } else { F2mCurve curveF2m = (F2mCurve)curve; q = new F2mPoint( curveF2m, new F2mFieldElement(curveF2m.M, curveF2m.K1, curveF2m.K2, curveF2m.K3, new BigInteger(1, x)), new F2mFieldElement(curveF2m.M, curveF2m.K1, curveF2m.K2, curveF2m.K3, new BigInteger(1, y)), false); } return(new ECPublicKeyParameters(q, gostParams.PublicKeyParamSet)); } else if (algID.ObjectID.Equals(CryptoProObjectIdentifiers.GostR3410x94)) { Gost3410PublicKeyAlgParameters algParams = new Gost3410PublicKeyAlgParameters( (Asn1Sequence)algID.Parameters); DerOctetString derY; try { derY = (DerOctetString)keyInfo.GetPublicKey(); } catch (IOException) { throw new ArgumentException("invalid info structure in GOST3410 public key"); } byte[] keyEnc = derY.GetOctets(); byte[] keyBytes = new byte[keyEnc.Length]; for (int i = 0; i != keyEnc.Length; i++) { keyBytes[i] = keyEnc[keyEnc.Length - 1 - i]; // was little endian } BigInteger y = new BigInteger(1, keyBytes); return(new Gost3410PublicKeyParameters(y, algParams.PublicKeyParamSet)); } else { throw new SecurityUtilityException("algorithm identifier in key not recognised: " + algID.ObjectID); } }
public void CompliantGetByName() { X9ECParameters curve = null; curve = SecNamedCurves.GetByName("secp224k1"); // Compliant curve = SecNamedCurves.GetByName("secp224r1"); // Compliant curve = SecNamedCurves.GetByName("secp256k1"); // Compliant curve = SecNamedCurves.GetByName("secp256r1"); // Compliant curve = SecNamedCurves.GetByName("secp384r1"); // Compliant curve = SecNamedCurves.GetByName("secp521r1"); // Compliant curve = SecNamedCurves.GetByName("sect233k1"); // Compliant curve = SecNamedCurves.GetByName("sect233r1"); // Compliant curve = SecNamedCurves.GetByName("sect239k1"); // Compliant curve = SecNamedCurves.GetByName("sect283k1"); // Compliant curve = SecNamedCurves.GetByName("sect283r1"); // Compliant curve = SecNamedCurves.GetByName("sect409k1"); // Compliant curve = SecNamedCurves.GetByName("sect409r1"); // Compliant curve = SecNamedCurves.GetByName("sect571k1"); // Compliant curve = SecNamedCurves.GetByName("sect571r1"); // Compliant curve = X962NamedCurves.GetByName("prime239v1"); // Compliant curve = X962NamedCurves.GetByName("prime239v2"); // Compliant curve = X962NamedCurves.GetByName("prime239v3"); // Compliant curve = X962NamedCurves.GetByName("prime256v1"); // Compliant curve = X962NamedCurves.GetByName("c2tnb239v1"); // Compliant curve = X962NamedCurves.GetByName("c2tnb239v2"); // Compliant curve = X962NamedCurves.GetByName("c2tnb239v3"); // Compliant curve = X962NamedCurves.GetByName("c2pnb272w1"); // Compliant curve = X962NamedCurves.GetByName("c2pnb304w1"); // Compliant curve = X962NamedCurves.GetByName("c2tnb359v1"); // Compliant curve = X962NamedCurves.GetByName("c2pnb368w1"); // Compliant curve = X962NamedCurves.GetByName("c2tnb431r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp224r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp224t1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp256r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp256t1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp320r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp320t1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp384r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp384t1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp512r1"); // Compliant curve = TeleTrusTNamedCurves.GetByName("brainpoolp512t1"); // Compliant curve = SecNamedCurves.GetByName("GostR3410-2001-CryptoPro-A"); // Compliant curve = SecNamedCurves.GetByName("GostR3410-2001-CryptoPro-XchB"); // Compliant curve = SecNamedCurves.GetByName("GostR3410-2001-CryptoPro-XchA"); // Compliant curve = SecNamedCurves.GetByName("GostR3410-2001-CryptoPro-C"); // Compliant curve = SecNamedCurves.GetByName("GostR3410-2001-CryptoPro-B"); // Compliant curve = NistNamedCurves.GetByName("B-233"); // Compliant curve = NistNamedCurves.GetByName("B-283"); // Compliant curve = NistNamedCurves.GetByName("B-409"); // Compliant curve = NistNamedCurves.GetByName("B-571"); // Compliant curve = NistNamedCurves.GetByName("K-233"); // Compliant curve = NistNamedCurves.GetByName("K-283"); // Compliant curve = NistNamedCurves.GetByName("K-409"); // Compliant curve = NistNamedCurves.GetByName("K-571"); // Compliant curve = NistNamedCurves.GetByName("P-224"); // Compliant curve = NistNamedCurves.GetByName("P-256"); // Compliant curve = NistNamedCurves.GetByName("P-384"); // Compliant curve = NistNamedCurves.GetByName("P-521"); // Compliant curve = ECNamedCurveTable.GetByName("prime239v1"); // Compliant curve = ECNamedCurveTable.GetByName("secp224k1"); // Compliant curve = ECNamedCurveTable.GetByName("c2tnb239v1"); // Compliant curve = ECNamedCurveTable.GetByName("brainpoolp320t1"); // Compliant curve = ECNamedCurveTable.GetByName("GostR3410-2001-CryptoPro-XchA"); // Compliant curve = ECNamedCurveTable.GetByName("P-521"); // Compliant curve = ECNamedCurveTable.GetByName("RandomString"); // Compliant }
public static AsymmetricKeyParameter CreateKey(SubjectPublicKeyInfo keyInfo) { AlgorithmIdentifier algId = keyInfo.getAlgorithmId(); if (algId.getObjectId().Equals(PKCSObjectIdentifiers.rsaEncryption) || algId.getObjectId().Equals(X509ObjectIdentifiers.id_ea_rsa)) { RSAPublicKeyStructure pubKey = new RSAPublicKeyStructure((ASN1Sequence)keyInfo.getPublicKey()); return(new RSAKeyParameters(false, pubKey.getModulus(), pubKey.getPublicExponent())); } else if (algId.getObjectId().Equals(PKCSObjectIdentifiers.dhKeyAgreement) || algId.getObjectId().Equals(X9ObjectIdentifiers.dhpublicnumber)) { DHParameter para = new DHParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derY = (DERInteger)keyInfo.getPublicKey(); return(new DHPublicKeyParameters(derY.getValue(), new DHParameters(para.getP(), para.getG()))); } else if (algId.getObjectId().Equals(OIWObjectIdentifiers.elGamalAlgorithm)) { ElGamalParameter para = new ElGamalParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derY = (DERInteger)keyInfo.getPublicKey(); return(new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(para.getP(), para.getG()))); } else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_dsa) || algId.getObjectId().Equals(OIWObjectIdentifiers.dsaWithSHA1)) { DSAParameter para = new DSAParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derY = (DERInteger)keyInfo.getPublicKey(); return(new DSAPublicKeyParameters(derY.getValue(), new DSAParameters(para.getP(), para.getQ(), para.getG()))); } else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_ecPublicKey)) { X962Parameters para = new X962Parameters((ASN1Object)keyInfo.getAlgorithmId().getParameters()); ECDomainParameters dParams = null; if (para.isNamedCurve()) { DERObjectIdentifier oid = (DERObjectIdentifier)para.getParameters(); X9ECParameters ecP = X962NamedCurves.getByOID(oid); dParams = new ECDomainParameters( ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed()); } else { X9ECParameters ecP = new X9ECParameters((ASN1Sequence)para.getParameters().toASN1Object()); dParams = new ECDomainParameters( ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed()); } DERBitString bits = keyInfo.getPublicKeyData(); byte[] data = bits.getBytes(); ASN1OctetString key = new DEROctetString(data); X9ECPoint derQ = new X9ECPoint(dParams.getCurve(), key); return(new ECPublicKeyParameters(derQ.getPoint(), dParams)); } else { throw new Exception("algorithm identifier in key not recognised"); } }
private void EncodePublicKey() { X9ECParameters ecP = X962NamedCurves.GetByOid(X9ObjectIdentifiers.Prime239v3); if (X9IntegerConverter.GetByteLength(ecP.Curve) != 30) { Fail("wrong byte length reported for curve"); } if (ecP.Curve.FieldSize != 239) { Fail("wrong field size reported for curve"); } // // named curve // X962Parameters _params = new X962Parameters(X9ObjectIdentifiers.Prime192v1); ECPoint point = ecP.G.Multiply(BigInteger.ValueOf(100)); DerOctetString p = new DerOctetString(point.GetEncoded(true)); SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), p.GetOctets()); if (!Arrays.AreEqual(info.GetEncoded(), namedPub)) { Fail("failed public named generation"); } X9ECPoint x9P = new X9ECPoint(ecP.Curve, p); if (!Arrays.AreEqual(p.GetOctets(), x9P.Point.GetEncoded())) { Fail("point encoding not preserved"); } Asn1Object o = Asn1Object.FromByteArray(namedPub); if (!info.Equals(o)) { Fail("failed public named equality"); } // // explicit curve parameters // _params = new X962Parameters(ecP); info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.IdECPublicKey, _params), p.GetOctets()); if (!Arrays.AreEqual(info.GetEncoded(), expPub)) { Fail("failed public explicit generation"); } o = Asn1Object.FromByteArray(expPub); if (!info.Equals(o)) { Fail("failed public explicit equality"); } }
public static AsymmetricKeyParameter CreateKey( PrivateKeyInfo keyInfo) { AlgorithmIdentifier algID = keyInfo.AlgorithmID; DerObjectIdentifier algOid = algID.ObjectID; // TODO See RSAUtil.isRsaOid in Java build if (algOid.Equals(PkcsObjectIdentifiers.RsaEncryption) || algOid.Equals(X509ObjectIdentifiers.IdEARsa) || algOid.Equals(PkcsObjectIdentifiers.IdRsassaPss) || algOid.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) { RsaPrivateKeyStructure keyStructure = new RsaPrivateKeyStructure( Asn1Sequence.GetInstance(keyInfo.PrivateKey)); return(new RsaPrivateCrtKeyParameters( keyStructure.Modulus, keyStructure.PublicExponent, keyStructure.PrivateExponent, keyStructure.Prime1, keyStructure.Prime2, keyStructure.Exponent1, keyStructure.Exponent2, keyStructure.Coefficient)); } else if (algOid.Equals(PkcsObjectIdentifiers.DhKeyAgreement)) { DHParameter para = new DHParameter( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); DerInteger derX = (DerInteger)keyInfo.PrivateKey; BigInteger lVal = para.L; int l = lVal == null ? 0 : lVal.IntValue; DHParameters dhParams = new DHParameters(para.P, para.G, null, l); return(new DHPrivateKeyParameters(derX.Value, dhParams)); } else if (algOid.Equals(OiwObjectIdentifiers.ElGamalAlgorithm)) { ElGamalParameter para = new ElGamalParameter( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); DerInteger derX = (DerInteger)keyInfo.PrivateKey; return(new ElGamalPrivateKeyParameters( derX.Value, new ElGamalParameters(para.P, para.G))); } else if (algOid.Equals(X9ObjectIdentifiers.IdDsa)) { DerInteger derX = (DerInteger)keyInfo.PrivateKey; Asn1Encodable ae = algID.Parameters; DsaParameters parameters = null; if (ae != null) { DsaParameter para = DsaParameter.GetInstance(ae.ToAsn1Object()); parameters = new DsaParameters(para.P, para.Q, para.G); } return(new DsaPrivateKeyParameters(derX.Value, parameters)); } else if (algOid.Equals(X9ObjectIdentifiers.IdECPublicKey)) { X962Parameters para = new X962Parameters(algID.Parameters.ToAsn1Object()); X9ECParameters ecP; if (para.IsNamedCurve) { // TODO ECGost3410NamedCurves support (returns ECDomainParameters though) DerObjectIdentifier oid = (DerObjectIdentifier)para.Parameters; ecP = X962NamedCurves.GetByOid(oid); if (ecP == null) { ecP = SecNamedCurves.GetByOid(oid); if (ecP == null) { ecP = NistNamedCurves.GetByOid(oid); if (ecP == null) { ecP = TeleTrusTNamedCurves.GetByOid(oid); } } } } else { ecP = new X9ECParameters((Asn1Sequence)para.Parameters); } ECDomainParameters dParams = new ECDomainParameters( ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); ECPrivateKeyStructure ec = new ECPrivateKeyStructure( Asn1Sequence.GetInstance(keyInfo.PrivateKey)); return(new ECPrivateKeyParameters(ec.GetKey(), dParams)); } else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x2001)) { Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); ECPrivateKeyStructure ec = new ECPrivateKeyStructure( Asn1Sequence.GetInstance(keyInfo.PrivateKey)); ECDomainParameters ecP = ECGost3410NamedCurves.GetByOid(gostParams.PublicKeyParamSet); if (ecP == null) { return(null); } return(new ECPrivateKeyParameters(ec.GetKey(), gostParams.PublicKeyParamSet)); } else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x94)) { Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); DerOctetString derX = (DerOctetString)keyInfo.PrivateKey; byte[] keyEnc = derX.GetOctets(); byte[] keyBytes = new byte[keyEnc.Length]; for (int i = 0; i != keyEnc.Length; i++) { keyBytes[i] = keyEnc[keyEnc.Length - 1 - i]; // was little endian } BigInteger x = new BigInteger(1, keyBytes); return(new Gost3410PrivateKeyParameters(x, gostParams.PublicKeyParamSet)); } else { throw new SecurityUtilityException("algorithm identifier in key not recognised"); } }
public static AsymmetricKeyParameter CreateKey( SubjectPublicKeyInfo keyInfo) { AlgorithmIdentifier algID = keyInfo.AlgorithmID; DerObjectIdentifier algOid = algID.ObjectID; // TODO See RSAUtil.isRsaOid in Java build if (algOid.Equals(PkcsObjectIdentifiers.RsaEncryption) || algOid.Equals(X509ObjectIdentifiers.IdEARsa) || algOid.Equals(PkcsObjectIdentifiers.IdRsassaPss) || algOid.Equals(PkcsObjectIdentifiers.IdRsaesOaep)) { RsaPublicKeyStructure pubKey = RsaPublicKeyStructure.GetInstance( keyInfo.GetPublicKey()); return(new RsaKeyParameters(false, pubKey.Modulus, pubKey.PublicExponent)); } else if (algOid.Equals(PkcsObjectIdentifiers.DhKeyAgreement) || algOid.Equals(X9ObjectIdentifiers.DHPublicNumber)) { DHParameter para = new DHParameter( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); BigInteger lVal = para.L; int l = lVal == null ? 0 : lVal.IntValue; DHParameters dhParams = new DHParameters(para.P, para.G, null, l); return(new DHPublicKeyParameters(derY.Value, dhParams)); } else if (algOid.Equals(OiwObjectIdentifiers.ElGamalAlgorithm)) { ElGamalParameter para = new ElGamalParameter( Asn1Sequence.GetInstance(algID.Parameters.ToAsn1Object())); DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); return(new ElGamalPublicKeyParameters( derY.Value, new ElGamalParameters(para.P, para.G))); } else if (algOid.Equals(X9ObjectIdentifiers.IdDsa) || algOid.Equals(OiwObjectIdentifiers.DsaWithSha1)) { DerInteger derY = (DerInteger)keyInfo.GetPublicKey(); Asn1Encodable ae = algID.Parameters; DsaParameters parameters = null; if (ae != null) { DsaParameter para = DsaParameter.GetInstance(ae.ToAsn1Object()); parameters = new DsaParameters(para.P, para.Q, para.G); } return(new DsaPublicKeyParameters(derY.Value, parameters)); } else if (algOid.Equals(X9ObjectIdentifiers.IdECPublicKey)) { X962Parameters para = new X962Parameters( algID.Parameters.ToAsn1Object()); X9ECParameters ecP; if (para.IsNamedCurve) { // TODO ECGost3410NamedCurves support (returns ECDomainParameters though) DerObjectIdentifier oid = (DerObjectIdentifier)para.Parameters; ecP = X962NamedCurves.GetByOid(oid); if (ecP == null) { ecP = SecNamedCurves.GetByOid(oid); if (ecP == null) { ecP = NistNamedCurves.GetByOid(oid); if (ecP == null) { ecP = TeleTrusTNamedCurves.GetByOid(oid); } } } } else { ecP = new X9ECParameters((Asn1Sequence)para.Parameters); } ECDomainParameters dParams = new ECDomainParameters( ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed()); DerBitString bits = keyInfo.PublicKeyData; byte[] data = bits.GetBytes(); Asn1OctetString key = new DerOctetString(data); X9ECPoint derQ = new X9ECPoint(dParams.Curve, key); return(new ECPublicKeyParameters(derQ.Point, dParams)); } else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x2001)) { Gost3410PublicKeyAlgParameters gostParams = new Gost3410PublicKeyAlgParameters( (Asn1Sequence)algID.Parameters); Asn1OctetString key; try { key = (Asn1OctetString)keyInfo.GetPublicKey(); } catch (IOException) { throw new ArgumentException("invalid info structure in GOST3410 public key"); } byte[] keyEnc = key.GetOctets(); byte[] x = new byte[32]; byte[] y = new byte[32]; for (int i = 0; i != y.Length; i++) { x[i] = keyEnc[32 - 1 - i]; } for (int i = 0; i != x.Length; i++) { y[i] = keyEnc[64 - 1 - i]; } ECDomainParameters ecP = ECGost3410NamedCurves.GetByOid(gostParams.PublicKeyParamSet); if (ecP == null) { return(null); } ECPoint q = ecP.Curve.CreatePoint(new BigInteger(1, x), new BigInteger(1, y), false); return(new ECPublicKeyParameters(q, gostParams.PublicKeyParamSet)); } else if (algOid.Equals(CryptoProObjectIdentifiers.GostR3410x94)) { Gost3410PublicKeyAlgParameters algParams = new Gost3410PublicKeyAlgParameters( (Asn1Sequence)algID.Parameters); DerOctetString derY; try { derY = (DerOctetString)keyInfo.GetPublicKey(); } catch (IOException) { throw new ArgumentException("invalid info structure in GOST3410 public key"); } byte[] keyEnc = derY.GetOctets(); byte[] keyBytes = new byte[keyEnc.Length]; for (int i = 0; i != keyEnc.Length; i++) { keyBytes[i] = keyEnc[keyEnc.Length - 1 - i]; // was little endian } BigInteger y = new BigInteger(1, keyBytes); return(new Gost3410PublicKeyParameters(y, algParams.PublicKeyParamSet)); } else { throw new SecurityUtilityException("algorithm identifier in key not recognised: " + algOid); } }
public static AsymmetricKeyParameter CreateKey(PrivateKeyInfo keyInfo) { AlgorithmIdentifier algId = keyInfo.getAlgorithmId(); if (algId.getObjectId().Equals(PKCSObjectIdentifiers.rsaEncryption)) { RSAPrivateKeyStructure keyStructure = new RSAPrivateKeyStructure((ASN1Sequence)keyInfo.getPrivateKey()); return(new RSAPrivateCrtKeyParameters( keyStructure.getModulus(), keyStructure.getPublicExponent(), keyStructure.getPrivateExponent(), keyStructure.getPrime1(), keyStructure.getPrime2(), keyStructure.getExponent1(), keyStructure.getExponent2(), keyStructure.getCoefficient())); } else if (algId.getObjectId().Equals(PKCSObjectIdentifiers.dhKeyAgreement)) { DHParameter para = new DHParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derX = (DERInteger)keyInfo.getPrivateKey(); return(new DHPrivateKeyParameters(derX.getValue(), new DHParameters(para.getP(), para.getG()))); } else if (algId.getObjectId().Equals(OIWObjectIdentifiers.elGamalAlgorithm)) { ElGamalParameter para = new ElGamalParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derX = (DERInteger)keyInfo.getPrivateKey(); return(new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(para.getP(), para.getG()))); } else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_dsa)) { DSAParameter para = new DSAParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters()); DERInteger derX = (DERInteger)keyInfo.getPrivateKey(); return(new DSAPrivateKeyParameters(derX.getValue(), new DSAParameters(para.getP(), para.getQ(), para.getG()))); } else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_ecPublicKey)) { X962Parameters para = new X962Parameters((ASN1Object)keyInfo.getAlgorithmId().getParameters()); ECDomainParameters dParams = null; if (para.isNamedCurve()) { DERObjectIdentifier oid = (DERObjectIdentifier)para.getParameters(); X9ECParameters ecP = X962NamedCurves.getByOID(oid); dParams = new ECDomainParameters( ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed()); } else { X9ECParameters ecP = new X9ECParameters( (ASN1Sequence)para.getParameters()); dParams = new ECDomainParameters( ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed()); } ECPrivateKeyStructure ec = new ECPrivateKeyStructure((ASN1Sequence)keyInfo.getPrivateKey()); return(new ECPrivateKeyParameters(ec.getKey(), dParams)); } else { throw new Exception("algorithm identifier in key not recognised"); } }