From 48a73206e83cb0901deaab594340b2711a4430b5 Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Mon, 17 Sep 2018 22:26:05 +0900 Subject: add verifyAggregatedHashes --- include/bls/bls.h | 11 +++++++++++ include/bls/bls.hpp | 12 ++++++++++++ 2 files changed, 23 insertions(+) (limited to 'include/bls') diff --git a/include/bls/bls.h b/include/bls/bls.h index b2b8604..71e3d02 100644 --- a/include/bls/bls.h +++ b/include/bls/bls.h @@ -123,6 +123,11 @@ BLS_DLL_API int blsPublicKeyIsValidOrder(const blsPublicKey *pub); #ifndef BLS_MINIMUM_API +/* + set h to a point of G1 + return 0 if success else -1 +*/ +BLS_DLL_API int blsG1SetHash(mclBnG1 *g1, const void *h, mclSize size); /* sign the hash use the low (bitSize of r) - 1 bit of h @@ -132,6 +137,12 @@ BLS_DLL_API int blsPublicKeyIsValidOrder(const blsPublicKey *pub); BLS_DLL_API int blsSignHash(blsSignature *sig, const blsSecretKey *sec, const void *h, mclSize size); // return 1 if valid BLS_DLL_API int blsVerifyHash(const blsSignature *sig, const blsPublicKey *pub, const void *h, mclSize size); +/* + verify aggSig with pubVec[0, n) and g1Vec[0, n) + e(aggSig, Q) = prod_i e(g1Vec[i], pubVec[i]) + return 1 if valid +*/ +BLS_DLL_API int blsVerifyAggregation(const blsSignature *aggSig, const blsPublicKey *pubVec, const mclBnG1 *g1Vec, mclSize n); // sub BLS_DLL_API void blsSecretKeySub(blsSecretKey *sec, const blsSecretKey *rhs); diff --git a/include/bls/bls.hpp b/include/bls/bls.hpp index 3dbacd7..868e574 100644 --- a/include/bls/bls.hpp +++ b/include/bls/bls.hpp @@ -419,6 +419,18 @@ public: { return verifyHash(pub, h.c_str(), h.size()); } + bool verifyAggregation(const PublicKey *pubVec, const mclBnG1 *g1Vec, size_t n) const + { + return blsVerifyAggregation(&self_, &pubVec[0].self_, g1Vec, n) == 1; + } + bool verifyAggregatedHashes(const PublicKey *pubVec, const void *hVec, size_t sizeofHash, size_t n) const + { + std::vector g1Vec(n); + for (size_t i = 0; i < n; i++) { + if (blsG1SetHash(&g1Vec[i], (const char*)hVec + sizeofHash * i, sizeofHash) != 0) throw std::runtime_error("blsG1SetHash"); + } + return verifyAggregation(pubVec, g1Vec.data(), n); + } /* verify self(pop) with pub */ -- cgit v1.2.3