|
|
@ -3,43 +3,48 @@ |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
#include <iostream> |
|
|
|
#include <iostream> |
|
|
|
#include <fstream> |
|
|
|
#include <fstream> |
|
|
|
#include <cybozu/random_generator.hpp> |
|
|
|
#include <mcl/ec.hpp> |
|
|
|
#include <mcl/fp.hpp> |
|
|
|
|
|
|
|
#include <mcl/ecparam.hpp> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef mcl::FpT<mcl::FpTag> Fp; |
|
|
|
typedef mcl::FpT<mcl::FpTag, 256> Fp; |
|
|
|
typedef mcl::FpT<mcl::ZnTag> Zn; |
|
|
|
typedef mcl::FpT<mcl::ZnTag, 256> Fr; |
|
|
|
typedef mcl::EcT<Fp> Ec; |
|
|
|
typedef mcl::EcT<Fp> Ec; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void put(const char *msg, const Ec& P) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
std::cout << msg << P.getStr(mcl::IoEcAffine | 16) << std::endl; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int main() |
|
|
|
int main() |
|
|
|
{ |
|
|
|
{ |
|
|
|
/*
|
|
|
|
/*
|
|
|
|
Ec is an elliptic curve over Fp |
|
|
|
Ec is an elliptic curve over Fp |
|
|
|
the cyclic group of <P> is isomorphic to Zn |
|
|
|
the cyclic group of <P> is isomorphic to Fr |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
Ec P; |
|
|
|
Ec P; |
|
|
|
mcl::initCurve<Ec, Zn>(MCL_SECP192K1, &P); |
|
|
|
mcl::initCurve<Ec, Fr>(MCL_SECP256K1, &P); |
|
|
|
|
|
|
|
put("P=", P); |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
Alice setups a private key a and public key aP |
|
|
|
Alice setups a private key a and public key aP |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
Zn a; |
|
|
|
Fr a; |
|
|
|
Ec aP; |
|
|
|
Ec aP; |
|
|
|
|
|
|
|
|
|
|
|
a.setByCSPRNG(); |
|
|
|
a.setByCSPRNG(); |
|
|
|
Ec::mul(aP, P, a); // aP = a * P;
|
|
|
|
Ec::mul(aP, P, a); // aP = a * P;
|
|
|
|
|
|
|
|
|
|
|
|
std::cout << "aP=" << aP << std::endl; |
|
|
|
put("aP=", aP); |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
Bob setups a private key b and public key bP |
|
|
|
Bob setups a private key b and public key bP |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
Zn b; |
|
|
|
Fr b; |
|
|
|
Ec bP; |
|
|
|
Ec bP; |
|
|
|
|
|
|
|
|
|
|
|
b.setByCSPRNG(); |
|
|
|
b.setByCSPRNG(); |
|
|
|
Ec::mul(bP, P, b); // bP = b * P;
|
|
|
|
Ec::mul(bP, P, b); // bP = b * P;
|
|
|
|
|
|
|
|
|
|
|
|
std::cout << "bP=" << bP << std::endl; |
|
|
|
put("bP=", bP); |
|
|
|
|
|
|
|
|
|
|
|
Ec abP, baP; |
|
|
|
Ec abP, baP; |
|
|
|
|
|
|
|
|
|
|
|