aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2018-02-06 15:39:35 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2018-02-06 15:39:35 +0800
commit94926b3e3fcfced2e7b052e944dfc6355f6ad19e (patch)
tree8e672c0f944776810d0caf78efe2bb3d77ee3d20
parent521f98cf5402c73ad52502714c6ad5019dc637b3 (diff)
downloadtangerine-mcl-94926b3e3fcfced2e7b052e944dfc6355f6ad19e.tar.gz
tangerine-mcl-94926b3e3fcfced2e7b052e944dfc6355f6ad19e.tar.zst
tangerine-mcl-94926b3e3fcfced2e7b052e944dfc6355f6ad19e.zip
[she] add serialize/deserialize for ZkpBin
-rw-r--r--include/mcl/she.h2
-rw-r--r--src/she_c_impl.hpp10
-rw-r--r--test/she_c_test.hpp9
3 files changed, 21 insertions, 0 deletions
diff --git a/include/mcl/she.h b/include/mcl/she.h
index 1c328bc..6c11050 100644
--- a/include/mcl/she.h
+++ b/include/mcl/she.h
@@ -81,6 +81,7 @@ MCLSHE_DLL_API mclSize shePublicKeySerialize(void *buf, mclSize maxBufSize, cons
MCLSHE_DLL_API mclSize sheCipherTextG1Serialize(void *buf, mclSize maxBufSize, const sheCipherTextG1 *c);
MCLSHE_DLL_API mclSize sheCipherTextG2Serialize(void *buf, mclSize maxBufSize, const sheCipherTextG2 *c);
MCLSHE_DLL_API mclSize sheCipherTextGTSerialize(void *buf, mclSize maxBufSize, const sheCipherTextGT *c);
+MCLSHE_DLL_API mclSize sheZkpBinSerialize(void *buf, mclSize maxBufSize, const sheZkpBin *zkp);
// return read byte size if sucess else 0
MCLSHE_DLL_API mclSize sheSecretKeyDeserialize(sheSecretKey* sec, const void *buf, mclSize bufSize);
@@ -88,6 +89,7 @@ MCLSHE_DLL_API mclSize shePublicKeyDeserialize(shePublicKey* pub, const void *bu
MCLSHE_DLL_API mclSize sheCipherTextG1Deserialize(sheCipherTextG1* c, const void *buf, mclSize bufSize);
MCLSHE_DLL_API mclSize sheCipherTextG2Deserialize(sheCipherTextG2* c, const void *buf, mclSize bufSize);
MCLSHE_DLL_API mclSize sheCipherTextGTDeserialize(sheCipherTextGT* c, const void *buf, mclSize bufSize);
+MCLSHE_DLL_API mclSize sheZkpBinDeserialize(sheZkpBin* zkp, const void *buf, mclSize bufSize);
/*
set secretKey if system has /dev/urandom or CryptGenRandom
diff --git a/src/she_c_impl.hpp b/src/she_c_impl.hpp
index d9a6593..c6ed603 100644
--- a/src/she_c_impl.hpp
+++ b/src/she_c_impl.hpp
@@ -120,6 +120,11 @@ mclSize sheCipherTextGTSerialize(void *buf, mclSize maxBufSize, const sheCipherT
return serialize(buf, maxBufSize, c);
}
+mclSize sheZkpBinSerialize(void *buf, mclSize maxBufSize, const sheZkpBin *zkp)
+{
+ return serialize(buf, maxBufSize, zkp);
+}
+
template<class T>
mclSize deserialize(T *x, const void *buf, mclSize bufSize)
try
@@ -155,6 +160,11 @@ mclSize sheCipherTextGTDeserialize(sheCipherTextGT* c, const void *buf, mclSize
return deserialize(c, buf, bufSize);
}
+mclSize sheZkpBinDeserialize(sheZkpBin* zkp, const void *buf, mclSize bufSize)
+{
+ return deserialize(zkp, buf, bufSize);
+}
+
int sheSecretKeySetByCSPRNG(sheSecretKey *sec)
try
{
diff --git a/test/she_c_test.hpp b/test/she_c_test.hpp
index 01fafa6..77bf893 100644
--- a/test/she_c_test.hpp
+++ b/test/she_c_test.hpp
@@ -283,6 +283,15 @@ void ZkpBinTest(const sheSecretKey *sec, const PK *pub, encWithZkpFunc encWithZk
CYBOZU_TEST_EQUAL(dec(&mDec, sec, &c), 0);
CYBOZU_TEST_EQUAL(mDec, m);
CYBOZU_TEST_EQUAL(verify(pub, &c, &zkp), 1);
+ {
+ char buf[2048];
+ size_t n = sheZkpBinSerialize(buf, sizeof(buf), &zkp);
+ CYBOZU_TEST_EQUAL(n, mclBn_getOpUnitSize() * 8 * 4);
+ sheZkpBin zkp2;
+ size_t r = sheZkpBinDeserialize(&zkp2, buf, n);
+ CYBOZU_TEST_EQUAL(r, n);
+ CYBOZU_TEST_ASSERT(memcmp(&zkp, &zkp2, n) == 0);
+ }
zkp.d[0].d[0]++;
CYBOZU_TEST_EQUAL(verify(pub, &c, &zkp), 0);
}