parent
171bd6ebc2
commit
df468426c4
@ -0,0 +1,69 @@ |
||||
/*
|
||||
make she DLP table |
||||
*/ |
||||
#include <mcl/she.hpp> |
||||
#include <cybozu/option.hpp> |
||||
#include <fstream> |
||||
|
||||
using namespace mcl::she; |
||||
|
||||
struct Param { |
||||
int curveType; |
||||
int hashBitSize; |
||||
int group; |
||||
std::string path; |
||||
}; |
||||
|
||||
template<class HashTable, class G> |
||||
void makeTable(const Param& param, const char *groupStr, HashTable& hashTbl, const G& P) |
||||
{ |
||||
char baseName[32]; |
||||
CYBOZU_SNPRINTF(baseName, sizeof(baseName), "she-dlp-%d-%d-%s.bin", param.curveType, param.hashBitSize, groupStr); |
||||
const std::string fileName = param.path + baseName; |
||||
printf("file=%s\n", fileName.c_str()); |
||||
std::ofstream ofs(fileName.c_str(), std::ios::binary); |
||||
|
||||
const size_t hashSize = 1u << param.hashBitSize; |
||||
hashTbl.init(P, hashSize); |
||||
hashTbl.save(ofs); |
||||
} |
||||
|
||||
void run(const Param& param) |
||||
{ |
||||
SHE::init(mcl::getCurveParam(param.curveType)); |
||||
|
||||
switch (param.group) { |
||||
case 1: |
||||
makeTable(param, "g1", SHE::PhashTbl_, SHE::P_); |
||||
break; |
||||
case 2: |
||||
makeTable(param, "g2", SHE::QhashTbl_, SHE::Q_); |
||||
break; |
||||
case 3: |
||||
makeTable(param, "gt", SHE::ePQhashTbl_, SHE::ePQ_); |
||||
break; |
||||
default: |
||||
throw cybozu::Exception("bad group") << param.group; |
||||
} |
||||
} |
||||
|
||||
int main(int argc, char *argv[]) |
||||
try |
||||
{ |
||||
cybozu::Option opt; |
||||
Param param; |
||||
opt.appendOpt(¶m.curveType, 0, "ct", ": curveType(0:BN254, 1:BN381_1, 5:BLS12_381)"); |
||||
opt.appendOpt(¶m.hashBitSize, 20, "hb", ": hash bit size"); |
||||
opt.appendOpt(¶m.group, 3, "g", ": group(1:G1, 2:G2, 3:GT"); |
||||
opt.appendOpt(¶m.path, "./", "path", ": path to table"); |
||||
opt.appendHelp("h"); |
||||
if (opt.parse(argc, argv)) { |
||||
run(param); |
||||
} else { |
||||
opt.usage(); |
||||
return 1; |
||||
} |
||||
} catch (std::exception& e) { |
||||
printf("err %s\n", e.what()); |
||||
return 1; |
||||
} |
Loading…
Reference in new issue