Ejemplo n.º 1
0
        internal ECDsaCng MakeECDsa(COSE.Algorithm alg, COSE.EllipticCurve crv)
        {
            ECCurve curve;

            switch (alg)
            {
            case COSE.Algorithm.ES256:
                switch (crv)
                {
                case COSE.EllipticCurve.P256:
                case COSE.EllipticCurve.P256K:
                    curve = ECCurve.NamedCurves.nistP256;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(string.Format("Missing or unknown crv {0}", crv.ToString()));
                }
                break;

            case COSE.Algorithm.ES384:
                switch (crv)     // https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves
                {
                case COSE.EllipticCurve.P384:
                    curve = ECCurve.NamedCurves.nistP384;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(string.Format("Missing or unknown crv {0}", crv.ToString()));
                }
                break;

            case COSE.Algorithm.ES512:
                switch (crv)     // https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves
                {
                case COSE.EllipticCurve.P521:
                    curve = ECCurve.NamedCurves.nistP521;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(string.Format("Missing or unknown crv {0}", crv.ToString()));
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(string.Format("Missing or unknown alg {0}", alg.ToString()));
            }
            return(new ECDsaCng(curve));
        }