github.com/platonnetwork/platon-go@v0.7.6/cases/tool/win/bls_win/include/mcl/ahe.hpp (about) 1 #pragma once 2 /** 3 @file 4 @brief 192/256-bit additive homomorphic encryption by lifted-ElGamal 5 @author MITSUNARI Shigeo(@herumi) 6 @license modified new BSD license 7 http://opensource.org/licenses/BSD-3-Clause 8 */ 9 #include <mcl/elgamal.hpp> 10 #include <mcl/ecparam.hpp> 11 12 namespace mcl { 13 14 #ifdef MCL_USE_AHE192 15 namespace ahe192 { 16 17 const mcl::EcParam& para = mcl::ecparam::NIST_P192; 18 19 typedef mcl::FpT<mcl::FpTag, 192> Fp; 20 typedef mcl::FpT<mcl::ZnTag, 192> Zn; 21 typedef mcl::EcT<Fp> Ec; 22 typedef mcl::ElgamalT<Ec, Zn> ElgamalEc; 23 typedef ElgamalEc::PrivateKey SecretKey; 24 typedef ElgamalEc::PublicKey PublicKey; 25 typedef ElgamalEc::CipherText CipherText; 26 27 static inline void initAhe() 28 { 29 Fp::init(para.p); 30 Zn::init(para.n); 31 Ec::init(para.a, para.b); 32 Ec::setIoMode(16); 33 Zn::setIoMode(16); 34 } 35 36 static inline void initSecretKey(SecretKey& sec) 37 { 38 const Ec P(Fp(para.gx), Fp(para.gy)); 39 sec.init(P, Zn::getBitSize()); 40 } 41 42 } //mcl::ahe192 43 #endif 44 45 #ifdef MCL_USE_AHE256 46 namespace ahe256 { 47 48 const mcl::EcParam& para = mcl::ecparam::NIST_P256; 49 50 typedef mcl::FpT<mcl::FpTag, 256> Fp; 51 typedef mcl::FpT<mcl::ZnTag, 256> Zn; 52 typedef mcl::EcT<Fp> Ec; 53 typedef mcl::ElgamalT<Ec, Zn> ElgamalEc; 54 typedef ElgamalEc::PrivateKey SecretKey; 55 typedef ElgamalEc::PublicKey PublicKey; 56 typedef ElgamalEc::CipherText CipherText; 57 58 static inline void initAhe() 59 { 60 Fp::init(para.p); 61 Zn::init(para.n); 62 Ec::init(para.a, para.b); 63 Ec::setIoMode(16); 64 Zn::setIoMode(16); 65 } 66 67 static inline void initSecretKey(SecretKey& sec) 68 { 69 const Ec P(Fp(para.gx), Fp(para.gy)); 70 sec.init(P, Zn::getBitSize()); 71 } 72 73 } //mcl::ahe256 74 #endif 75 76 } // mcl