bls12_381_plus 0.8.15

Implementation of the BLS12-381 pairing-friendly elliptic curve construction. This is a fork from zkcrypto/bls12_381 but adds hash to curve and multiexponentiation methods as well as enables multi-pairing without the allocator requirement.
Documentation
pub(crate) mod g1 {
    use crate::fp::Fp;

    /// Coefficients of the 11-isogeny x map's numerator
    pub const XNUM: [Fp; 12] = [
        Fp([
            0x4d18_b6f3_af00_131cu64,
            0x19fa_2197_93fe_e28cu64,
            0x3f28_85f1_467f_19aeu64,
            0x23dc_ea34_f2ff_b304u64,
            0xd15b_58d2_ffc0_0054u64,
            0x0913_be20_0a20_bef4u64,
        ]),
        Fp([
            0x8989_8538_5cdb_bd8bu64,
            0x3c79_e43c_c7d9_66aau64,
            0x1597_e193_f4cd_233au64,
            0x8637_ef1e_4d66_23adu64,
            0x11b2_2dee_d20d_827bu64,
            0x0709_7bc5_9987_84adu64,
        ]),
        Fp([
            0xa542_583a_480b_664bu64,
            0xfc71_69c0_26e5_68c6u64,
            0x5ba2_ef31_4ed8_b5a6u64,
            0x5b54_91c0_5102_f0e7u64,
            0xdf6e_9970_7d2a_0079u64,
            0x0784_151e_d760_5524u64,
        ]),
        Fp([
            0x494e_2128_70f7_2741u64,
            0xab9b_e52f_bda4_3021u64,
            0x26f5_5779_94e3_4c3du64,
            0x049d_fee8_2aef_bd60u64,
            0x65da_dd78_2850_5289u64,
            0x0e93_d431_ea01_1aebu64,
        ]),
        Fp([
            0x90ee_774b_d6a7_4d45u64,
            0x7ada_1c8a_41bf_b185u64,
            0x0f1a_8953_b325_f464u64,
            0x104c_2421_1be4_805cu64,
            0x1691_39d3_19ea_7a8fu64,
            0x09f2_0ead_8e53_2bf6u64,
        ]),
        Fp([
            0x6ddd_93e2_f436_26b7u64,
            0xa548_2c9a_a1cc_d7bdu64,
            0x1432_4563_1883_f4bdu64,
            0x2e0a_94cc_f77e_c0dbu64,
            0xb028_2d48_0e56_489fu64,
            0x18f4_bfcb_b436_8929u64,
        ]),
        Fp([
            0x23c5_f0c9_5340_2dfdu64,
            0x7a43_ff69_58ce_4fe9u64,
            0x2c39_0d3d_2da5_df63u64,
            0xd0df_5c98_e1f9_d70fu64,
            0xffd8_9869_a572_b297u64,
            0x1277_ffc7_2f25_e8feu64,
        ]),
        Fp([
            0x79f4_f049_0f06_a8a6u64,
            0x85f8_94a8_8030_fd81u64,
            0x12da_3054_b18b_6410u64,
            0xe2a5_7f65_0588_0d65u64,
            0xbba0_74f2_60e4_00f1u64,
            0x08b7_6279_f621_d028u64,
        ]),
        Fp([
            0xe672_45ba_78d5_b00bu64,
            0x8456_ba9a_1f18_6475u64,
            0x7888_bff6_e6b3_3bb4u64,
            0xe215_85b9_a30f_86cbu64,
            0x05a6_9cdc_ef55_feeeu64,
            0x09e6_99dd_9adf_a5acu64,
        ]),
        Fp([
            0x0de5_c357_bff5_7107u64,
            0x0a0d_b4ae_6b1a_10b2u64,
            0xe256_bb67_b3b3_cd8du64,
            0x8ad4_5657_4e9d_b24fu64,
            0x0443_915f_50fd_4179u64,
            0x098c_4bf7_de8b_6375u64,
        ]),
        Fp([
            0xe6b0_617e_7dd9_29c7u64,
            0xfe6e_37d4_4253_7375u64,
            0x1daf_deda_137a_489eu64,
            0xe4ef_d1ad_3f76_7cebu64,
            0x4a51_d866_7f0f_e1cfu64,
            0x054f_df4b_bf1d_821cu64,
        ]),
        Fp([
            0x72db_2a50_658d_767bu64,
            0x8abf_91fa_a257_b3d5u64,
            0xe969_d683_3764_ab47u64,
            0x4641_7014_2a10_09ebu64,
            0xb14f_01aa_db30_be2fu64,
            0x18ae_6a85_6f40_715du64,
        ]),
    ];
    /// Coefficients of the 11-isogeny x map's denominator
    pub const XDEN: [Fp; 11] = [
        Fp([
            0xb962_a077_fdb0_f945u64,
            0xa6a9_740f_efda_13a0u64,
            0xc14d_568c_3ed6_c544u64,
            0xb43f_c37b_908b_133eu64,
            0x9c0b_3ac9_2959_9016u64,
            0x0165_aa6c_93ad_115fu64,
        ]),
        Fp([
            0x2327_9a3b_a506_c1d9u64,
            0x92cf_ca0a_9465_176au64,
            0x3b29_4ab1_3755_f0ffu64,
            0x116d_da1c_5070_ae93u64,
            0xed45_3092_4cec_2045u64,
            0x0833_83d6_ed81_f1ceu64,
        ]),
        Fp([
            0x9885_c2a6_449f_ecfcu64,
            0x4a2b_54cc_d377_33f0u64,
            0x17da_9ffd_8738_c142u64,
            0xa0fb_a727_32b3_fafdu64,
            0xff36_4f36_e54b_6812u64,
            0x0f29_c13c_6605_23e2u64,
        ]),
        Fp([
            0xe349_cc11_8278_f041u64,
            0xd487_228f_2f32_04fbu64,
            0xc9d3_2584_9ade_5150u64,
            0x43a9_2bd6_9c15_c2dfu64,
            0x1c2c_7844_bc41_7be4u64,
            0x1202_5184_f407_440cu64,
        ]),
        Fp([
            0x587f_65ae_6acb_057bu64,
            0x1444_ef32_5140_201fu64,
            0xfbf9_95e7_1270_da49u64,
            0xccda_0660_7243_6a42u64,
            0x7408_904f_0f18_6bb2u64,
            0x13b9_3c63_edf6_c015u64,
        ]),
        Fp([
            0xfb91_8622_cd14_1920u64,
            0x4a4c_6442_3eca_ddb4u64,
            0x0beb_2329_27f7_fb26u64,
            0x30f9_4df6_f83a_3dc2u64,
            0xaeed_d424_d780_f388u64,
            0x06cc_402d_d594_bbebu64,
        ]),
        Fp([
            0xd41f_7611_51b2_3f8fu64,
            0x32a9_2465_4357_19b3u64,
            0x64f4_36e8_88c6_2cb9u64,
            0xdf70_a9a1_f757_c6e4u64,
            0x6933_a38d_5b59_4c81u64,
            0x0c6f_7f72_37b4_6606u64,
        ]),
        Fp([
            0x693c_0874_7876_c8f7u64,
            0x22c9_850b_f9cf_80f0u64,
            0x8e90_71da_b950_c124u64,
            0x89bc_62d6_1c7b_af23u64,
            0xbc6b_e2d8_dad5_7c23u64,
            0x1791_6987_aa14_a122u64,
        ]),
        Fp([
            0x1be3_ff43_9c13_16fdu64,
            0x9965_243a_7571_dfa7u64,
            0xc7f7_f629_62f5_cd81u64,
            0x32c6_aa9a_f394_361cu64,
            0xbbc2_ee18_e1c2_27f4u64,
            0x0c10_2cba_c531_bb34u64,
        ]),
        Fp([
            0x9976_14c9_7bac_bf07u64,
            0x61f8_6372_b991_92c0u64,
            0x5b8c_95fc_1435_3fc3u64,
            0xca2b_066c_2a87_492fu64,
            0x1617_8f5b_bf69_8711u64,
            0x12a6_dcd7_f0f4_e0e8u64,
        ]),
        Fp([
            0x7609_0000_0002_fffdu64,
            0xebf4_000b_c40c_0002u64,
            0x5f48_9857_53c7_58bau64,
            0x77ce_5853_7052_5745u64,
            0x5c07_1a97_a256_ec6du64,
            0x15f6_5ec3_fa80_e493u64,
        ]),
    ];
    /// Coefficients of the 11-isogeny y map's numerator
    pub const YNUM: [Fp; 16] = [
        Fp([
            0x2b56_7ff3_e283_7267u64,
            0x1d4d_9e57_b958_a767u64,
            0xce02_8fea_04bd_7373u64,
            0xcc31_a30a_0b6c_d3dfu64,
            0x7d7b_18a6_8269_2693u64,
            0x0d30_0744_d42a_0310u64,
        ]),
        Fp([
            0x99c2_555f_a542_493fu64,
            0xfe7f_53cc_4874_f878u64,
            0x5df0_608b_8f97_608au64,
            0x14e0_3832_052b_49c8u64,
            0x7063_26a6_957d_d5a4u64,
            0x0a8d_add9_c241_4555u64,
        ]),
        Fp([
            0x13d9_4292_2a5c_f63au64,
            0x357e_33e3_6e26_1e7du64,
            0xcf05_a27c_8456_088du64,
            0x0000_bd1d_e7ba_50f0u64,
            0x83d0_c753_2f8c_1fdeu64,
            0x13f7_0bf3_8bbf_2905u64,
        ]),
        Fp([
            0x5c57_fd95_bfaf_bdbbu64,
            0x28a3_59a6_5e54_1707u64,
            0x3983_ceb4_f636_0b6du64,
            0xafe1_9ff6_f97e_6d53u64,
            0xb346_8f45_5019_2bf7u64,
            0x0bb6_cde4_9d8b_a257u64,
        ]),
        Fp([
            0x590b_62c7_ff8a_513fu64,
            0x314b_4ce3_72ca_cefdu64,
            0x6bef_32ce_94b8_a800u64,
            0x6ddf_84a0_9571_3d5fu64,
            0x64ea_ce4c_b098_2191u64,
            0x0386_213c_651b_888du64,
        ]),
        Fp([
            0xa531_0a31_111b_bcddu64,
            0xa14a_c0f5_da14_8982u64,
            0xf9ad_9cc9_5423_d2e9u64,
            0xaa6e_c095_283e_e4a7u64,
            0xcf5b_1f02_2e1c_9107u64,
            0x01fd_df5a_ed88_1793u64,
        ]),
        Fp([
            0x65a5_72b0_d7a7_d950u64,
            0xe25c_2d81_8347_3a19u64,
            0xc2fc_ebe7_cb87_7dbdu64,
            0x05b2_d36c_769a_89b0u64,
            0xba12_961b_e86e_9efbu64,
            0x07eb_1b29_c1df_de1fu64,
        ]),
        Fp([
            0x93e0_9572_f7c4_cd24u64,
            0x364e_9290_7679_5091u64,
            0x8569_467e_68af_51b5u64,
            0xa47d_a894_39f5_340fu64,
            0xf4fa_9180_82e4_4d64u64,
            0x0ad5_2ba3_e669_5a79u64,
        ]),
        Fp([
            0x9114_2984_4e0d_5f54u64,
            0xd03f_51a3_516b_b233u64,
            0x3d58_7e56_4053_6e66u64,
            0xfa86_d2a3_a9a7_3482u64,
            0xa90e_d5ad_f1ed_5537u64,
            0x149c_9c32_6a5e_7393u64,
        ]),
        Fp([
            0x462b_beb0_3c12_921au64,
            0xdc9a_f5fa_0a27_4a17u64,
            0x9a55_8ebd_e836_ebedu64,
            0x649e_f8f1_1a4f_ae46u64,
            0x8100_e165_2b3c_dc62u64,
            0x1862_bd62_c291_dacbu64,
        ]),
        Fp([
            0x05c9_b8ca_89f1_2c26u64,
            0x0194_160f_a9b9_ac4fu64,
            0x6a64_3d5a_6879_fa2cu64,
            0x1466_5bdd_8846_e19du64,
            0xbb1d_0d53_af3f_f6bfu64,
            0x12c7_e1c3_b289_62e5u64,
        ]),
        Fp([
            0xb55e_bf90_0b8a_3e17u64,
            0xfedc_77ec_1a92_01c4u64,
            0x1f07_db10_ea1a_4df4u64,
            0x0dfb_d15d_c41a_594du64,
            0x3895_47f2_334a_5391u64,
            0x0241_9f98_1658_71a4u64,
        ]),
        Fp([
            0xb416_af00_0745_fc20u64,
            0x8e56_3e9d_1ea6_d0f5u64,
            0x7c76_3e17_763a_0652u64,
            0x0145_8ef0_159e_bbefu64,
            0x8346_fe42_1f96_bb13u64,
            0x0d2d_7b82_9ce3_24d2u64,
        ]),
        Fp([
            0x9309_6bb5_38d6_4615u64,
            0x6f2a_2619_951d_823au64,
            0x8f66_b3ea_5951_4fa4u64,
            0xf563_e637_04f7_092fu64,
            0x724b_136c_4cf2_d9fau64,
            0x0469_59cf_cfd0_bf49u64,
        ]),
        Fp([
            0xea74_8d4b_6e40_5346u64,
            0x91e9_079c_2c02_d58fu64,
            0x4106_4965_946d_9b59u64,
            0xa067_31f1_d2bb_e1eeu64,
            0x07f8_97e2_67a3_3f1bu64,
            0x1017_2909_1921_0e5fu64,
        ]),
        Fp([
            0x872a_a6c1_7d98_5097u64,
            0xeecc_5316_1264_562au64,
            0x07af_e37a_fff5_5002u64,
            0x5475_9078_e5be_6838u64,
            0xc4b9_2d15_db8a_cca8u64,
            0x106d_87d1_b51d_13b9u64,
        ]),
    ];
    /// Coefficients of the 11-isogeny y map's denominator
    pub const YDEN: [Fp; 16] = [
        Fp([
            0xeb6c_359d_47e5_2b1cu64,
            0x18ef_5f8a_1063_4d60u64,
            0xddfa_71a0_889d_5b7eu64,
            0x723e_71dc_c5fc_1323u64,
            0x52f4_5700_b70d_5c69u64,
            0x0a8b_981e_e476_91f1u64,
        ]),
        Fp([
            0x616a_3c4f_5535_b9fbu64,
            0x6f5f_0373_95db_d911u64,
            0xf25f_4cc5_e35c_65dau64,
            0x3e50_dffe_a3c6_2658u64,
            0x6a33_dca5_2356_0776u64,
            0x0fad_eff7_7b6b_fe3eu64,
        ]),
        Fp([
            0x2be9_b66d_f470_059cu64,
            0x24a2_c159_a3d3_6742u64,
            0x115d_be7a_d10c_2a37u64,
            0xb663_4a65_2ee5_884du64,
            0x04fe_8bb2_b8d8_1af4u64,
            0x01c2_a7a2_56fe_9c41u64,
        ]),
        Fp([
            0xf27b_f8ef_3b75_a386u64,
            0x898b_3674_76c9_073fu64,
            0x2448_2e6b_8c2f_4e5fu64,
            0xc8e0_bbd6_fe11_0806u64,
            0x59b0_c17f_7631_448au64,
            0x1103_7cd5_8b3d_bfbdu64,
        ]),
        Fp([
            0x31c7_912e_a267_eec6u64,
            0x1dbf_6f1c_5fcd_b700u64,
            0xd30d_4fe3_ba86_fdb1u64,
            0x3cae_528f_bee9_a2a4u64,
            0xb1cc_e69b_6aa9_ad9au64,
            0x0443_93bb_632d_94fbu64,
        ]),
        Fp([
            0xc66e_f6ef_eeb5_c7e8u64,
            0x9824_c289_dd72_bb55u64,
            0x71b1_a4d2_f119_981du64,
            0x104f_c1aa_fb09_19ccu64,
            0x0e49_df01_d942_a628u64,
            0x096c_3a09_7732_72d4u64,
        ]),
        Fp([
            0x9abc_11eb_5fad_eff4u64,
            0x32dc_a50a_8857_28f0u64,
            0xfb1f_a372_1569_734cu64,
            0xc4b7_6271_ea65_06b3u64,
            0xd466_a755_99ce_728eu64,
            0x0c81_d464_5f4c_b6edu64,
        ]),
        Fp([
            0x4199_f10e_5b8b_e45bu64,
            0xda64_e495_b1e8_7930u64,
            0xcb35_3efe_9b33_e4ffu64,
            0x9e9e_fb24_aa64_24c6u64,
            0xf08d_3368_0a23_7465u64,
            0x0d33_7802_3e4c_7406u64,
        ]),
        Fp([
            0x7eb4_ae92_ec74_d3a5u64,
            0xc341_b4aa_9fac_3497u64,
            0x5be6_0389_9e90_7687u64,
            0x03bf_d9cc_a75c_bdebu64,
            0x564c_2935_a96b_fa93u64,
            0x0ef3_c333_71e2_fdb5u64,
        ]),
        Fp([
            0x7ee9_1fd4_49f6_ac2eu64,
            0xe5d5_bd5c_b935_7a30u64,
            0x773a_8ca5_196b_1380u64,
            0xd0fd_a172_174e_d023u64,
            0x6cb9_5e0f_a776_aeadu64,
            0x0d22_d5a4_0cec_7cffu64,
        ]),
        Fp([
            0xf727_e092_85fd_8519u64,
            0xdc9d_55a8_3017_897bu64,
            0x7549_d8bd_0578_94aeu64,
            0x1784_1961_3d90_d8f8u64,
            0xfce9_5ebd_eb5b_490au64,
            0x0467_ffae_f23f_c49eu64,
        ]),
        Fp([
            0xc176_9e6a_7c38_5f1bu64,
            0x79bc_930d_eac0_1c03u64,
            0x5461_c75a_23ed_e3b5u64,
            0x6e20_829e_5c23_0c45u64,
            0x828e_0f1e_772a_53cdu64,
            0x116a_efa7_4912_7bffu64,
        ]),
        Fp([
            0x101c_10bf_2744_c10au64,
            0xbbf1_8d05_3a6a_3154u64,
            0xa0ec_f39e_f026_f602u64,
            0xfc00_9d49_96dc_5153u64,
            0xb900_0209_d5bd_08d3u64,
            0x189e_5fe4_470c_d73cu64,
        ]),
        Fp([
            0x7ebd_546c_a157_5ed2u64,
            0xe47d_5a98_1d08_1b55u64,
            0x57b2_b625_b6d4_ca21u64,
            0xb0a1_ba04_2285_20ccu64,
            0x9873_8983_c210_7ff3u64,
            0x13dd_dbc4_799d_81d6u64,
        ]),
        Fp([
            0x0931_9f2e_3983_4935u64,
            0x039e_952c_bdb0_5c21u64,
            0x55ba_77a9_a2f7_6493u64,
            0xfd04_e3df_c608_6467u64,
            0xfb95_832e_7d78_742eu64,
            0x0ef9_c24e_ccaf_5e0eu64,
        ]),
        Fp([
            0x7609_0000_0002_fffdu64,
            0xebf4_000b_c40c_0002u64,
            0x5f48_9857_53c7_58bau64,
            0x77ce_5853_7052_5745u64,
            0x5c07_1a97_a256_ec6du64,
            0x15f6_5ec3_fa80_e493u64,
        ]),
    ];
}

pub(crate) mod g2 {
    use crate::{fp::Fp, fp2::Fp2};

    /// Coefficients of the 3-isogeny x map's numerator
    pub const XNUM: [Fp2; 4] = [
        Fp2 {
            c0: Fp([
                0x47f671c71ce05e62u64,
                0x06dd57071206393eu64,
                0x7c80cd2af3fd71a2u64,
                0x048103ea9e6cd062u64,
                0xc54516acc8d037f6u64,
                0x13808f550920ea41u64,
            ]),
            c1: Fp([
                0x47f671c71ce05e62u64,
                0x06dd57071206393eu64,
                0x7c80cd2af3fd71a2u64,
                0x048103ea9e6cd062u64,
                0xc54516acc8d037f6u64,
                0x13808f550920ea41u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
            c1: Fp([
                0x5fe55555554c71d0u64,
                0x873fffdd236aaaa3u64,
                0x6a6b4619b26ef918u64,
                0x21c2888408874945u64,
                0x2836cda7028cabc5u64,
                0x0ac73310a7fd5abdu64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x0a0c5555555971c3u64,
                0xdb0c00101f9eaaaeu64,
                0xb1fb2f941d797997u64,
                0xd3960742ef416e1cu64,
                0xb70040e2c20556f4u64,
                0x149d7861e581393bu64,
            ]),
            c1: Fp([
                0xaff2aaaaaaa638e8u64,
                0x439fffee91b55551u64,
                0xb535a30cd9377c8cu64,
                0x90e144420443a4a2u64,
                0x941b66d3814655e2u64,
                0x0563998853fead5eu64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x40aac71c71c725edu64,
                0x190955557a84e38eu64,
                0xd817050a8f41abc3u64,
                0xd86485d4c87f6fb1u64,
                0x696eb479f885d059u64,
                0x198e1a74328002d2u64,
            ]),
            c1: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
        },
    ];
    /// Coefficients of the 3-isogeny x map's denominator
    pub const XDEN: [Fp2; 3] = [
        Fp2 {
            c0: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
            c1: Fp([
                0x1f3affffff13ab97u64,
                0xf25bfc611da3ff3eu64,
                0xca3757cb3819b208u64,
                0x3e6427366f8cec18u64,
                0x03977bc86095b089u64,
                0x04f69db13f39a952u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x447600000027552eu64,
                0xdcb8009a43480020u64,
                0x6f7ee9ce4a6e8b59u64,
                0xb10330b7c0a95bc6u64,
                0x6140b1fcfb1e54b7u64,
                0x0381be097f0bb4e1u64,
            ]),
            c1: Fp([
                0x7588ffffffd8557du64,
                0x41f3ff646e0bffdfu64,
                0xf7b1e8d2ac426acau64,
                0xb3741acd32dbb6f8u64,
                0xe9daf5b9482d581fu64,
                0x167f53e0ba7431b8u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x760900000002fffdu64,
                0xebf4000bc40c0002u64,
                0x5f48985753c758bau64,
                0x77ce585370525745u64,
                0x5c071a97a256ec6du64,
                0x15f65ec3fa80e493u64,
            ]),
            c1: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
        },
    ];
    /// Coefficients of the 3-isogeny y map's numerator
    pub const YNUM: [Fp2; 4] = [
        Fp2 {
            c0: Fp([
                0x96d8f684bdfc77beu64,
                0xb530e4f43b66d0e2u64,
                0x184a88ff379652fdu64,
                0x57cb23ecfae804e1u64,
                0x0fd2e39eada3eba9u64,
                0x08c8055e31c5d5c3u64,
            ]),
            c1: Fp([
                0x96d8f684bdfc77beu64,
                0xb530e4f43b66d0e2u64,
                0x184a88ff379652fdu64,
                0x57cb23ecfae804e1u64,
                0x0fd2e39eada3eba9u64,
                0x08c8055e31c5d5c3u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
            c1: Fp([
                0xbf0a71c71c91b406u64,
                0x4d6d55d28b7638fdu64,
                0x9d82f98e5f205aeeu64,
                0xa27aa27b1d1a18d5u64,
                0x02c3b2b2d2938e86u64,
                0x0c7d13420b09807fu64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0xd7f9555555531c74u64,
                0x21cffff748daaaa8u64,
                0x5a9ad1866c9bbe46u64,
                0x4870a2210221d251u64,
                0x4a0db369c0a32af1u64,
                0x02b1ccc429ff56afu64,
            ]),
            c1: Fp([
                0xe205aaaaaaac8e37u64,
                0xfcdc000768795556u64,
                0x0c96011a8a1537ddu64,
                0x1c06a963f163406eu64,
                0x010df44c82a881e6u64,
                0x174f45260f808febu64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0xa470bda12f67f35cu64,
                0xc0fe38e23327b425u64,
                0xc9d3d0f2c6f0678du64,
                0x1c55c9935b5a982eu64,
                0x27f6c0e2f0746764u64,
                0x117c5e6e28aa9054u64,
            ]),
            c1: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
        },
    ];
    /// Coefficients of the 3-isogeny y map's denominator
    pub const YDEN: [Fp2; 4] = [
        Fp2 {
            c0: Fp([
                0x0162fffffa765adfu64,
                0x8f7bea480083fb75u64,
                0x561b3c2259e93611u64,
                0x11e19fc1a9c875d5u64,
                0xca713efc00367660u64,
                0x03c6a03d41da1151u64,
            ]),
            c1: Fp([
                0x0162fffffa765adfu64,
                0x8f7bea480083fb75u64,
                0x561b3c2259e93611u64,
                0x11e19fc1a9c875d5u64,
                0xca713efc00367660u64,
                0x03c6a03d41da1151u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
            c1: Fp([
                0x5db0fffffd3b02c5u64,
                0xd713f52358ebfdbau64,
                0x5ea60761a84d161au64,
                0xbb2c75a34ea6c44au64,
                0x0ac6735921c1119bu64,
                0x0ee3d913bdacfbf6u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x66b10000003affc5u64,
                0xcb1400e764ec0030u64,
                0xa73e5eb56fa5d106u64,
                0x8984c913a0fe09a9u64,
                0x11e10afb78ad7f13u64,
                0x05429d0e3e918f52u64,
            ]),
            c1: Fp([
                0x534dffffffc4aae6u64,
                0x5397ff174c67ffcfu64,
                0xbff273eb870b251du64,
                0xdaf2827152870915u64,
                0x393a9cbaca9e2dc3u64,
                0x14be74dbfaee5748u64,
            ]),
        },
        Fp2 {
            c0: Fp([
                0x760900000002fffdu64,
                0xebf4000bc40c0002u64,
                0x5f48985753c758bau64,
                0x77ce585370525745u64,
                0x5c071a97a256ec6du64,
                0x15f65ec3fa80e493u64,
            ]),
            c1: Fp([
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
                0x0000000000000000u64,
            ]),
        },
    ];
}