bignp256 0.14.0-rc.10

Pure Rust implementation of the Bign P-256 (a.k.a. bign-curve256v1) elliptic curve as defined in STB 34.101.45-2013, with general purpose curve arithmetic
Documentation
//! Test vectors for the bignp256 group.

use hex_literal::hex;

/// Repeated addition of the generator.
///
/// These are the first 20 test vectors, generated by sagemath snippet.
pub const ADD_TEST_VECTORS: &[([u8; 32], [u8; 32])] = &[
    // k = 1,..,20, p += G
    (
        hex!("0000000000000000000000000000000000000000000000000000000000000000"),
        hex!("936A510418CF291E52F608C4663991785D83D651A3C9E45C9FD616FB3CFCF76B"),
    ),
    (
        hex!("95098F82B33BF507C8D0AD2C0C098355B35BC9AD1D2611361ED205D9E319842D"),
        hex!("8A25CF497638026CCD7E3A938A1E62494856540077B2F5FA4E75DC1BD89026E6"),
    ),
    (
        hex!("4E82894985109DCC4B231C2B0C0612E0F5922E66F02C2778FBEFF4CDD58EC537"),
        hex!("843E28327B17EFF0E37A1E7A7569C10227315FD312E16041B985CBDAB3C99BFD"),
    ),
    (
        hex!("13E901F3FE86D3CD99832F1D6AB2CC735E0E91794BD2B4F9675C781D2FF1D6A9"),
        hex!("E56D43B83275DC6D9B52ED2EE9D0CCAE43ED0797072E31A116C17293E742DDEE"),
    ),
    (
        hex!("46F712367A9C6E1B3E0D12111F1173CCBBFF9F004977F2B1C7F36E1F548FA05E"),
        hex!("51A7F3C4EC9E233021483D28765982C7BEEE709DBCA0F878F369D31BE3ABAAD1"),
    ),
    (
        hex!("CC4200AD11DFEBC8C04DBE7295BF98EE3A188EFD01C2660213ECD8D0182BFBA0"),
        hex!("1B890038547BB3F3780BA1A9C84B0604AA554D0FAD6739CE6BAC1BA756CC1C27"),
    ),
    (
        hex!("44985F25A839F7654B6C5F25F244B6B9547B34C2F98AB072692059A44ACDBB0B"),
        hex!("EC359133F5DB8676269A06058564CF3002EC9AAB899FF3428BC1ADA1E37E71BB"),
    ),
    (
        hex!("F2A236DF522188EBA4737459F4C5711EFD835B38C0A2692CAA65DE8D78A2DDD2"),
        hex!("69B76AA1A14C149C4A5121E93B483BB4C546C31BBEB6A0B8CCF9B28437DDE022"),
    ),
    (
        hex!("0EC856F39F1B47F8C999FFF86473273F136985C8632B22FE42A30848781CF179"),
        hex!("6B518D8EAE3348D6D1D74801E5B94919D2BC486DF9B51C0C43DAA5563F4B5D50"),
    ),
    (
        hex!("6E62BE0966F04F8FAAF4DDEFCD3F23731C1680027E2F6E29C39DB3BE1A904FBE"),
        hex!("6C0C0109634CC6E5AAB83882D6941DEB95F6ABC1578B01AF2FA3BFBB58AC071F"),
    ),
    (
        hex!("28370583A60E8A22BCDE8DB6557A6EE6E6BA34118A62094613A62FCC2F844A11"),
        hex!("1B7CD760B720C8FD41A36B929F7B0BD9573EBCFFE07B478AB18A4112D393A592"),
    ),
    (
        hex!("92CC3C7F9B841E4325316FA6C2295CAB2CF861BB42EF6872FFC55017A67B977D"),
        hex!("533E8621DA87DD56181B62F2D065F2C14D8BBE7FD6F59F02C3053DAED5AB12DE"),
    ),
    (
        hex!("19479DA849DB0C462D9B04B8E1784C2B9014730AAFDD1DB8BA0D48434C2CC230"),
        hex!("BC6BA371D5C6AA3311ACB6FF74CC4244ECC6D3B98A1230DAA967CC77BE23286C"),
    ),
    (
        hex!("3ED962A3DEB3589E88DF283A5D2750DD4EB891602B884774FEEF624205EC5608"),
        hex!("E558C967B0D8C2DD3540839233AA8672E6F42B1E28AF10CCEC733974B1E51F1E"),
    ),
    (
        hex!("94B673B16EE862219A86BE9D85871E75096A230BF90FA246764CC3BB96B88D84"),
        hex!("521EF49D4572481851098E771F6095479CA475579A245921552252A8518E877B"),
    ),
    (
        hex!("C9A3483D5123094286E47B20ED588611E01A5D37254BA709074217C551BACA34"),
        hex!("15DBB684355F32861CC57D62BC061192F54E15A4BCE211E29EEF78F8A86E1B2E"),
    ),
    (
        hex!("1208B6127A522C3405BE7044B057DAB25DC2BE7B55677A8633B6AD1647E6734E"),
        hex!("8291E19C7A09B02D41BCF9D178B7CB762B3A961976EE42B404FD2C8B289AED3F"),
    ),
    (
        hex!("F8F2DF9874D930DC0E8CBB53EA4DEDBB60AB02A1733DE3269626F0048083C2F0"),
        hex!("0CE64835B98AD4399B6D9E82CFE78D8A52742F86F4BDF4E9E5FA13F06CE10345"),
    ),
    (
        hex!("0BE7EE75D3FDF4E7367E9998FD18A7245FED8B1F1060A944B5E633AB87FEE8F5"),
        hex!("BD914B71C1B55AB7A3BE548B4EA999A5F80DA3856EA43491C8CDB99FE2DCCFFD"),
    ),
    (
        hex!("45D9461CBA540E9D09172F13F25D69D165C279F7086750191C984ABB2E403012"),
        hex!("B7EE27C3243300E1874D7DCDE2F893AE2FFA21F20195D51F1E635F4E9AA7B7FB"),
    ),
];

// Snippet for generation:
// p = 2**256 - 189
// a = 2**256 - 192
// b = 0x77CE6C1515F3A8EDD2C13AABE4D8FBBE4CF55069978B9253B22E7D6BD69C03F1
// Gx = 0
// Gy = 0x6BF7FC3CFB16D69F5CE4C9A351D6835D78913966C408F6521E29CF1804516A93
// h = 1
//
// # Create the finite field and the elliptic curve
// F = GF(p)
// E = EllipticCurve(F, [a, b])
//
// # Define the base point
// G = E(Gx, Gy)
// n = G.order()
//
// # Generate test vectors
// def generate_mul_test_vectors(num_vectors):
//     vectors = []
//     for _ in range(num_vectors):
//         k = ZZ.random_element(1, n)
//         P = k * G
//         vectors.append((k, P))
//     return vectors
//
// # Number of test vectors to generate
// num_vectors = 20
// test_vectors = generate_mul_test_vectors(num_vectors)
//
// # Print the test vectors in the required format
// for k, P in test_vectors:
//     k_hex = f"{k:064X}"
//     Px_hex = f"{int(P[0]):064X}"
//     Py_hex = f"{int(P[1]):064X}"
//     print(f'    (')
//     print(f'        hex!("{k_hex}"),')
//     print(f'        hex!("{Px_hex}"),')
//     print(f'        hex!("{Py_hex}"),')
//     print(f'    ),')

/// Scalar multiplication with the generator.
///
/// These are the test vectors from sagemath snippet,that are not part of [`ADD_TEST_VECTORS`].
/// k values is generated randomly
pub const MUL_TEST_VECTORS: &[([u8; 32], [u8; 32], [u8; 32])] = &[
    (
        hex!("E63D99FD179E9B99500D570DB90165678A4F9D6AFEA2990225C2D8637190D4CE"),
        hex!("323FE94FDA27A2BE37982EDCD575BE0AE0A35179F9D1672425A6EEF52549497F"),
        hex!("A3B630037C483B4B1535DAFF8C1E8ABD72CD5800B60990B921B73DF59FEB0876"),
    ),
    (
        hex!("6C3CA1CD0D4A05613E2955EF010F94DE682813D3563FCCA0F543811D39C9708F"),
        hex!("DB99B5EE92B3F34ED56584E32A0582EDA6FB184E5B650204C7A378F531FBF696"),
        hex!("7E9708C92F9B2EF839F3EF4B992EF7BE3384BCDB61BE7EBC12B83A34759A9836"),
    ),
    (
        hex!("36695971AE504E749C20E187BF50AD1ECF2F4862C7B9C5AB895319DD21C57849"),
        hex!("5A7186BF9DAD2A514536CAE72761B6FF514449E22100DF5F3BD8D0077A19DF85"),
        hex!("24F7D505DE40AA051D11AB7F750B5CDDFFF80903CBF4A1A6653E58E12BA2F6C5"),
    ),
    (
        hex!("2C65BB3A38029B7A6736BC66F54D966330DE068E1EF4B8768EA2ACB976E60358"),
        hex!("8BA6E43C9968EE86983ED5162FAF01C460C2E39676577046D945BE5B1C58DCB6"),
        hex!("824311516672857E779AC5DE0DD7256E3568BC3B8951CBB95EDCC9A266D951B8"),
    ),
    (
        hex!("508EE623E263234C1274AF7A676F24279151385AE864180C178206DC86624833"),
        hex!("3B964A65899CB5A2C97ED9B93E17B501EBF8847FA3854189A4FA58EF2A6D1011"),
        hex!("5994389948E0C544B6BB6BD451637157594CB3D8F83118497BCE5CADB990979F"),
    ),
    (
        hex!("8A7A2EF72BA9051259A58EC35EA41A8579A0ECC7E730C0F043E488010752D2FA"),
        hex!("99616A6A3EF6260B2FD10748C85D6D46A992BD90DFADFD9813E2F6D066B1344F"),
        hex!("86AE989D4C3E10FC07E346B10359C0206EBDEAC157170B3F6E8D077D33BD341B"),
    ),
    (
        hex!("1E1B9B5B65ACD1DDDFA00F688D0DD13417CBA176B173B2EC7A1B506813506667"),
        hex!("916167A4FAD8AFF877521A872FBC6B56D3EFE3549F5918BC329228A10E7B769F"),
        hex!("A87E144143307390E7A2A28DA9B0E4220DDBC87A08469CC236799B5696B6F7A8"),
    ),
    (
        hex!("C1266DF8F8EBC63A27F45F721BA6CFCF0A0EE9A73EA92059872A2FB057C0E9BD"),
        hex!("BB6B6FCD22251571F1953D510CEBCEA338E4D9F8886B59C8E2068569AD7B705C"),
        hex!("2703EF5A099AC40C4F62423EFA5F6FF47CA1202D0DAF61FE8D544D11B3F037AD"),
    ),
    (
        hex!("44DB89FED3F93723380E433BF8913D1126E9434B91FA15E615707D16F9D518D8"),
        hex!("378E1906178B8D5518DD8A84A393A017501EB2C5324586F4B0FBCF55EC4A1C33"),
        hex!("42DFF03BD779BD880ED042A3DA64B3CD6EAA5B6BAA87550C80A20E638436F7C4"),
    ),
    (
        hex!("2750FE88BF26F6E66D288B671014ED28254E691D59C2BEE63BDE4B12590F55C3"),
        hex!("A514C14D494B2C99E67F18795F93E0F3168D42366F2B9508573D2781C0C42990"),
        hex!("91522858B0F78DD49C08913FD4281995BF01131B7E6CEFB73EC6E3CE1B62475F"),
    ),
    (
        hex!("F4E1DC80E93332F82A709EB202D616E0CF779CF9AD68CD120CC2E96483AFA209"),
        hex!("4E203A8766C356AB8166EDFFEB3952E011C9CBF485758AD552B5923EB71BBAC6"),
        hex!("2A635A4461058A6D19F3B2ABFD4215E2798B92BF3CCD9A2406BED3B8F75BB125"),
    ),
    (
        hex!("F22AF699C3CB17A09FD0A540B40E726648B6F04E80FC4D1EBE0EABCEB31EC7DB"),
        hex!("678505CA39A1A3F31F4BC80A5D8C9E951182CD73FBE90CB2719BDF6E44627234"),
        hex!("7B0A5F132B902B856D4A8B0627079F1BB5FC0E42BBBDEA6D95B8D575CFF48896"),
    ),
    (
        hex!("87E8AF4747700D7DB6381819033C78B28F917D6563E819B14364A30D3BA268E8"),
        hex!("EE4B9A269199528A07FCCAA27857E4339AAB88785745418B1FCF577DB54C6943"),
        hex!("49CBCA4A038556DDE4A7AE974538A43D6C6D03C8DFA433C4947FCC1507278666"),
    ),
    (
        hex!("008FBCE2BCE3D49B3FE11BCBF4F46D45DECECEC00C37193CDE7C3BBC33337616"),
        hex!("A70F728FAF98A5E090BC36E26ADC226F687D778E2CC8DB2CA2CA788DEBC91A71"),
        hex!("5DE8F16F72B836EF6DCAFD01C5EF4EFD9C53269D5DA5E5A5171D3ED8F838E372"),
    ),
    (
        hex!("E09376DA79FF01CEE106B5643D066A048FE932BDBBC4FC94519D2E155315CD47"),
        hex!("C312C5B8249F04C96C342ED293DFBCFEFB2BC836A86F0367FEC1F2AC57664CF3"),
        hex!("EC2286EB760CEC749DC20B904B9D478D79F022598D582881A0D5375C7C7194B3"),
    ),
    (
        hex!("50488E944DBB926474FA3D4A6FC446E24FAEA68B3B513D4F85D3C597FD7A3009"),
        hex!("5A6F5EBA579BE427A0969629F84789824CE24FA111DFC84FA84FCC3AEB3211C9"),
        hex!("B6A589DFCFE5C5E445633CBB3995D74F00D567927FD2FC95FC5F6B0FDBB55BBA"),
    ),
    (
        hex!("630F8AAB1C24C587193FE37E1C6BE32BD03278926035400CE290439803192BC4"),
        hex!("6FC93779B0655A00AAC7C8CC1C9A48D5458BBEFDCD5AF43185BD8685D3AD18D2"),
        hex!("58563512E0C9151A332C218C1767B3C9917F0E02DF9C36BDC7E14264332EC1DD"),
    ),
    (
        hex!("B40C5F1336DD18E0B4894720CDF1B8E14D789710D5AE94468D915FD32DD468F3"),
        hex!("BAC24B7FB7258CB8DF5BE48CF859C60F9B31913C7F42D670525532E7D57526D6"),
        hex!("AFCBF485EA912B693516FB5DC94AAFB7E0FDEC5A0F714E9EC93114C8ADABF6C4"),
    ),
    (
        hex!("98C7A3A6C824F0827057E7E75EE6495E4C0D3A57B837CC2F0801C818F5E1E9B6"),
        hex!("3288884E70D74E6923765B12F1C67B403B4C329C160C0D628B714851002C686D"),
        hex!("2EC5C1AADF3A3DEB9949514C7FE220F2407DD280559516C97481BD6FB50B8C0D"),
    ),
    (
        hex!("8D86C1CAE453DBF35A6405D77B9106F1C0BA8FF73C85527E6009B996B0F952B3"),
        hex!("77ABA4C1AB5A1EECA6EEC97D8166EB2AAA597E538C012071118F51174A6F59F8"),
        hex!("10368ECFD8E37BC7F74C0211D6BCCA9E30F04C130364F0F3B7D81EA64C8DD0DD"),
    ),
];