1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 using System;
6 using Test.Cryptography;
7 
8 namespace System.Security.Cryptography.EcDsa.Tests
9 {
10     // Note to contributors:
11     //   Keys contained in this file should be randomly generated for the purpose of inclusion here,
12     //   or obtained from some fixed set of test data. (Please) DO NOT use any key that has ever been
13     //   used for any real purpose.
14     //
15     // Note to readers:
16     //   The keys contained in this file should all be treated as compromised. That means that you
17     //   absolutely SHOULD NOT use these keys on anything that you actually want to be protected.
18     internal static class ECDsaTestData
19     {
20         internal static readonly byte[] s_hashSha512 =
21             ("a232cec7be26319e53db0d48470232d37793b06b99e8ed82fac1996b3d1596449087769927d64af657cce62d853c4cf7ff4c"
22            + "d069eda230d1c524d225756ffbaf").HexToByteArray();
23 
24 #if netcoreapp
GetNistP256ExplicitCurve()25         internal static ECCurve GetNistP256ExplicitCurve()
26         {
27             // SEC2-Ver-1.0, 2.7.2
28             return new ECCurve
29             {
30                 CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass,
31                 Prime = "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF".HexToByteArray(),
32                 A = "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC".HexToByteArray(),
33                 B = "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B".HexToByteArray(),
34                 Seed = "C49D360886E704936A6678E1139D26B7819F7E90".HexToByteArray(),
35                 Hash = HashAlgorithmName.SHA1,
36                 G = new ECPoint
37                 {
38                     X = "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296".HexToByteArray(),
39                     Y = "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5".HexToByteArray(),
40                 },
41                 Order = "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551".HexToByteArray(),
42                 Cofactor = new byte[] { 0x01 },
43             };
44         }
45 
GetNistP384ExplicitCurve()46         internal static ECCurve GetNistP384ExplicitCurve()
47         {
48             // SEC2-Ver-1.0, 2.8.1
49             return new ECCurve
50             {
51                 CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass,
52                 Prime = ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
53                     "FFFFFFFEFFFFFFFF0000000000000000FFFFFFFF").HexToByteArray(),
54                 A = ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
55                     "FFFFFFFEFFFFFFFF0000000000000000FFFFFFFC").HexToByteArray(),
56                 B = ("B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F" +
57                     "5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF").HexToByteArray(),
58                 Seed = "A335926AA319A27A1D00896A6773A4827ACDAC73".HexToByteArray(),
59                 Hash = HashAlgorithmName.SHA1,
60                 G = new ECPoint
61                 {
62                     X = ("AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E0" +
63                         "82542A385502F25DBF55296C3A545E3872760AB7").HexToByteArray(),
64                     Y = ("3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113" +
65                         "B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F").HexToByteArray(),
66                 },
67                 Order = ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81" +
68                     "F4372DDF581A0DB248B0A77AECEC196ACCC52973").HexToByteArray(),
69                 Cofactor = new byte[] { 0x01 },
70             };
71         }
72 
GetNistP521ExplicitCurve()73         internal static ECCurve GetNistP521ExplicitCurve()
74         {
75             // SEC2-Ver-1.0, 2.9.1
76             return new ECCurve
77             {
78                 CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass,
79                 Prime = ("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
80                     "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
81                     "FFFFFFFFFFFFFFFFFFFFFFFF").HexToByteArray(),
82                 A = ("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
83                     "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
84                     "FFFFFFFFFFFFFFFFFFFFFFFC").HexToByteArray(),
85                 B = ("0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3" +
86                     "B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF88" +
87                     "3D2C34F1EF451FD46B503F00").HexToByteArray(),
88                 Seed = "D09E8800291CB85396CC6717393284AAA0DA64BA".HexToByteArray(),
89                 Hash = HashAlgorithmName.SHA1,
90                 G = new ECPoint
91                 {
92                     // The formatting in the document is the full binary G, with the
93                     // last 2 bytes of X sharing a 4 byte clustering with the first
94                     // 2 bytes of Y; hence the odd formatting.
95                     X = ("00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828" +
96                         "AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A" +
97                         "429BF97E7E31C2E5" + "BD66").HexToByteArray(),
98                     Y = ("0118" +
99                         "39296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17" +
100                         "273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C240" +
101                         "88BE94769FD16650").HexToByteArray(),
102                 },
103                 Order = ("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
104                     "FFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8" +
105                     "899C47AEBB6FB71E91386409").HexToByteArray(),
106                 Cofactor = new byte[] { 0x01 },
107             };
108         }
109 
GetNistP256ExplicitTestData()110         internal static ECParameters GetNistP256ExplicitTestData()
111         {
112             // explicit values for s_ECDsa256Key (nistP256)
113             ECParameters p = new ECParameters();
114             p.Q = new ECPoint
115             {
116                 X = ("96E476F7473CB17C5B38684DAAE437277AE1EFADCEB380FAD3D7072BE2FFE5F0").HexToByteArray(),
117                 Y = ("B54A94C2D6951F073BFC25E7B81AC2A4C41317904929D167C3DFC99122175A94").HexToByteArray()
118             };
119             ECCurve c = p.Curve;
120             c.CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass;
121             c.A = ("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC").HexToByteArray();
122             c.B = ("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B").HexToByteArray();
123             c.G = new ECPoint()
124             {
125                 X = ("6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296").HexToByteArray(),
126                 Y = ("4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5").HexToByteArray(),
127             };
128             c.Cofactor = ("01").HexToByteArray();
129             c.Order = ("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551").HexToByteArray();
130             c.Prime = ("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF").HexToByteArray();
131             c.Seed = null;
132             c.Hash = null;
133             p.Curve = c;
134             return p;
135         }
136 
GetNistP224KeyTestData()137         internal static ECParameters GetNistP224KeyTestData()
138         {
139             // key values for nistP224
140             ECParameters p = new ECParameters();
141             p.Q = new ECPoint
142             {
143                 X = ("00B6C6FA7EFF084CEF007B414690027085173AAB846906C964D900C0").HexToByteArray(),
144                 Y = ("845213F2A07DDE66EE0B19021E62C721A0FBF41E878FB2A34C40C872").HexToByteArray()
145             };
146             p.D =   ("CE57F5C60F208819DC5FB994FF4EB4E11D40694B5E79564C2688B756").HexToByteArray();
147             p.Curve = ECCurve.CreateFromOid(new Oid("1.3.132.0.33", "nistP224"));
148 
149             return p;
150         }
151 
GetNistP521DiminishedCoordsParameters()152         internal static ECParameters GetNistP521DiminishedCoordsParameters()
153         {
154             return new ECParameters
155             {
156                 Curve = ECCurve.NamedCurves.nistP521,
157 
158                 // Qx, Qy, and d start with 0x00, which should be preserved.
159                 Q = new ECPoint
160                 {
161                     X = (
162                         "00DCB499D2B8174A2A2E74F23D2EA6C5F8BC8B311574E94B7E590B1EBC28665E5A" +
163                         "2C021183F10A0B23E34EC9BED2F59525CC45CFB0E6870FD61EA4FFEAFBD08CDF73").HexToByteArray(),
164 
165                     Y = (
166                         "008EA45062A8CEF4A4CE10449281D98B74A7EBBA9B5597DF842A9B1FA73B46A0E7" +
167                         "22C005FD49C141E43A5C10E77F1185C5233E6BE016998EF5CE09FC3936E3208B87").HexToByteArray(),
168                 },
169 
170                 D = (
171                     "0029B61CD0B8670DCFA6B2ED44677C23D134C4A802D8E2B4D6FF563BE1F010EDA7" +
172                     "956FA22DD3C8682751296C129D55F8F8C15483103D99899446E13285998B7E0F05").HexToByteArray(),
173             };
174         }
175 #endif // netcoreapp
176     }
177 }
178