using System; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.CryptoPro; using Org.BouncyCastle.Security; namespace Org.BouncyCastle.Crypto.Parameters { public class ECKeyGenerationParameters : KeyGenerationParameters { private readonly ECDomainParameters domainParams; private readonly DerObjectIdentifier publicKeyParamSet; public ECKeyGenerationParameters( ECDomainParameters domainParameters, SecureRandom random) : base(random, domainParameters.N.BitLength) { this.domainParams = domainParameters; } public ECKeyGenerationParameters( DerObjectIdentifier publicKeyParamSet, SecureRandom random) : this(LookupParameters(publicKeyParamSet), random) { this.publicKeyParamSet = publicKeyParamSet; } public ECDomainParameters DomainParameters { get { return domainParams; } } public DerObjectIdentifier PublicKeyParamSet { get { return publicKeyParamSet; } } private static ECDomainParameters LookupParameters( DerObjectIdentifier publicKeyParamSet) { if (publicKeyParamSet == null) throw new ArgumentNullException("publicKeyParamSet"); ECDomainParameters p = ECGost3410NamedCurves.GetByOid(publicKeyParamSet); if (p == null) throw new ArgumentException("OID is not a valid CryptoPro public key parameter set", "publicKeyParamSet"); return p; } } }