7 #if CRYPTOPP_MSC_VERSION 9 # pragma warning(disable: 4127 4189 4505) 12 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE 13 # pragma GCC diagnostic push 14 # pragma GCC diagnostic ignored "-Wunused-function" 17 #ifndef CRYPTOPP_IMPORTS 32 #ifndef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES 33 extern const char ECCRYPTO_FNAME[] = __FILE__;
39 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) 40 static void ECDSA_TestInstantiations()
54 ANONYMOUS_NAMESPACE_BEGIN
57 unsigned int l = x.ByteCount();
85 ANONYMOUS_NAMESPACE_END
93 EcRecommendedParameters(
const OID &oid,
unsigned int t2,
unsigned int t3,
unsigned int t4,
const char *a,
const char *b,
const char *g,
const char *n,
unsigned int h)
94 : oid(oid), a(a), b(b), g(g), n(n), h(h), t0(0), t1(0), t2(t2), t3(t3), t4(t4) {}
95 EcRecommendedParameters(
const OID &oid,
unsigned int t0,
unsigned int t1,
unsigned int t2,
unsigned int t3,
unsigned int t4,
const char *a,
const char *b,
const char *g,
const char *n,
unsigned int h)
96 : oid(oid), a(a), b(b), g(g), n(n), h(h), t0(t0), t1(t1), t2(t2), t3(t3), t4(t4) {}
108 const char *a, *b, *g, *n;
109 unsigned int h, t0, t1, t2, t3, t4;
114 EcRecommendedParameters(
const OID &oid,
const char *p,
const char *a,
const char *b,
const char *g,
const char *n,
unsigned int h)
115 : oid(oid), p(p), a(a), b(b), g(g), n(n), h(h) {}
125 const char *p, *a, *b, *g, *n;
131 template <
typename T>
133 template <
typename T>
135 template <
typename T>
145 "000000000000000000000000000000000000000001",
146 "000000000000000000000000000000000000000001",
147 "0402FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE80289070FB05D38FF58321F2E800536D538CCDAA3D9",
148 "04000000000000000000020108A2E0CC0D99F8A5EF",
152 "07B6882CAAEFA84F9554FF8428BD88E246D2782AE2",
153 "0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9",
154 "040369979697AB43897789566789567F787A7876A65400435EDB42EFAFB2989D51FEFCE3C80988F41FF883",
155 "03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B",
159 "000000000000000000000000000000000000000000000000000000000000",
160 "000000000000000000000000000000000000000000000000000000000001",
161 "0429A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA",
162 "2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5",
166 "003088250CA6E7C7FE649CE85820F7",
167 "00E8BEE4D3E2260744188BE0E9C723",
168 "04009D73616F35F4AB1407D73562C10F00A52830277958EE84D1315ED31886",
169 "0100000000000000D9CCEC8A39E56F",
173 "00689918DBEC7E5A0DD6DFC0AA55C7",
174 "0095E9A9EC9B297BD4BF36E059184F",
175 "0401A57A6A7B26CA5EF52FCDB816479700B3ADC94ED1FE674C06E695BABA1D",
176 "010000000000000108789B2496AF93",
180 "000000000000000000000000000000000000000001",
181 "020A601907B8C953CA1481EB10512F78744A3205FD",
182 "0403F0EBA16286A2D57EA0991168D4994637E8343E3600D51FBC6C71A0094FA2CDD545B11C5C0C797324F1",
183 "040000000000000000000292FE77E70C12A4234C33",
187 "000000000000000000000000000000000000000000000000000000000000000000000000",
188 "000000000000000000000000000000000000000000000000000000000000000000000001",
189 "040503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC245849283601CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259",
190 "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61",
194 "000000000000000000000000000000000000000000000000000000000000000000000001",
195 "027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5",
196 "0405F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B1205303676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4",
197 "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307",
201 "07A11B09A76B562144418FF3FF8C2570B8",
202 "0217C05610884B63B9C6C7291678F9D341",
203 "040081BAF91FDF9833C40F9C181343638399078C6E7EA38C001F73C8134B1B4EF9E150",
204 "0400000000000000023123953A9464B54D",
208 "03E5A88919D7CAFCBF415F07C2176573B2",
209 "04B8266A46C55657AC734CE38F018F2192",
210 "040356DCD8F2F95031AD652D23951BB366A80648F06D867940A5366D9E265DE9EB240F",
211 "0400000000000000016954A233049BA98F",
215 "0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01",
216 "00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814",
217 "0401F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E10025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05",
218 "01000000000000000000000000C7F34A778F443ACC920EBA49",
222 "0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B",
223 "00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE",
224 "0400D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C",
225 "010000000000000000000000015AAB561B005413CCD4EE99D5",
229 "000000000000000000000000000000000000000000000000000000000000",
230 "000000000000000000000000000000000000000000000000000000000001",
231 "04017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD612601DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3",
232 "8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF",
236 "000000000000000000000000000000000000000000000000000000000001",
237 "0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD",
238 "0400FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052",
239 "01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7",
243 "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
244 "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
245 "040060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE902374601E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B",
246 "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF",
250 "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
251 "0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F",
252 "04015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A70061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706",
253 "010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173",
257 "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
258 "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
259 "04026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C89720349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3",
260 "020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001",
264 "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
265 "02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A",
266 "040303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B",
267 "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47",
271 end = rec +
sizeof(rec)/
sizeof(rec[0]);
280 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF",
281 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC",
282 "28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93",
283 "04" "32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7" 284 "BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0",
285 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123",
288 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF",
289 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC",
290 "28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93",
291 "04" "32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7" 292 "BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0",
293 "FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123",
296 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
297 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
298 "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1",
299 "04188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF101207192B95FFC8DA78631011ED6B24CDD573F977A11E794811",
300 "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831",
303 "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF",
304 "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC",
305 "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B",
306 "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5",
307 "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551",
310 "E95E4A5F737059DC60DFC7AD95B3D8139515620F",
311 "340E7BE2A280EB74E2BE61BADA745D97E8F7C300",
312 "1E589A8595423412134FAA2DBDEC95C8D8675E58",
313 "04BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC31667CB477A1A8EC338F94741669C976316DA6321",
314 "E95E4A5F737059DC60DF5991D45029409E60FC09",
317 "C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297",
318 "6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF",
319 "469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9",
320 "04C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD614B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F",
321 "C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1",
324 "D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF",
325 "68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43",
326 "2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B",
327 "040D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD",
328 "D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F",
331 "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377",
332 "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9",
333 "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6",
334 "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997",
335 "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7",
338 "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27",
339 "3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4",
340 "520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6",
341 "0443BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E2061114FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1",
342 "D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311",
345 "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53",
346 "7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826",
347 "04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11",
348 "041D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315",
349 "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565",
352 "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3",
353 "7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA",
354 "3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723",
355 "0481AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F8227DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892",
356 "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069",
359 "DB7C2ABF62E35E668076BEAD208B",
360 "DB7C2ABF62E35E668076BEAD2088",
361 "659EF8BA043916EEDE8911702B22",
362 "0409487239995A5EE76B55F9C2F098A89CE5AF8724C0A23E0E0FF77500",
363 "DB7C2ABF62E35E7628DFAC6561C5",
366 "DB7C2ABF62E35E668076BEAD208B",
367 "6127C24C05F38A0AAAF65C0EF02C",
368 "51DEF1815DB5ED74FCC34C85D709",
369 "044BA30AB5E892B4E1649DD0928643ADCD46F5882E3747DEF36E956E97",
370 "36DF0AAFD8B8D7597CA10520D04B",
373 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF",
374 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC",
375 "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45",
376 "044A96B5688EF573284664698968C38BB913CBFC8223A628553168947D59DCC912042351377AC5FB32",
377 "0100000000000000000001F4C8F927AED3CA752257",
380 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
381 "0000000000000000000000000000000000000000",
382 "0000000000000000000000000000000000000007",
383 "043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE",
384 "0100000000000000000001B8FA16DFAB9ACA16B6B3",
387 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",
388 "0000000000000000000000000000000000000000000000000000000000000000",
389 "0000000000000000000000000000000000000000000000000000000000000007",
390 "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",
391 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",
394 "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF",
395 "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC",
396 "E87579C11079F43DD824993C2CEE5ED3",
397 "04161FF7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83",
398 "FFFFFFFE0000000075A30D1B9038A115",
401 "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF",
402 "D6031998D1B3BBFEBF59CC9BBFF9AEE1",
403 "5EEEFCA380D02919DC2C6558BB6D8A5D",
404 "047B6AA5D85E572983E6FB32A7CDEBC14027B6916A894D3AEE7106FE805FC34B44",
405 "3FFFFFFF7FFFFFFFBE0024720613B5A3",
408 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
409 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70",
410 "B4E134D3FB59EB8BAB57274904664D5AF50388BA",
411 "0452DCB034293A117E1F4FF11B30F7199D3144CE6DFEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E",
412 "0100000000000000000000351EE786A818F3A1A16B",
415 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37",
416 "000000000000000000000000000000000000000000000000",
417 "000000000000000000000000000000000000000000000003",
418 "04DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D",
419 "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D",
422 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D",
423 "00000000000000000000000000000000000000000000000000000000",
424 "00000000000000000000000000000000000000000000000000000005",
425 "04A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5",
426 "010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7",
429 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001",
430 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE",
431 "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
432 "04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34",
433 "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D",
436 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF",
437 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC",
438 "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF",
439 "04AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB73617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F",
440 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973",
443 "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
444 "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC",
445 "0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00",
446 "0400C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650",
447 "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409",
451 end = rec +
sizeof(rec)/
sizeof(rec[0]);
457 GetRecommendedParameters(begin, end);
459 return (it == end ?
OID() : it->oid);
465 GetRecommendedParameters(begin, end);
467 if (it == end || it->oid != oid)
473 this->m_groupPrecomputation.SetCurve(*ec);
477 bool result = GetCurve().DecodePoint(G, ssG, (
size_t)ssG.
MaxRetrievable());
478 this->SetSubgroupGenerator(G);
496 this->ThrowIfTypeMismatch(name,
typeid(
OID), valueType);
497 *
reinterpret_cast<OID *
>(pValue) = m_oid;
501 return GetValueHelper<DL_GroupParameters<Element> >(
this, name, valueType, pValue).Assignable()
502 CRYPTOPP_GET_FUNCTION_ENTRY(
Curve);
522 Initialize(ec, G, n, k);
531 CRYPTOPP_UNUSED(rng);
536 throw NotImplemented(
"DL_GroupParameters_EC<EC>: curve generation is not implemented yet");
546 if (b == OBJECT_IDENTIFIER)
552 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1);
553 EllipticCurve ec(seq);
554 Point G = ec.BERDecodePoint(seq);
557 bool cofactorPresent = !seq.EndReached();
564 Initialize(ec, G, n, k);
571 if (m_encodeAsOID && !m_oid.Empty())
576 DEREncodeUnsigned<word32>(seq, 1);
577 GetCurve().DEREncode(seq);
578 GetCurve().DEREncodePoint(seq, this->GetSubgroupGenerator(), m_compress);
591 Integer q = GetCurve().FieldSize();
593 m_k = (q+2*qSqrt+1)/m_n;
602 return ConvertToInteger(element.x);
608 bool pass = GetCurve().ValidateParameters(rng, level);
611 Integer q = GetCurve().FieldSize();
612 pass = pass && m_n!=q;
618 pass = pass && m_n>4*qSqrt;
622 pass = pass && (m_k.IsZero() || m_k == (q+2*qSqrt+1)/m_n);
624 pass = pass && CheckMOVCondition(q, m_n);
634 bool pass = !IsIdentity(g);
636 pass = pass && GetCurve().VerifyPoint(g);
647 if (level >= 2 && pass)
649 const Integer &q = GetSubgroupOrder();
650 Element gq = gpc ? gpc->
Exponentiate(this->GetGroupPrecomputation(), q) : this->ExponentiateElement(g, q);
651 pass = pass && IsIdentity(gq);
660 GetCurve().SimultaneousMultiply(results, base, exponents, exponentsCount);
666 return GetCurve().Add(a, b);
672 return GetCurve().CascadeMultiply(exponent1, element1, exponent2, element2);
678 return ASN1::id_ecPublicKey();
686 CRYPTOPP_UNUSED(parametersPresent);
688 typename EC::Point P;
689 if (!this->GetGroupParameters().GetCurve().DecodePoint(P, bt, size))
691 this->SetPublicElement(P);
697 this->GetGroupParameters().GetCurve().EncodePoint(bt, this->GetPublicElement(), this->GetGroupParameters().GetPointCompression());
705 CRYPTOPP_UNUSED(size);
708 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1);
711 if (!dec.IsDefiniteLength())
714 x.Decode(dec, (
size_t)dec.RemainingLength());
716 if (!parametersPresent && seq.PeekByte() != (CONTEXT_SPECIFIC | CONSTRUCTED | 0))
718 if (!seq.EndReached() && seq.PeekByte() == (CONTEXT_SPECIFIC | CONSTRUCTED | 0))
721 this->AccessGroupParameters().BERDecode(parameters);
722 parameters.MessageEnd();
724 if (!seq.EndReached())
728 unsigned int unusedBits;
731 publicKey.MessageEnd();
733 if (!(unusedBits == 0 && this->GetGroupParameters().GetCurve().DecodePoint(Q, subjectPublicKey, subjectPublicKey.
size())))
738 this->SetPrivateExponent(x);
745 DEREncodeUnsigned<word32>(privateKey, 1);
748 this->GetPrivateExponent().DEREncodeAsOctetString(privateKey, this->GetGroupParameters().GetSubgroupOrder().ByteCount());
749 privateKey.MessageEnd();
757 CRYPTOPP_UNUSED(parametersPresent);
759 typename EC::Point P;
760 if (!this->GetGroupParameters().GetCurve().DecodePoint(P, bt, size))
762 this->SetPublicElement(P);
768 this->GetGroupParameters().GetCurve().EncodePoint(bt, this->GetPublicElement(), this->GetGroupParameters().GetPointCompression());
776 CRYPTOPP_UNUSED(size);
779 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1);
782 if (!dec.IsDefiniteLength())
785 x.Decode(dec, (
size_t)dec.RemainingLength());
787 if (!parametersPresent && seq.PeekByte() != (CONTEXT_SPECIFIC | CONSTRUCTED | 0))
789 if (!seq.EndReached() && seq.PeekByte() == (CONTEXT_SPECIFIC | CONSTRUCTED | 0))
792 this->AccessGroupParameters().BERDecode(parameters);
793 parameters.MessageEnd();
795 if (!seq.EndReached())
799 unsigned int unusedBits;
802 publicKey.MessageEnd();
804 if (!(unusedBits == 0 && this->GetGroupParameters().GetCurve().DecodePoint(Q, subjectPublicKey, subjectPublicKey.
size())))
809 this->SetPrivateExponent(x);
816 DEREncodeUnsigned<word32>(privateKey, 1);
819 this->GetPrivateExponent().DEREncodeAsOctetString(privateKey, this->GetGroupParameters().GetSubgroupOrder().ByteCount());
820 privateKey.MessageEnd();
Standard names for retrieving values by name when working with NameValuePairs.
An invalid argument was detected.
void DEREncodePublicKey(BufferedTransformation &bt) const
encode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
virtual Element Exponentiate(const DL_GroupPrecomputation< Element > &group, const Integer &exponent) const =0
Exponentiates an element.
bool ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const
Check the group for errors.
void DEREncodePublicKey(BufferedTransformation &bt) const
encode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
Utility functions for the Crypto++ library.
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
void DEREncodePrivateKey(BufferedTransformation &bt) const
encode privateKey part of privateKeyInfo, without the OCTET STRING header
T GetValueWithDefault(const char *name, T defaultValue) const
Get a named value.
GF(2^n) with Trinomial Basis.
Elliptic Curve over GF(p), where p is prime.
Decode base 16 data back to bytes.
ASN.1 object identifiers for algorthms and schemes.
Classes for automatic resource management.
Library configuration file.
Interface for random number generators.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
this implementation doesn't actually generate a curve, it just initializes the parameters with existi...
String-based implementation of the Source interface.
static const Integer & One()
Integer representing 1.
Polynomial with Coefficients in GF(2)
Integer GetCofactor() const
Retrieves the cofactor.
Pointer that overloads operator ->
Classes for Elliptic Curves over binary fields.
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
MQV domain for performing authenticated key agreement.
A method was called which was not implemented.
bool VerifyPrime(RandomNumberGenerator &rng, const Integer &p, unsigned int level=1)
Verifies a number is probably prime.
Classes for HexEncoder and HexDecoder.
const char * GroupOID()
OID.
Multiple precision integer with arithmetic operations.
Elliptic Curve over GF(2^n)
void DEREncodePrivateKey(BufferedTransformation &bt) const
encode privateKey part of privateKeyInfo, without the OCTET STRING header
const char * SubgroupGenerator()
Integer, ECP::Point, or EC2N::Point.
bool IsEven() const
Determines if the Integer is even parity.
void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode privateKey part of privateKeyInfo, without the OCTET STRING header
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
void BERDecodeError()
Raises a BERDecodeErr.
Classes and functions for working with ANS.1 objects.
DL_FixedBasePrecomputation interface.
Elliptic Curve Parameters.
void GetRequiredParameter(const char *className, const char *name, T &value) const
Retrieves a required name/value pair.
unsigned int BitCount() const
Determines the number of bits required to represent the Integer.
Implementation of BufferedTransformation's attachment interface.
GF(2^n) with Pentanomial Basis.
Classes and functions for number theoretic operations.
unsigned int DiscreteLogWorkFactor(unsigned int bitlength)
Estimate work factor.
const char * Cofactor()
Integer.
Exception thrown when an unknown object identifier is encountered.
Multiple precision integer with arithmetic operations.
static const Integer & Zero()
Integer representing 0.
void Initialize(const EllipticCurve &ec, const Point &G, const Integer &n, const Integer &k=Integer::Zero())
Initialize an EC GroupParameters using {EC,G,n,k}.
size_t BERDecodeBitString(BufferedTransformation &bt, SecByteBlock &str, unsigned int &unusedBits)
DER decode bit string.
void BERDecode(const byte *input, size_t inputLen)
Decode from BER format.
Classes and functions for Elliptic Curves over prime and binary fields.
Crypto++ library namespace.
bool GetValue(const char *name, T &value) const
Get a named value.
const char * Curve()
ECP or EC2N.
Integer SquareRoot() const
Extract square root.
const char * SubgroupOrder()
Integer.
void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header ...
size_type size() const
Provides the count of elements in the SecBlock.
void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size)
decode privateKey part of privateKeyInfo, without the OCTET STRING header
Interface for retrieving values given their names.
Template implementing constructors for public key algorithm classes.