From 66558e700dd7f2dc85a74ed41d22d6379d8fbf6e Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Mon, 13 May 2019 15:59:53 +0900 Subject: [PATCH] [she] add she_c384_256 --- Makefile | 32 ++++++++++++++++++++++++++++---- ffi/python/she.py | 15 ++++++++------- mklib.bat | 5 +++++ src/she_c384_256.cpp | 3 ++- test/she_c384_256_test.cpp | 3 +++ test/she_c384_test.cpp | 2 +- test/she_c_test.hpp | 13 +++++++------ 7 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 test/she_c384_256_test.cpp diff --git a/Makefile b/Makefile index 50ff7df..6273490 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,8 @@ OBJ_DIR=obj EXE_DIR=bin SRC_SRC=fp.cpp bn_c256.cpp bn_c384.cpp bn_c512.cpp she_c256.cpp TEST_SRC=fp_test.cpp ec_test.cpp fp_util_test.cpp window_method_test.cpp elgamal_test.cpp fp_tower_test.cpp gmp_test.cpp bn_test.cpp bn384_test.cpp glv_test.cpp paillier_test.cpp she_test.cpp vint_test.cpp bn512_test.cpp ecdsa_test.cpp conversion_test.cpp -TEST_SRC+=bn_c256_test.cpp bn_c384_test.cpp bn_c384_256_test.cpp bn_c512_test.cpp she_c256_test.cpp she_c384_test.cpp +TEST_SRC+=bn_c256_test.cpp bn_c384_test.cpp bn_c384_256_test.cpp bn_c512_test.cpp +TEST_SRC+=she_c256_test.cpp she_c384_test.cpp she_c384_256_test.cpp TEST_SRC+=aggregate_sig_test.cpp array_test.cpp TEST_SRC+=bls12_test.cpp TEST_SRC+=ecdsa_c_test.cpp @@ -35,6 +36,8 @@ BN384_SNAME=mclbn384 BN384_256_SNAME=mclbn384_256 BN512_SNAME=mclbn512 SHE256_SNAME=mclshe256 +SHE384_SNAME=mclshe384 +SHE384_256_SNAME=mclshe384_256 MCL_SLIB=$(LIB_DIR)/lib$(MCL_SNAME).$(LIB_SUF) BN256_LIB=$(LIB_DIR)/libmclbn256.a BN256_SLIB=$(LIB_DIR)/lib$(BN256_SNAME).$(LIB_SUF) @@ -47,8 +50,12 @@ BN512_SLIB=$(LIB_DIR)/lib$(BN512_SNAME).$(LIB_SUF) SHE256_LIB=$(LIB_DIR)/libmclshe256.a SHE256_SLIB=$(LIB_DIR)/lib$(SHE256_SNAME).$(LIB_SUF) SHE384_LIB=$(LIB_DIR)/libmclshe384.a +SHE384_SLIB=$(LIB_DIR)/lib$(SHE384_SNAME).$(LIB_SUF) +SHE384_256_LIB=$(LIB_DIR)/libmclshe384_256.a +SHE384_256_SLIB=$(LIB_DIR)/lib$(SHE384_256_SNAME).$(LIB_SUF) ECDSA_LIB=$(LIB_DIR)/libmclecdsa.a -all: $(MCL_LIB) $(MCL_SLIB) $(BN256_LIB) $(BN256_SLIB) $(BN384_LIB) $(BN384_SLIB) $(BN384_256_LIB) $(BN384_256_SLIB) $(BN512_LIB) $(BN512_SLIB) $(SHE256_LIB) $(SHE256_SLIB) $(SHE384_lib) $(ECDSA_LIB) +SHE_LIB_ALL=$(SHE256_LIB) $(SHE256_SLIB) $(SHE384_LIB) $(SHE384_SLIB) $(SHE384_256_LIB) $(SHE384_256_SLIB) +all: $(MCL_LIB) $(MCL_SLIB) $(BN256_LIB) $(BN256_SLIB) $(BN384_LIB) $(BN384_SLIB) $(BN384_256_LIB) $(BN384_256_SLIB) $(BN512_LIB) $(BN512_SLIB) $(SHE_LIB_ALL) $(ECDSA_LIB) #LLVM_VER=-3.8 LLVM_LLC=llc$(LLVM_VER) @@ -78,6 +85,7 @@ BN384_256_OBJ=$(OBJ_DIR)/bn_c384_256.o BN512_OBJ=$(OBJ_DIR)/bn_c512.o SHE256_OBJ=$(OBJ_DIR)/she_c256.o SHE384_OBJ=$(OBJ_DIR)/she_c384.o +SHE384_256_OBJ=$(OBJ_DIR)/she_c384_256.o ECDSA_OBJ=$(OBJ_DIR)/ecdsa_c.o FUNC_LIST=src/func.list ifeq ($(findstring $(OS),mingw64/cygwin),) @@ -124,6 +132,8 @@ ifneq ($(findstring $(OS),mac/mingw64),) BN384_256_SLIB_LDFLAGS+=-l$(MCL_SNAME) -L./lib BN512_SLIB_LDFLAGS+=-l$(MCL_SNAME) -L./lib SHE256_SLIB_LDFLAGS+=-l$(MCL_SNAME) -L./lib + SHE384_SLIB_LDFLAGS+=-l$(MCL_SNAME) -L./lib + SHE384_256_SLIB_LDFLAGS+=-l$(MCL_SNAME) -L./lib endif ifeq ($(OS),mingw64) MCL_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(MCL_SNAME).a @@ -132,6 +142,8 @@ ifeq ($(OS),mingw64) BN384_256_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(BN384_256_SNAME).a BN512_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(BN512_SNAME).a SHE256_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(SHE256_SNAME).a + SHE384_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(SHE384_SNAME).a + SHE384_256_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(SHE384_256_SNAME).a endif $(MCL_LIB): $(LIB_OBJ) @@ -146,11 +158,20 @@ $(BN256_LIB): $(BN256_OBJ) $(SHE256_LIB): $(SHE256_OBJ) $(AR) $@ $(SHE256_OBJ) +$(SHE384_LIB): $(SHE384_OBJ) + $(AR) $@ $(SHE384_OBJ) + +$(SHE384_256_LIB): $(SHE384_256_OBJ) + $(AR) $@ $(SHE384_256_OBJ) + $(SHE256_SLIB): $(SHE256_OBJ) $(MCL_LIB) $(PRE)$(CXX) -o $@ $(SHE256_OBJ) $(MCL_LIB) -shared $(LDFLAGS) $(SHE256_SLIB_LDFLAGS) -$(SHE384_LIB): $(SHE384_OBJ) - $(AR) $@ $(SHE384_OBJ) +$(SHE384_SLIB): $(SHE384_OBJ) $(MCL_LIB) + $(PRE)$(CXX) -o $@ $(SHE384_OBJ) $(MCL_LIB) -shared $(LDFLAGS) $(SHE384_SLIB_LDFLAGS) + +$(SHE384_256_SLIB): $(SHE384_256_OBJ) $(MCL_LIB) + $(PRE)$(CXX) -o $@ $(SHE384_256_OBJ) $(MCL_LIB) -shared $(LDFLAGS) $(SHE384_256_SLIB_LDFLAGS) $(ECDSA_LIB): $(ECDSA_OBJ) $(AR) $@ $(ECDSA_OBJ) @@ -275,6 +296,9 @@ $(EXE_DIR)/she_c256_test.exe: $(OBJ_DIR)/she_c256_test.o $(SHE256_LIB) $(MCL_LIB $(EXE_DIR)/she_c384_test.exe: $(OBJ_DIR)/she_c384_test.o $(SHE384_LIB) $(MCL_LIB) $(PRE)$(CXX) $< -o $@ $(SHE384_LIB) $(MCL_LIB) $(LDFLAGS) +$(EXE_DIR)/she_c384_256_test.exe: $(OBJ_DIR)/she_c384_256_test.o $(SHE384_256_LIB) $(MCL_LIB) + $(PRE)$(CXX) $< -o $@ $(SHE384_256_LIB) $(MCL_LIB) $(LDFLAGS) + $(EXE_DIR)/ecdsa_c_test.exe: $(OBJ_DIR)/ecdsa_c_test.o $(ECDSA_LIB) $(MCL_LIB) src/ecdsa_c.cpp include/mcl/ecdsa.hpp include/mcl/ecdsa.h $(PRE)$(CXX) $< -o $@ $(ECDSA_LIB) $(MCL_LIB) $(LDFLAGS) diff --git a/ffi/python/she.py b/ffi/python/she.py index d2562ee..ea6d6a6 100644 --- a/ffi/python/she.py +++ b/ffi/python/she.py @@ -2,9 +2,10 @@ import os import platform from ctypes import * -MCL_BN254 = 0 +BN254 = 0 +BLS12_381 = 5 MCLBN_FR_UNIT_SIZE = 4 -MCLBN_FP_UNIT_SIZE = 4 +MCLBN_FP_UNIT_SIZE = 6 FR_SIZE = MCLBN_FR_UNIT_SIZE G1_SIZE = MCLBN_FP_UNIT_SIZE * 3 @@ -22,15 +23,15 @@ MCLBN_COMPILED_TIME_VAR = (MCLBN_FR_UNIT_SIZE * 10) + MCLBN_FP_UNIT_SIZE Buffer = c_ubyte * 1536 lib = None -def init(curveType=MCL_BN254): +def init(curveType=BN254): global lib name = platform.system() if name == 'Linux': - libName = 'libmclshe256.so' + libName = 'libmclshe384_256.so' elif name == 'Darwin': - libName = 'libmclshe256.dylib' + libName = 'libmclshe384_256.dylib' elif name == 'Windows': - libName = 'mclshe256.dll' + libName = 'mclshe384_256.dll' else: raise RuntimeError("not support yet", name) lib = cdll.LoadLibrary(libName) @@ -249,7 +250,7 @@ def mul(cx, cy): return out if __name__ == '__main__': - init() + init(BLS12_381) sec = SecretKey() sec.setByCSPRNG() print("sec=", sec.serializeToHexStr()) diff --git a/mklib.bat b/mklib.bat index 389b690..aef1494 100644 --- a/mklib.bat +++ b/mklib.bat @@ -28,6 +28,11 @@ if "%1"=="dll" ( cl /c %CFLAGS% src\she_c256.cpp /Foobj\she_c256.obj /DMCLBN_NO_AUTOLINK echo link /nologo /DLL /OUT:bin\mclshe256.dll obj\she_c256.obj obj\fp.obj %LDFLAGS% /implib:lib\mclshe_c256.lib link /nologo /DLL /OUT:bin\mclshe256.dll obj\she_c256.obj obj\fp.obj %LDFLAGS% /implib:lib\mclshe_c256.lib + + echo cl /c %CFLAGS% src\she_c384_256.cpp /Foobj\she_c384_256.obj /DMCLBN_NO_AUTOLINK + cl /c %CFLAGS% src\she_c384_256.cpp /Foobj\she_c384_256.obj /DMCLBN_NO_AUTOLINK + echo link /nologo /DLL /OUT:bin\mclshe384_256.dll obj\she_c384_256.obj obj\fp.obj %LDFLAGS% /implib:lib\mclshe_c384_256.lib + link /nologo /DLL /OUT:bin\mclshe384_256.dll obj\she_c384_256.obj obj\fp.obj %LDFLAGS% /implib:lib\mclshe_c384_256.lib ) else ( echo cl /c %CFLAGS% src\bn_c256.cpp /Foobj\bn_c256.obj cl /c %CFLAGS% src\bn_c256.cpp /Foobj\bn_c256.obj diff --git a/src/she_c384_256.cpp b/src/she_c384_256.cpp index 1da73af..d15ef9d 100644 --- a/src/she_c384_256.cpp +++ b/src/she_c384_256.cpp @@ -1,2 +1,3 @@ -#include +#define MCLBN_FP_UNIT_SIZE 6 +#define MCLBN_FR_UNIT_SIZE 4 #include "she_c_impl.hpp" diff --git a/test/she_c384_256_test.cpp b/test/she_c384_256_test.cpp new file mode 100644 index 0000000..d255f50 --- /dev/null +++ b/test/she_c384_256_test.cpp @@ -0,0 +1,3 @@ +#define MCLBN_FP_UNIT_SIZE 6 +#define MCLBN_FR_UNIT_SIZE 4 +#include "she_c_test.hpp" diff --git a/test/she_c384_test.cpp b/test/she_c384_test.cpp index 4adf495..5c7bd98 100644 --- a/test/she_c384_test.cpp +++ b/test/she_c384_test.cpp @@ -1,2 +1,2 @@ -#include +#define MCLBN_FP_UNIT_SIZE 6 #include "she_c_test.hpp" diff --git a/test/she_c_test.hpp b/test/she_c_test.hpp index f5516d3..f770908 100644 --- a/test/she_c_test.hpp +++ b/test/she_c_test.hpp @@ -9,16 +9,17 @@ const size_t tryNum = 1024; CYBOZU_TEST_AUTO(init) { - int curve; #if MCLBN_FP_UNIT_SIZE == 4 - curve = MCL_BN254; -#elif MCLBN_FP_UNIT_SIZE == 6 -// curve = MCL_BN381_1; - curve = MCL_BLS12_381; + int curve = MCL_BN254; +#elif MCLBN_FP_UNIT_SIZE == 6 && MCLBN_FR_UNIT_SIZE == 4 + int curve = MCL_BLS12_381; +#elif MCLBN_FP_UNIT_SIZE == 6 && MCLBN_FR_UNIT_SIZE == 6 + int curve = MCL_BN381_1; #elif MCLBN_FP_UNIT_SIZE == 8 - curve = MCL_BN462; + int curve = MCL_BN462; #endif int ret; + printf("curve=%d\n", curve); ret = sheInit(curve, MCLBN_COMPILED_TIME_VAR); CYBOZU_TEST_EQUAL(ret, 0); ret = sheSetRangeForDLP(hashSize);