/* make she DLP table */ #include #include #include using namespace mcl::she; struct Param { int curveType; int hashBitSize; int group; std::string path; }; template 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", getHashTableG1(), SHE::P_); break; case 2: makeTable(param, "g2", getHashTableG2(), SHE::Q_); break; case 3: makeTable(param, "gt", getHashTableGT(), 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; }