public static void CoseKeyHelpers_ECDsaExportCosePublicKey_HappyPath(string expectedHexEncoding, string hexQx, string hexQy, string?hashAlgorithmName, string curveFriendlyName)
        {
            byte[] expectedEncoding = expectedHexEncoding.HexToByteArray();
            var    hashAlgName      = hashAlgorithmName != null ? new HashAlgorithmName(hashAlgorithmName) : (HashAlgorithmName?)null;
            var    ecParameters     = new ECParameters()
            {
                Curve = ECCurve.CreateFromFriendlyName(curveFriendlyName),
                Q     = new ECPoint()
                {
                    X = hexQx.HexToByteArray(), Y = hexQy.HexToByteArray()
                },
            };

            using ECDsa ecDsa = ECDsa.Create(ecParameters);

            byte[] coseKeyEncoding = CborCoseKeyHelpers.ExportECDsaPublicKey(ecDsa, hashAlgName);
            AssertHelper.HexEqual(expectedEncoding, coseKeyEncoding);
        }
Beispiel #2
0
        public static void CoseKeyHelpers_ECDsaParseCosePublicKey_HappyPath(string hexEncoding, string hexExpectedQx, string hexExpectedQy, string?expectedHashAlgorithmName, string curveFriendlyName)
        {
            ECPoint q = new ECPoint()
            {
                X = hexExpectedQx.HexToByteArray(), Y = hexExpectedQy.HexToByteArray()
            };

            (ECDsa ecDsa, HashAlgorithmName? name) = CborCoseKeyHelpers.ParseECDsaPublicKey(hexEncoding.HexToByteArray());

            using ECDsa _ = ecDsa;

            ECParameters ecParams = ecDsa.ExportParameters(includePrivateParameters: false);

            string?expectedCurveFriendlyName = NormalizeCurveForPlatform(curveFriendlyName).Oid.FriendlyName;

            Assert.True(ecParams.Curve.IsNamed);
            Assert.Equal(expectedCurveFriendlyName, ecParams.Curve.Oid.FriendlyName);
            Assert.Equal(q.X, ecParams.Q.X);
            Assert.Equal(q.Y, ecParams.Q.Y);
            Assert.Equal(expectedHashAlgorithmName, name?.Name);