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