X962NamedCurves.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC;
  7. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier;
  8. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  9. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections;
  10. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders;
  11. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9
  12. {
  13. /**
  14. * table of the current named curves defined in X.962 EC-DSA.
  15. */
  16. public sealed class X962NamedCurves
  17. {
  18. private X962NamedCurves()
  19. {
  20. }
  21. private static X9ECPoint ConfigureBasepoint(ECCurve curve, string encoding)
  22. {
  23. X9ECPoint G = new X9ECPoint(curve, Hex.DecodeStrict(encoding));
  24. WNafUtilities.ConfigureBasepoint(G.Point);
  25. return G;
  26. }
  27. private static ECCurve ConfigureCurve(ECCurve curve)
  28. {
  29. return curve;
  30. }
  31. private static BigInteger FromHex(string hex)
  32. {
  33. return new BigInteger(1, Hex.DecodeStrict(hex));
  34. }
  35. internal class Prime192v1Holder
  36. : X9ECParametersHolder
  37. {
  38. private Prime192v1Holder() {}
  39. internal static readonly X9ECParametersHolder Instance = new Prime192v1Holder();
  40. protected override X9ECParameters CreateParameters()
  41. {
  42. BigInteger n = FromHex("ffffffffffffffffffffffff99def836146bc9b1b4d22831");
  43. BigInteger h = BigInteger.One;
  44. ECCurve curve = ConfigureCurve(new FpCurve(
  45. FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"),
  46. FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"),
  47. FromHex("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1"),
  48. n, h));
  49. X9ECPoint G = ConfigureBasepoint(curve,
  50. "03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012");
  51. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("3045AE6FC8422f64ED579528D38120EAE12196D5"));
  52. }
  53. }
  54. internal class Prime192v2Holder
  55. : X9ECParametersHolder
  56. {
  57. private Prime192v2Holder() {}
  58. internal static readonly X9ECParametersHolder Instance = new Prime192v2Holder();
  59. protected override X9ECParameters CreateParameters()
  60. {
  61. BigInteger n = FromHex("fffffffffffffffffffffffe5fb1a724dc80418648d8dd31");
  62. BigInteger h = BigInteger.One;
  63. ECCurve curve = ConfigureCurve(new FpCurve(
  64. FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"),
  65. FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"),
  66. FromHex("cc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953"),
  67. n, h));
  68. X9ECPoint G = ConfigureBasepoint(curve,
  69. "03eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a");
  70. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("31a92ee2029fd10d901b113e990710f0d21ac6b6"));
  71. }
  72. }
  73. internal class Prime192v3Holder
  74. : X9ECParametersHolder
  75. {
  76. private Prime192v3Holder() {}
  77. internal static readonly X9ECParametersHolder Instance = new Prime192v3Holder();
  78. protected override X9ECParameters CreateParameters()
  79. {
  80. BigInteger n = FromHex("ffffffffffffffffffffffff7a62d031c83f4294f640ec13");
  81. BigInteger h = BigInteger.One;
  82. ECCurve curve = ConfigureCurve(new FpCurve(
  83. FromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"),
  84. FromHex("fffffffffffffffffffffffffffffffefffffffffffffffc"),
  85. FromHex("22123dc2395a05caa7423daeccc94760a7d462256bd56916"),
  86. n, h));
  87. X9ECPoint G = ConfigureBasepoint(curve,
  88. "027d29778100c65a1da1783716588dce2b8b4aee8e228f1896");
  89. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("c469684435deb378c4b65ca9591e2a5763059a2e"));
  90. }
  91. }
  92. internal class Prime239v1Holder
  93. : X9ECParametersHolder
  94. {
  95. private Prime239v1Holder() {}
  96. internal static readonly X9ECParametersHolder Instance = new Prime239v1Holder();
  97. protected override X9ECParameters CreateParameters()
  98. {
  99. BigInteger n = FromHex("7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b");
  100. BigInteger h = BigInteger.One;
  101. ECCurve curve = ConfigureCurve(new FpCurve(
  102. new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"),
  103. FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"),
  104. FromHex("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a"),
  105. n, h));
  106. X9ECPoint G = ConfigureBasepoint(curve,
  107. "020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf");
  108. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("e43bb460f0b80cc0c0b075798e948060f8321b7d"));
  109. }
  110. }
  111. internal class Prime239v2Holder
  112. : X9ECParametersHolder
  113. {
  114. private Prime239v2Holder() {}
  115. internal static readonly X9ECParametersHolder Instance = new Prime239v2Holder();
  116. protected override X9ECParameters CreateParameters()
  117. {
  118. BigInteger n = FromHex("7fffffffffffffffffffffff800000cfa7e8594377d414c03821bc582063");
  119. BigInteger h = BigInteger.One;
  120. ECCurve curve = ConfigureCurve(new FpCurve(
  121. new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"),
  122. FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"),
  123. FromHex("617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c"),
  124. n, h));
  125. X9ECPoint G = ConfigureBasepoint(curve,
  126. "0238af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7");
  127. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("e8b4011604095303ca3b8099982be09fcb9ae616"));
  128. }
  129. }
  130. internal class Prime239v3Holder
  131. : X9ECParametersHolder
  132. {
  133. private Prime239v3Holder() {}
  134. internal static readonly X9ECParametersHolder Instance = new Prime239v3Holder();
  135. protected override X9ECParameters CreateParameters()
  136. {
  137. BigInteger n = FromHex("7fffffffffffffffffffffff7fffff975deb41b3a6057c3c432146526551");
  138. BigInteger h = BigInteger.One;
  139. ECCurve curve = ConfigureCurve(new FpCurve(
  140. new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"),
  141. FromHex("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"),
  142. FromHex("255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e"),
  143. n, h));
  144. X9ECPoint G = ConfigureBasepoint(curve,
  145. "036768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a");
  146. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("7d7374168ffe3471b60a857686a19475d3bfa2ff"));
  147. }
  148. }
  149. internal class Prime256v1Holder
  150. : X9ECParametersHolder
  151. {
  152. private Prime256v1Holder() {}
  153. internal static readonly X9ECParametersHolder Instance = new Prime256v1Holder();
  154. protected override X9ECParameters CreateParameters()
  155. {
  156. BigInteger n = FromHex("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551");
  157. BigInteger h = BigInteger.One;
  158. ECCurve curve = ConfigureCurve(new FpCurve(
  159. new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951"),
  160. FromHex("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc"),
  161. FromHex("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b"),
  162. n, h));
  163. X9ECPoint G = ConfigureBasepoint(curve,
  164. "036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296");
  165. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("c49d360886e704936a6678e1139d26b7819f7e90"));
  166. }
  167. }
  168. /*
  169. * F2m Curves
  170. */
  171. internal class C2pnb163v1Holder
  172. : X9ECParametersHolder
  173. {
  174. private C2pnb163v1Holder() {}
  175. internal static readonly X9ECParametersHolder Instance = new C2pnb163v1Holder();
  176. protected override X9ECParameters CreateParameters()
  177. {
  178. BigInteger n = FromHex("0400000000000000000001E60FC8821CC74DAEAFC1");
  179. BigInteger h = BigInteger.Two;
  180. ECCurve curve = ConfigureCurve(new F2mCurve(
  181. 163,
  182. 1, 2, 8,
  183. FromHex("072546B5435234A422E0789675F432C89435DE5242"),
  184. FromHex("00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9"),
  185. n, h));
  186. X9ECPoint G = ConfigureBasepoint(curve,
  187. "0307AF69989546103D79329FCC3D74880F33BBE803CB");
  188. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("D2C0FB15760860DEF1EEF4D696E6768756151754"));
  189. }
  190. }
  191. internal class C2pnb163v2Holder
  192. : X9ECParametersHolder
  193. {
  194. private C2pnb163v2Holder() {}
  195. internal static readonly X9ECParametersHolder Instance = new C2pnb163v2Holder();
  196. protected override X9ECParameters CreateParameters()
  197. {
  198. BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7");
  199. BigInteger h = BigInteger.Two;
  200. ECCurve curve = ConfigureCurve(new F2mCurve(
  201. 163,
  202. 1, 2, 8,
  203. FromHex("0108B39E77C4B108BED981ED0E890E117C511CF072"),
  204. FromHex("0667ACEB38AF4E488C407433FFAE4F1C811638DF20"),
  205. n, h));
  206. X9ECPoint G = ConfigureBasepoint(curve,
  207. "030024266E4EB5106D0A964D92C4860E2671DB9B6CC5");
  208. return new X9ECParameters(curve, G, n, h);
  209. }
  210. }
  211. internal class C2pnb163v3Holder
  212. : X9ECParametersHolder
  213. {
  214. private C2pnb163v3Holder() {}
  215. internal static readonly X9ECParametersHolder Instance = new C2pnb163v3Holder();
  216. protected override X9ECParameters CreateParameters()
  217. {
  218. BigInteger n = FromHex("03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309");
  219. BigInteger h = BigInteger.Two;
  220. ECCurve curve = ConfigureCurve(new F2mCurve(
  221. 163,
  222. 1, 2, 8,
  223. FromHex("07A526C63D3E25A256A007699F5447E32AE456B50E"),
  224. FromHex("03F7061798EB99E238FD6F1BF95B48FEEB4854252B"),
  225. n, h));
  226. X9ECPoint G = ConfigureBasepoint(curve,
  227. "0202F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB");
  228. return new X9ECParameters(curve, G, n, h);
  229. }
  230. }
  231. internal class C2pnb176w1Holder
  232. : X9ECParametersHolder
  233. {
  234. private C2pnb176w1Holder() {}
  235. internal static readonly X9ECParametersHolder Instance = new C2pnb176w1Holder();
  236. protected override X9ECParameters CreateParameters()
  237. {
  238. BigInteger n = FromHex("010092537397ECA4F6145799D62B0A19CE06FE26AD");
  239. BigInteger h = BigInteger.ValueOf(0xFF6E);
  240. ECCurve curve = ConfigureCurve(new F2mCurve(
  241. 176,
  242. 1, 2, 43,
  243. FromHex("E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B"),
  244. FromHex("5DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2"),
  245. n, h));
  246. X9ECPoint G = ConfigureBasepoint(curve,
  247. "038D16C2866798B600F9F08BB4A8E860F3298CE04A5798");
  248. return new X9ECParameters(curve, G, n, h);
  249. }
  250. }
  251. internal class C2tnb191v1Holder
  252. : X9ECParametersHolder
  253. {
  254. private C2tnb191v1Holder() {}
  255. internal static readonly X9ECParametersHolder Instance = new C2tnb191v1Holder();
  256. protected override X9ECParameters CreateParameters()
  257. {
  258. BigInteger n = FromHex("40000000000000000000000004A20E90C39067C893BBB9A5");
  259. BigInteger h = BigInteger.Two;
  260. ECCurve curve = ConfigureCurve(new F2mCurve(
  261. 191,
  262. 9,
  263. FromHex("2866537B676752636A68F56554E12640276B649EF7526267"),
  264. FromHex("2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC"),
  265. n, h));
  266. X9ECPoint G = ConfigureBasepoint(curve,
  267. "0236B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D");
  268. return new X9ECParameters(curve, G, n, h, Hex.DecodeStrict("4E13CA542744D696E67687561517552F279A8C84"));
  269. }
  270. }
  271. internal class C2tnb191v2Holder
  272. : X9ECParametersHolder
  273. {
  274. private C2tnb191v2Holder() {}
  275. internal static readonly X9ECParametersHolder Instance = new C2tnb191v2Holder();
  276. protected override X9ECParameters CreateParameters()
  277. {
  278. BigInteger n = FromHex("20000000000000000000000050508CB89F652824E06B8173");
  279. BigInteger h = BigInteger.ValueOf(4);
  280. ECCurve curve = ConfigureCurve(new F2mCurve(
  281. 191,
  282. 9,
  283. FromHex("401028774D7777C7B7666D1366EA432071274F89FF01E718"),
  284. FromHex("0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01"),
  285. n, h));
  286. X9ECPoint G = ConfigureBasepoint(curve,
  287. "023809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10");
  288. return new X9ECParameters(curve, G, n, h);
  289. }
  290. }
  291. internal class C2tnb191v3Holder
  292. : X9ECParametersHolder
  293. {
  294. private C2tnb191v3Holder() {}
  295. internal static readonly X9ECParametersHolder Instance = new C2tnb191v3Holder();
  296. protected override X9ECParameters CreateParameters()
  297. {
  298. BigInteger n = FromHex("155555555555555555555555610C0B196812BFB6288A3EA3");
  299. BigInteger h = BigInteger.ValueOf(6);
  300. ECCurve curve = ConfigureCurve(new F2mCurve(
  301. 191,
  302. 9,
  303. FromHex("6C01074756099122221056911C77D77E77A777E7E7E77FCB"),
  304. FromHex("71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8"),
  305. n, h));
  306. X9ECPoint G = ConfigureBasepoint(curve,
  307. "03375D4CE24FDE434489DE8746E71786015009E66E38A926DD");
  308. return new X9ECParameters(curve, G, n, h);
  309. }
  310. }
  311. internal class C2pnb208w1Holder
  312. : X9ECParametersHolder
  313. {
  314. private C2pnb208w1Holder() {}
  315. internal static readonly X9ECParametersHolder Instance = new C2pnb208w1Holder();
  316. protected override X9ECParameters CreateParameters()
  317. {
  318. BigInteger n = FromHex("0101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D");
  319. BigInteger h = BigInteger.ValueOf(0xFE48);
  320. ECCurve curve = ConfigureCurve(new F2mCurve(
  321. 208,
  322. 1, 2, 83,
  323. BigInteger.Zero,
  324. FromHex("C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E"),
  325. n, h));
  326. X9ECPoint G = ConfigureBasepoint(curve,
  327. "0289FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A");
  328. return new X9ECParameters(curve, G, n, h);
  329. }
  330. }
  331. internal class C2tnb239v1Holder
  332. : X9ECParametersHolder
  333. {
  334. private C2tnb239v1Holder() {}
  335. internal static readonly X9ECParametersHolder Instance = new C2tnb239v1Holder();
  336. protected override X9ECParameters CreateParameters()
  337. {
  338. BigInteger n = FromHex("2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447");
  339. BigInteger h = BigInteger.ValueOf(4);
  340. ECCurve curve = ConfigureCurve(new F2mCurve(
  341. 239,
  342. 36,
  343. FromHex("32010857077C5431123A46B808906756F543423E8D27877578125778AC76"),
  344. FromHex("790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16"),
  345. n, h));
  346. X9ECPoint G = ConfigureBasepoint(curve,
  347. "0257927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D");
  348. return new X9ECParameters(curve, G, n, h);
  349. }
  350. }
  351. internal class C2tnb239v2Holder
  352. : X9ECParametersHolder
  353. {
  354. private C2tnb239v2Holder() {}
  355. internal static readonly X9ECParametersHolder Instance = new C2tnb239v2Holder();
  356. protected override X9ECParameters CreateParameters()
  357. {
  358. BigInteger n = FromHex("1555555555555555555555555555553C6F2885259C31E3FCDF154624522D");
  359. BigInteger h = BigInteger.ValueOf(6);
  360. ECCurve curve = ConfigureCurve(new F2mCurve(
  361. 239,
  362. 36,
  363. FromHex("4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F"),
  364. FromHex("5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B"),
  365. n, h));
  366. X9ECPoint G = ConfigureBasepoint(curve,
  367. "0228F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205");
  368. return new X9ECParameters(curve, G, n, h);
  369. }
  370. }
  371. internal class C2tnb239v3Holder
  372. : X9ECParametersHolder
  373. {
  374. private C2tnb239v3Holder() {}
  375. internal static readonly X9ECParametersHolder Instance = new C2tnb239v3Holder();
  376. protected override X9ECParameters CreateParameters()
  377. {
  378. BigInteger n = FromHex("0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF");
  379. BigInteger h = BigInteger.ValueOf(10);
  380. ECCurve curve = ConfigureCurve(new F2mCurve(
  381. 239,
  382. 36,
  383. FromHex("01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F"),
  384. FromHex("6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40"),
  385. n, h));
  386. X9ECPoint G = ConfigureBasepoint(curve,
  387. "0370F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92");
  388. return new X9ECParameters(curve, G, n, h);
  389. }
  390. }
  391. internal class C2pnb272w1Holder
  392. : X9ECParametersHolder
  393. {
  394. private C2pnb272w1Holder() {}
  395. internal static readonly X9ECParametersHolder Instance = new C2pnb272w1Holder();
  396. protected override X9ECParameters CreateParameters()
  397. {
  398. BigInteger n = FromHex("0100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521");
  399. BigInteger h = BigInteger.ValueOf(0xFF06);
  400. ECCurve curve = ConfigureCurve(new F2mCurve(
  401. 272,
  402. 1, 3, 56,
  403. FromHex("91A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20"),
  404. FromHex("7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7"),
  405. n, h));
  406. X9ECPoint G = ConfigureBasepoint(curve,
  407. "026108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D");
  408. return new X9ECParameters(curve, G, n, h);
  409. }
  410. }
  411. internal class C2pnb304w1Holder
  412. : X9ECParametersHolder
  413. {
  414. private C2pnb304w1Holder() {}
  415. internal static readonly X9ECParametersHolder Instance = new C2pnb304w1Holder();
  416. protected override X9ECParameters CreateParameters()
  417. {
  418. BigInteger n = FromHex("0101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D");
  419. BigInteger h = BigInteger.ValueOf(0xFE2E);
  420. ECCurve curve = ConfigureCurve(new F2mCurve(
  421. 304,
  422. 1, 2, 11,
  423. FromHex("FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681"),
  424. FromHex("BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE"),
  425. n, h));
  426. X9ECPoint G = ConfigureBasepoint(curve,
  427. "02197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614");
  428. return new X9ECParameters(curve, G, n, h);
  429. }
  430. }
  431. internal class C2tnb359v1Holder
  432. : X9ECParametersHolder
  433. {
  434. private C2tnb359v1Holder() {}
  435. internal static readonly X9ECParametersHolder Instance = new C2tnb359v1Holder();
  436. protected override X9ECParameters CreateParameters()
  437. {
  438. BigInteger n = FromHex("01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B");
  439. BigInteger h = BigInteger.ValueOf(0x4C);
  440. ECCurve curve = ConfigureCurve(new F2mCurve(
  441. 359,
  442. 68,
  443. FromHex("5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557"),
  444. FromHex("2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988"),
  445. n, h));
  446. X9ECPoint G = ConfigureBasepoint(curve,
  447. "033C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097");
  448. return new X9ECParameters(curve, G, n, h);
  449. }
  450. }
  451. internal class C2pnb368w1Holder
  452. : X9ECParametersHolder
  453. {
  454. private C2pnb368w1Holder() {}
  455. internal static readonly X9ECParametersHolder Instance = new C2pnb368w1Holder();
  456. protected override X9ECParameters CreateParameters()
  457. {
  458. BigInteger n = FromHex("010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967");
  459. BigInteger h = BigInteger.ValueOf(0xFF70);
  460. ECCurve curve = ConfigureCurve(new F2mCurve(
  461. 368,
  462. 1, 2, 85,
  463. FromHex("E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D"),
  464. FromHex("FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A"),
  465. n, h));
  466. X9ECPoint G = ConfigureBasepoint(curve,
  467. "021085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F");
  468. return new X9ECParameters(curve, G, n, h);
  469. }
  470. }
  471. internal class C2tnb431r1Holder
  472. : X9ECParametersHolder
  473. {
  474. private C2tnb431r1Holder() {}
  475. internal static readonly X9ECParametersHolder Instance = new C2tnb431r1Holder();
  476. protected override X9ECParameters CreateParameters()
  477. {
  478. BigInteger n = FromHex("0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91");
  479. BigInteger h = BigInteger.ValueOf(0x2760);
  480. ECCurve curve = ConfigureCurve(new F2mCurve(
  481. 431,
  482. 120,
  483. FromHex("1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F"),
  484. FromHex("10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618"),
  485. n, h));
  486. X9ECPoint G = ConfigureBasepoint(curve,
  487. "02120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7");
  488. return new X9ECParameters(curve, G, n, h);
  489. }
  490. }
  491. private static readonly IDictionary objIds = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateHashtable();
  492. private static readonly IDictionary curves = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateHashtable();
  493. private static readonly IDictionary names = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateHashtable();
  494. private static void DefineCurve(
  495. string name,
  496. DerObjectIdentifier oid,
  497. X9ECParametersHolder holder)
  498. {
  499. objIds.Add(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.ToUpperInvariant(name), oid);
  500. names.Add(oid, name);
  501. curves.Add(oid, holder);
  502. }
  503. static X962NamedCurves()
  504. {
  505. DefineCurve("prime192v1", X9ObjectIdentifiers.Prime192v1, Prime192v1Holder.Instance);
  506. DefineCurve("prime192v2", X9ObjectIdentifiers.Prime192v2, Prime192v2Holder.Instance);
  507. DefineCurve("prime192v3", X9ObjectIdentifiers.Prime192v3, Prime192v3Holder.Instance);
  508. DefineCurve("prime239v1", X9ObjectIdentifiers.Prime239v1, Prime239v1Holder.Instance);
  509. DefineCurve("prime239v2", X9ObjectIdentifiers.Prime239v2, Prime239v2Holder.Instance);
  510. DefineCurve("prime239v3", X9ObjectIdentifiers.Prime239v3, Prime239v3Holder.Instance);
  511. DefineCurve("prime256v1", X9ObjectIdentifiers.Prime256v1, Prime256v1Holder.Instance);
  512. DefineCurve("c2pnb163v1", X9ObjectIdentifiers.C2Pnb163v1, C2pnb163v1Holder.Instance);
  513. DefineCurve("c2pnb163v2", X9ObjectIdentifiers.C2Pnb163v2, C2pnb163v2Holder.Instance);
  514. DefineCurve("c2pnb163v3", X9ObjectIdentifiers.C2Pnb163v3, C2pnb163v3Holder.Instance);
  515. DefineCurve("c2pnb176w1", X9ObjectIdentifiers.C2Pnb176w1, C2pnb176w1Holder.Instance);
  516. DefineCurve("c2tnb191v1", X9ObjectIdentifiers.C2Tnb191v1, C2tnb191v1Holder.Instance);
  517. DefineCurve("c2tnb191v2", X9ObjectIdentifiers.C2Tnb191v2, C2tnb191v2Holder.Instance);
  518. DefineCurve("c2tnb191v3", X9ObjectIdentifiers.C2Tnb191v3, C2tnb191v3Holder.Instance);
  519. DefineCurve("c2pnb208w1", X9ObjectIdentifiers.C2Pnb208w1, C2pnb208w1Holder.Instance);
  520. DefineCurve("c2tnb239v1", X9ObjectIdentifiers.C2Tnb239v1, C2tnb239v1Holder.Instance);
  521. DefineCurve("c2tnb239v2", X9ObjectIdentifiers.C2Tnb239v2, C2tnb239v2Holder.Instance);
  522. DefineCurve("c2tnb239v3", X9ObjectIdentifiers.C2Tnb239v3, C2tnb239v3Holder.Instance);
  523. DefineCurve("c2pnb272w1", X9ObjectIdentifiers.C2Pnb272w1, C2pnb272w1Holder.Instance);
  524. DefineCurve("c2pnb304w1", X9ObjectIdentifiers.C2Pnb304w1, C2pnb304w1Holder.Instance);
  525. DefineCurve("c2tnb359v1", X9ObjectIdentifiers.C2Tnb359v1, C2tnb359v1Holder.Instance);
  526. DefineCurve("c2pnb368w1", X9ObjectIdentifiers.C2Pnb368w1, C2pnb368w1Holder.Instance);
  527. DefineCurve("c2tnb431r1", X9ObjectIdentifiers.C2Tnb431r1, C2tnb431r1Holder.Instance);
  528. }
  529. public static X9ECParameters GetByName(
  530. string name)
  531. {
  532. DerObjectIdentifier oid = GetOid(name);
  533. return oid == null ? null : GetByOid(oid);
  534. }
  535. /**
  536. * return the X9ECParameters object for the named curve represented by
  537. * the passed in object identifier. Null if the curve isn't present.
  538. *
  539. * @param oid an object identifier representing a named curve, if present.
  540. */
  541. public static X9ECParameters GetByOid(
  542. DerObjectIdentifier oid)
  543. {
  544. X9ECParametersHolder holder = (X9ECParametersHolder)curves[oid];
  545. return holder == null ? null : holder.Parameters;
  546. }
  547. /**
  548. * return the object identifier signified by the passed in name. Null
  549. * if there is no object identifier associated with name.
  550. *
  551. * @return the object identifier associated with name, if present.
  552. */
  553. public static DerObjectIdentifier GetOid(
  554. string name)
  555. {
  556. return (DerObjectIdentifier)objIds[BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.ToUpperInvariant(name)];
  557. }
  558. /**
  559. * return the named curve name represented by the given object identifier.
  560. */
  561. public static string GetName(
  562. DerObjectIdentifier oid)
  563. {
  564. return (string)names[oid];
  565. }
  566. /**
  567. * returns an enumeration containing the name strings for curves
  568. * contained in this structure.
  569. */
  570. public static IEnumerable Names
  571. {
  572. get { return new EnumerableProxy(names.Values); }
  573. }
  574. }
  575. }
  576. #pragma warning restore
  577. #endif