From e9012b679e31306f85e87d9de3ae1320a85e0492 Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Fri, 7 Jul 2017 19:15:45 +0900 Subject: move mclBn_* to mcl --- include/bls/bls.h | 19 ------------- src/bls_c.cpp | 82 ------------------------------------------------------- 2 files changed, 101 deletions(-) diff --git a/include/bls/bls.h b/include/bls/bls.h index a56120c..f063ca6 100644 --- a/include/bls/bls.h +++ b/include/bls/bls.h @@ -121,25 +121,6 @@ BLS_DLL_API void blsSign(blsSignature *sig, const blsSecretKey *sec, const void BLS_DLL_API int blsVerify(const blsSignature *sig, const blsPublicKey *pub, const void *m, size_t size); BLS_DLL_API int blsVerifyPop(const blsSignature *sig, const blsPublicKey *pub); -/* - Lagrange interpolation - recover out = y(0) by { (xVec[i], yVec[i]) } - return 0 if success else -1 - @note k >= 2, xVec[i] != 0, xVec[i] != xVec[j] for i != j -*/ -BLS_DLL_API int mclBn_FrLagrangeInterpolation(mclBnFr *out, const mclBnFr *xVec, const mclBnFr *yVec, size_t k); -BLS_DLL_API int mclBn_G1LagrangeInterpolation(mclBnG1 *out, const mclBnFr *xVec, const mclBnG1 *yVec, size_t k); -BLS_DLL_API int mclBn_G2LagrangeInterpolation(mclBnG2 *out, const mclBnFr *xVec, const mclBnG2 *yVec, size_t k); - -/* - evaluate polynomial - out = f(x) = c[0] + c[1] * x + c[2] * x^2 + ... + c[cSize - 1] * x^(cSize - 1) - @note cSize >= 2 -*/ -BLS_DLL_API int mclBn_FrEvaluatePolynomial(mclBnFr *out, const mclBnFr *cVec, size_t cSize, const mclBnFr *x); -BLS_DLL_API int mclBn_G1EvaluatePolynomial(mclBnG1 *out, const mclBnG1 *cVec, size_t cSize, const mclBnFr *x); -BLS_DLL_API int mclBn_G2EvaluatePolynomial(mclBnG2 *out, const mclBnG2 *cVec, size_t cSize, const mclBnFr *x); - ////////////////////////////////////////////////////////////////////////// // the following apis will be removed diff --git a/src/bls_c.cpp b/src/bls_c.cpp index df6eda3..4ce038e 100644 --- a/src/bls_c.cpp +++ b/src/bls_c.cpp @@ -47,63 +47,6 @@ static inline const G2 *cast(const blsPublicKey* x) { return (const G2 *)x; } static inline const mclBnG1 *cast(const G1* x) { return (const mclBnG1*)x; } static inline const mclBnG2 *cast(const G2* x) { return (const mclBnG2*)x; } -/* - recover out = f(0) by { (x, y) | x = S[i], y = f(x) = vec[i] } -*/ -template -int LagrangeInterpolation(G& out, const F *S, const G *vec, size_t k) -{ - /* - delta_{i,S}(0) = prod_{j != i} S[j] / (S[j] - S[i]) = a / b - where a = prod S[j], b = S[i] * prod_{j != i} (S[j] - S[i]) - */ - if (k < 2) return -1; - std::vector delta(k); - F a = S[0]; - for (size_t i = 1; i < k; i++) { - a *= S[i]; - } - if (a.isZero()) return -1; - for (size_t i = 0; i < k; i++) { - F b = S[i]; - for (size_t j = 0; j < k; j++) { - if (j != i) { - F v = S[j] - S[i]; - if (v.isZero()) return -1; - b *= v; - } - } - delta[i] = a / b; - } - - /* - f(0) = sum_i f(S[i]) delta_{i,S}(0) - */ - G r, t; - r.clear(); - for (size_t i = 0; i < delta.size(); i++) { - G::mul(t, vec[i], delta[i]); - r += t; - } - out = r; - return 0; -} - -/* - out = f(x) = c[0] + c[1] * x + c[2] * x^2 + ... + c[cSize - 1] * x^(cSize - 1) -*/ -template -int evalPoly(G& out, const G *c, size_t cSize, const T& x) -{ - if (cSize < 2) return -1; - G y = c[cSize - 1]; - for (int i = (int)cSize - 2; i >= 0; i--) { - G::mul(y, y, x); - G::add(y, y, c[i]); - } - out = y; - return 0; -} /* e(P1, Q1) == e(P2, Q2) @@ -122,31 +65,6 @@ bool isEqualTwoPairings(const G1& P1, const Fp6* Q1coeff, const G1& P2, const G2 return e.isOne(); } -int mclBn_FrLagrangeInterpolation(mclBnFr *out, const mclBnFr *xVec, const mclBnFr *yVec, size_t k) -{ - return LagrangeInterpolation(*cast(out), cast(xVec), cast(yVec), k); -} -int mclBn_G1LagrangeInterpolation(mclBnG1 *out, const mclBnFr *xVec, const mclBnG1 *yVec, size_t k) -{ - return LagrangeInterpolation(*cast(out), cast(xVec), cast(yVec), k); -} -int mclBn_G2LagrangeInterpolation(mclBnG2 *out, const mclBnFr *xVec, const mclBnG2 *yVec, size_t k) -{ - return LagrangeInterpolation(*cast(out), cast(xVec), cast(yVec), k); -} -int mclBn_FrEvaluatePolynomial(mclBnFr *out, const mclBnFr *cVec, size_t cSize, const mclBnFr *x) -{ - return evalPoly(*cast(out), cast(cVec), cSize, *cast(x)); -} -int mclBn_G1EvaluatePolynomial(mclBnG1 *out, const mclBnG1 *cVec, size_t cSize, const mclBnFr *x) -{ - return evalPoly(*cast(out), cast(cVec), cSize, *cast(x)); -} -int mclBn_G2EvaluatePolynomial(mclBnG2 *out, const mclBnG2 *cVec, size_t cSize, const mclBnFr *x) -{ - return evalPoly(*cast(out), cast(cVec), cSize, *cast(x)); -} - size_t checkAndCopy(char *buf, size_t maxBufSize, const std::string& s) { if (s.size() > maxBufSize + 1) { -- cgit v1.2.3