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