/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
*/

use fp512bn::big::NLEN;
use super::super::arch::Chunk;
use types::{ModType, CurveType, CurvePairingType, SexticTwist, SignOfX};

// Base Bits= 60
pub const MODULUS: [Chunk; NLEN] = [
    0x4EB280922ADEF33,
    0x6A55CE5F4C6467B,
    0xC65DEAB236FE191,
    0xCF1EACBE98B8E48,
    0x3C111B0EF455146,
    0xA1D8CB5307C0BBE,
    0xFFFF9EC7F01C60B,
    0xFFFFFFFFFFFFFFF,
    0xFFFFFFFF,
];
pub const R2MODP: [Chunk; NLEN] = [
    0x1FA6DCEF99812E9,
    0xAB3452895A0B74E,
    0xC53EA988C079E1E,
    0x1E90E033BA630B9,
    0xF1EA41C0714D8B0,
    0xE72785387509E28,
    0xD86794F834DAB00,
    0x9757C2ACCD342A1,
    0x44ECB079,
];
pub const MCONST: Chunk = 0x692A189FCCC5C05;

pub const CURVE_COF_I: isize = 1;
pub const CURVE_A: isize = 0;
pub const CURVE_B_I: isize = 3;
pub const CURVE_B: [Chunk; NLEN] = [0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];
pub const CURVE_ORDER: [Chunk; NLEN] = [
    0x6A64A5F519A09ED,
    0x10313E04F9A2B40,
    0xC65DEAB2679A34A,
    0xCF1EACBE98B8E48,
    0x3C111B0EF445146,
    0xA1D8CB5307C0BBE,
    0xFFFF9EC7F01C60B,
    0xFFFFFFFFFFFFFFF,
    0xFFFFFFFF,
];
pub const CURVE_GX: [Chunk; NLEN] = [0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];
pub const CURVE_GY: [Chunk; NLEN] = [0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];

pub const FRA: [Chunk; NLEN] = [
    0x49617B1F4B73AB2,
    0x71514F6202AED1F,
    0xF6080D3BD8681E1,
    0xF8AA9E852CBBB59,
    0xC8CF2E2068398E9,
    0x8A5296F791AB26B,
    0x196A8C7C68B4EA1,
    0xCF5BBF9095A1B79,
    0x1EF71AA9,
];
pub const FRB: [Chunk; NLEN] = [
    0x5510572DF6B481,
    0xF9047EFD49B595C,
    0xD055DD765E95FAF,
    0xD6740E396BFD2EE,
    0x7341ECEE8C1B85C,
    0x1786345B7615952,
    0xE695124B876776A,
    0x30A4406F6A5E486,
    0xE108E556,
];
pub const CURVE_BNX: [Chunk; NLEN] = [
    0xB306BB5E1BD80F,
    0x82F5C030B0F7F01,
    0x68,
    0x0,
    0x0,
    0x0,
    0x0,
    0x0,
    0x0,
];
pub const CURVE_COF: [Chunk; NLEN] = [0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];
pub const CURVE_CRU: [Chunk; NLEN] = [
    0xB0716209C79298A,
    0xCEE6799B8B17C14,
    0x78966BE526092AE,
    0x20089C27507ACD8,
    0xF8EF7611FA3074B,
    0x6146B86B378EA2C,
    0xFFFF9EC7DC83D2A,
    0xFFFFFFFFFFFFFFF,
    0xFFFFFFFF,
];
pub const CURVE_PXA: [Chunk; NLEN] = [
    0xF07A96E0DB646B5,
    0x18F87319072FFE8,
    0x7BE21BCBBC78F22,
    0x537863514DC6DC5,
    0xDA57CC78CD0B024,
    0xD29B358F0DB9B57,
    0x7412F3CEA1E4BBB,
    0xE138648958801BA,
    0x3B165339,
];
pub const CURVE_PXB: [Chunk; NLEN] = [
    0xDB5CBEFDA8AE0E9,
    0xCA411CD88911B3,
    0xD6E1383D5ADCE4,
    0x227285526E0D5E5,
    0xB02566B94D9781E,
    0x56DC6C6EF2476A8,
    0x680ABE8B4825EA6,
    0xF85067E6C89B4C4,
    0x481C13CB,
];
pub const CURVE_PYA: [Chunk; NLEN] = [
    0x2480312ADDE67A1,
    0xDA17AD615EFB85E,
    0x312542808B7BC5C,
    0x18BDEC153E8EDD2,
    0xE5C158699D4B6CD,
    0xB1DF660AFCDD03E,
    0xB0CBA374F277085,
    0xC827C7B8292EF5A,
    0x6F01EC84,
];
pub const CURVE_PYB: [Chunk; NLEN] = [
    0x58B7186C84F8E8B,
    0xF05C2224BF76168,
    0x10AD7EE279C08DF,
    0x7FC3E2E50714A43,
    0x3D04961941DA289,
    0x38C118867B0C9B6,
    0xC315F75D91F0214,
    0x8B04E7831AC3640,
    0x51A3BCEC,
];
pub const CURVE_W: [[Chunk; NLEN]; 2] = [
    [
        0x110F89749834583,
        0x65FB911D16A173F,
        0xFFFFFFFFCF63FE9,
        0xFFFFFFFFFFFFFFF,
        0xFFFF,
        0x0,
        0x0,
        0x0,
        0x0,
    ],
    [
        0x1660D76BC37B01F,
        0x5EB806161EFE02,
        0xD1,
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
    ],
];
pub const CURVE_SB: [[[Chunk; NLEN]; 2]; 2] = [
    [
        [
            0xFAAEB208D4B9564,
            0x601010BBB4B193C,
            0xFFFFFFFFCF63F18,
            0xFFFFFFFFFFFFFFF,
            0xFFFF,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x5403CE8956259CE,
            0xA45BDA397B2D3E,
            0xC65DEAB2679A279,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
    ],
    [
        [
            0x1660D76BC37B01F,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x110F89749834583,
            0x65FB911D16A173F,
            0xFFFFFFFFCF63FE9,
            0xFFFFFFFFFFFFFFF,
            0xFFFF,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
    ],
];
pub const CURVE_WB: [[Chunk; NLEN]; 4] = [
    [
        0x6DAB36AB55A29F0,
        0xFC42C60583D30C1,
        0x5555555545215FB,
        0x555555555555555,
        0x5555,
        0x0,
        0x0,
        0x0,
        0x0,
    ],
    [
        0xEEB012BA2355D4B,
        0xF20FC1FD7F84F17,
        0x892FA9DE2BB5E5C,
        0x74B96064DAD40F5,
        0xD76BC3535163152,
        0x806161EFE021660,
        0xD105EB,
        0x0,
        0x0,
    ],
    [
        0x7CF03F380289AAD,
        0xBA82C117183E70C,
        0xC497D4EF15DAF62,
        0x3A5CB0326D6A07A,
        0x6BB5E1A9A8B18A9,
        0xC030B0F7F010B30,
        0x6882F5,
        0x0,
        0x0,
    ],
    [
        0x574A5F3F92279D1,
        0xF65745A421E32BF,
        0x55555555452152A,
        0x555555555555555,
        0x5555,
        0x0,
        0x0,
        0x0,
        0x0,
    ],
];
pub const CURVE_BB: [[[Chunk; NLEN]; 4]; 4] = [
    [
        [
            0xB306BB5E1BD810,
            0x82F5C030B0F7F01,
            0x68,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0xB306BB5E1BD80F,
            0x82F5C030B0F7F01,
            0x68,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0xB306BB5E1BD80F,
            0x82F5C030B0F7F01,
            0x68,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x5403CE8956259CF,
            0xA45BDA397B2D3E,
            0xC65DEAB2679A279,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
    ],
    [
        [
            0x1660D76BC37B01F,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x5F343A3F37E31DE,
            0x8D3B7DD448AAC3F,
            0xC65DEAB2679A2E1,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
        [
            0x5F343A3F37E31DD,
            0x8D3B7DD448AAC3F,
            0xC65DEAB2679A2E1,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
        [
            0x5F343A3F37E31DE,
            0x8D3B7DD448AAC3F,
            0xC65DEAB2679A2E1,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
    ],
    [
        [
            0x1660D76BC37B01E,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x1660D76BC37B01F,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x1660D76BC37B01F,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x1660D76BC37B01F,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
    ],
    [
        [
            0x5F343A3F37E31DF,
            0x8D3B7DD448AAC3F,
            0xC65DEAB2679A2E1,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
        [
            0x3DA2F71D92AA9AF,
            0x45A3D4235C2F3C,
            0xC65DEAB2679A1A8,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
        [
            0x1660D76BC37B01D,
            0x5EB806161EFE02,
            0xD1,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
        ],
        [
            0x5F343A3F37E31DF,
            0x8D3B7DD448AAC3F,
            0xC65DEAB2679A2E1,
            0xCF1EACBE98B8E48,
            0x3C111B0EF445146,
            0xA1D8CB5307C0BBE,
            0xFFFF9EC7F01C60B,
            0xFFFFFFFFFFFFFFF,
            0xFFFFFFFF,
        ],
    ],
];

pub const USE_GLV: bool = true;
pub const USE_GS_G2: bool = true;
pub const USE_GS_GT: bool = true;
pub const GT_STRONG: bool = false;

pub const MODBYTES: usize = 64;
pub const BASEBITS: usize = 60;

pub const MODBITS: usize = 512;
pub const MOD8: usize = 3;
pub const MODTYPE: ModType = ModType::NOT_SPECIAL;
pub const SH: usize = 28;

pub const CURVETYPE: CurveType = CurveType::WEIERSTRASS;
pub const CURVE_PAIRING_TYPE: CurvePairingType = CurvePairingType::BN;
pub const SEXTIC_TWIST: SexticTwist = SexticTwist::M_TYPE;
pub const ATE_BITS: usize = 130;
pub const SIGN_OF_X: SignOfX = SignOfX::POSITIVEX;
pub const HASH_TYPE: usize = 32;
pub const AESKEY: usize = 16;
