/// <summary> /// Create the private key from DER. /// </summary> /// <param name="key">DER Base64 coded string.</param> /// <returns></returns> public static GXPrivateKey FromDer(string der) { der = der.Replace("\r\n", ""); der = der.Replace("\n", ""); byte[] key = GXCommon.FromBase64(der); GXAsn1Sequence seq = (GXAsn1Sequence)GXAsn1Converter.FromByteArray(key); if ((sbyte)seq[0] > 3) { throw new ArgumentOutOfRangeException("Invalid private key version."); } List <object> tmp = (List <object>)seq[2]; GXPrivateKey value = new GXPrivateKey(); X9ObjectIdentifier id = X9ObjectIdentifierConverter.FromString(tmp[0].ToString()); switch (id) { case X9ObjectIdentifier.Prime256v1: value.Scheme = Ecc.P256; break; case X9ObjectIdentifier.Secp384r1: value.Scheme = Ecc.P384; break; default: if (id == X9ObjectIdentifier.None) { throw new ArgumentOutOfRangeException("Invalid private key " + tmp[0].ToString() + "."); } else { throw new ArgumentOutOfRangeException("Invalid private key " + id + " " + tmp[0].ToString() + "."); } } value.RawValue = (byte[])seq[1]; if (seq[3] is byte[]) { value.publicKey = GXPublicKey.FromRawBytes((byte[])seq[3]); } else { //Open SSL PEM. value.publicKey = GXPublicKey.FromRawBytes(((GXAsn1BitString)((List <object>)seq[3])[0]).Value); } return(value); }
public static string GetString(X9ObjectIdentifier value) { switch (value) { case X9ObjectIdentifier.IdFieldType: return("1.2.840.10045.1"); case X9ObjectIdentifier.PrimeField: return("1.2.840.10045.1"); case X9ObjectIdentifier.CharacteristicTwoField: return("1.2.840.10045.1.2"); case X9ObjectIdentifier.GNBasis: return("1.2.840.10045.1.2.3.1"); case X9ObjectIdentifier.TPBasis: return("1.2.840.10045.1.2.3.2"); case X9ObjectIdentifier.PPBasis: return("1.2.840.10045.1.2.3.3"); case X9ObjectIdentifier.ECDsaWithSha1: return("1.2.840.10045.4.1"); case X9ObjectIdentifier.IdECPublicKey: return("1.2.840.10045.2.1"); case X9ObjectIdentifier.ECDsaWithSha2: return("1.2.840.10045.4.3"); case X9ObjectIdentifier.ECDsaWithSha224: return("1.2.840.10045.4.31"); case X9ObjectIdentifier.ECDsaWithSha256: return("1.2.840.10045.4.32"); case X9ObjectIdentifier.ECDsaWithSha384: return("1.2.840.10045.4.33"); case X9ObjectIdentifier.ECDsaWithSha512: return("1.2.840.10045.4.34"); case X9ObjectIdentifier.EllipticCurve: return("1.2.840.10045.3"); case X9ObjectIdentifier.CTwoCurve: return("1.2.840.10045.3.0"); case X9ObjectIdentifier.C2Pnb163v1: return("1.2.840.10045.3.0.1"); case X9ObjectIdentifier.C2Pnb163v2: return("1.2.840.10045.3.0.2"); case X9ObjectIdentifier.C2Pnb163v3: return("1.2.840.10045.3.0.3"); case X9ObjectIdentifier.C2Pnb176w1: return("1.2.840.10045.3.0.4"); case X9ObjectIdentifier.C2Tnb191v1: return("1.2.840.10045.3.0.5"); case X9ObjectIdentifier.C2Tnb191v2: return("1.2.840.10045.3.0.6"); case X9ObjectIdentifier.C2Tnb191v3: return("1.2.840.10045.3.0.7"); case X9ObjectIdentifier.C2Onb191v4: return("1.2.840.10045.3.0.8"); case X9ObjectIdentifier.C2Onb191v5: return("1.2.840.10045.3.0.9"); case X9ObjectIdentifier.C2Pnb208w1: return("1.2.840.10045.3.0.10"); case X9ObjectIdentifier.C2Tnb239v1: return("1.2.840.10045.3.0.11"); case X9ObjectIdentifier.C2Tnb239v2: return("1.2.840.10045.3.0.12"); case X9ObjectIdentifier.C2Tnb239v3: return("1.2.840.10045.3.0.13"); case X9ObjectIdentifier.C2Onb239v4: return("1.2.840.10045.3.0.14"); case X9ObjectIdentifier.C2Onb239v5: return("1.2.840.10045.3.0.15"); case X9ObjectIdentifier.C2Pnb272w1: return("1.2.840.10045.3.0.16"); case X9ObjectIdentifier.C2Pnb304w1: return("1.2.840.10045.3.0.17"); case X9ObjectIdentifier.C2Tnb359v1: return("1.2.840.10045.3.0.18"); case X9ObjectIdentifier.C2Pnb368w1: return("1.2.840.10045.3.0.19"); case X9ObjectIdentifier.C2Tnb431r1: return("1.2.840.10045.3.0.20"); case X9ObjectIdentifier.PrimeCurve: return("1.2.840.10045.3.1"); case X9ObjectIdentifier.Prime192v1: return("1.2.840.10045.3.1.1"); case X9ObjectIdentifier.Prime192v2: return("1.2.840.10045.3.1.2"); case X9ObjectIdentifier.Prime192v3: return("1.2.840.10045.3.1.3"); case X9ObjectIdentifier.Prime239v1: return("1.2.840.10045.3.1.4"); case X9ObjectIdentifier.Prime239v2: return("1.2.840.10045.3.1.5"); case X9ObjectIdentifier.Prime239v3: return("1.2.840.10045.3.1.6"); case X9ObjectIdentifier.Prime256v1: return("1.2.840.10045.3.1.7"); case X9ObjectIdentifier.IdDsa: return("1.2.840.10040.4.1"); case X9ObjectIdentifier.IdDsaWithSha1: return("1.2.840.10040.4.3"); case X9ObjectIdentifier.X9x63Scheme: return("1.3.133.16.840.63.0"); case X9ObjectIdentifier.DHSinglePassStdDHSha1KdfScheme: return("1.3.133.16.840.63.0.2"); case X9ObjectIdentifier.DHSinglePassCofactorDHSha1KdfScheme: return("1.3.133.16.840.63.0.3"); case X9ObjectIdentifier.MqvSinglePassSha1KdfScheme: return("1.3.133.16.840.63.0.16"); case X9ObjectIdentifier.ansi_x9_42: return("1.2.840.10046"); case X9ObjectIdentifier.DHPublicNumber: return("1.2.840.10046.2.1"); case X9ObjectIdentifier.X9x42Schemes: return("1.2.840.10046.2.3"); case X9ObjectIdentifier.DHStatic: return("1.2.840.10046.2.3.1"); case X9ObjectIdentifier.DHEphem: return("1.2.840.10046.2.3.2"); case X9ObjectIdentifier.DHOneFlow: return("1.2.840.10046.2.3.3"); case X9ObjectIdentifier.DHHybrid1: return("1.2.840.10046.2.3.4"); case X9ObjectIdentifier.DHHybrid2: return("1.2.840.10046.2.3.5"); case X9ObjectIdentifier.DHHybridOneFlow: return("1.2.840.10046.2.3.6"); case X9ObjectIdentifier.Mqv2: return("1.2.840.10046.2.3.7"); case X9ObjectIdentifier.Mqv1: return("1.2.840.10046.2.3.8"); default: throw new ArgumentOutOfRangeException("Invalid X509Name. " + value); } }