aboutsummaryrefslogtreecommitdiffstats
path: root/test/bn_test.cpp
blob: 70902e40534fb768423457f7468d49b744a23681 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define PUT(x) std::cout << #x "=" << x << std::endl;
#include <cybozu/test.hpp>
#include <mcl/gmp_util.hpp>
#include <mcl/bn.hpp>
#include <mcl/ec.hpp>


typedef mcl::FpT<mcl::FpTag, 256> Fp;
typedef mcl::bn::BNT<Fp> BN;
typedef BN::Fp2 Fp2;
typedef BN::Fp6 Fp6;
typedef BN::Fp12 Fp12;
typedef BN::G1 G1;
typedef BN::G2 G2;

typedef mcl::bn::ParamT<Fp> Param;

const struct TestSet {
    mcl::bn::CurveParam cp;
    struct G2 {
        const char *aa;
        const char *ab;
        const char *ba;
        const char *bb;
    } g2;
    struct G1 {
        int a;
        int b;
    } g1;
    const char *e;
} g_testSetTbl[] = {
    {
        mcl::bn::CurveFp254BNb,
        {
            "12723517038133731887338407189719511622662176727675373276651903807414909099441",
            "4168783608814932154536427934509895782246573715297911553964171371032945126671",
            "13891744915211034074451795021214165905772212241412891944830863846330766296736",
            "7937318970632701341203597196594272556916396164729705624521405069090520231616",
        },
        {
            -1, 1
        },
        "8118772341496577043438385328606447626730215814727396173233264007541007797690 "
        "6742571767760762192519140673058087976840103832045324348366170860928670686713 "
        "9727912590495366720378364920530546614235713408261568635512172059018197267630 "
        "10180700148605185348549931182990442059136187839792856455707820203302941578832 "
        "5054507763444412917986776641611331046146804026682679569910978464879371792565 "
        "6917005519826733659554708445125877487590687705432214234949972860245110398023 "
        "10448556317747236258066222816126375978842661908560317699736569642190930635294 "
        "1516980358051268127904344653343215863076753141133525905743113718749531324025 "
        "9794836735385959178744195210089532061310424844916928682580569566332541022353 "
        "9375574834170998962484906689780052970915033987453510324648351251071086068423 "
        "710778048594563655498360873129325895716179849942646859397874562033386335205 "
        "10688745994254573144943003027511098295097561129365638275727908595677791826005"
    },
};

CYBOZU_TEST_AUTO(size)
{
    CYBOZU_TEST_EQUAL(sizeof(Fp), 32u);
    CYBOZU_TEST_EQUAL(sizeof(Fp2), sizeof(Fp) * 2);
    CYBOZU_TEST_EQUAL(sizeof(Fp6), sizeof(Fp) * 6);
    CYBOZU_TEST_EQUAL(sizeof(Fp12), sizeof(Fp) * 12);
    CYBOZU_TEST_EQUAL(sizeof(G1), sizeof(Fp) * 3);
    CYBOZU_TEST_EQUAL(sizeof(G2), sizeof(Fp2) * 3);
}
CYBOZU_TEST_AUTO(naive)
{
    const TestSet& ts = g_testSetTbl[0];
    BN::init(ts.cp);
    G1 P(ts.g1.a, ts.g1.b);
    G2 Q(Fp2(ts.g2.aa, ts.g2.ab), Fp2(ts.g2.ba, ts.g2.bb));
    Fp12 e1;
    BN::optimalAtePairing(e1, Q, P);
    Fp12 e2;
    {
        std::stringstream ss(ts.e);
        ss >> e2;
    }
    CYBOZU_TEST_EQUAL(e1, e2);
}