/// <summary> /// Determine the curve name from an EC key blob /// </summary> /// <param name="magic">Magic number</param> /// <returns>Curve name</returns> private static string getCurveName(int magic, CurveNamespace nameSpace) { switch (magic) { case (int)KeyBlobMagicNumber.ECDHPublicP256: case (int)KeyBlobMagicNumber.ECDsaPublicP256: switch (nameSpace) { case CurveNamespace.X962: return("prime256v1"); case CurveNamespace.NIST: return("P-256"); case CurveNamespace.SEC: return("SecP256r1"); } break; case (int)KeyBlobMagicNumber.ECDHPublicP384: case (int)KeyBlobMagicNumber.ECDsaPublicP384: switch (nameSpace) { case CurveNamespace.X962: // These aren't in the BC list return("prime384v1"); case CurveNamespace.NIST: return("P-384"); case CurveNamespace.SEC: return("SecP384r1"); } break; case (int)KeyBlobMagicNumber.ECDHPublicP521: case (int)KeyBlobMagicNumber.ECDsaPublicP521: switch (nameSpace) { case CurveNamespace.X962: // These aren't in the BC list return("prime521v1"); case CurveNamespace.NIST: return("P-521"); case CurveNamespace.SEC: return("SecP521r1"); } break; } return(""); }
/// <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); }