aboutsummaryrefslogtreecommitdiffstats
path: root/src/bls_c_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bls_c_impl.hpp')
-rw-r--r--src/bls_c_impl.hpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/bls_c_impl.hpp b/src/bls_c_impl.hpp
index 75e5a44..768c206 100644
--- a/src/bls_c_impl.hpp
+++ b/src/bls_c_impl.hpp
@@ -267,6 +267,29 @@ int blsPublicKeyIsValidOrder(const blsPublicKey *pub)
}
#ifndef BLS_MINIMUM_API
+inline bool toG1(G1& Hm, const void *h, mclSize size)
+{
+ Fp t;
+ t.setArrayMask((const char *)h, size);
+ bool b;
+ BN::mapToG1(&b, Hm, t);
+ return b;
+}
+int blsSignHash(blsSignature *sig, const blsSecretKey *sec, const void *h, mclSize size)
+{
+ G1 Hm;
+ if (!toG1(Hm, h, size)) return -1;
+ mclBnG1_mulCT(&sig->v, cast(&Hm), &sec->v);
+ return 0;
+}
+
+int blsVerifyHash(const blsSignature *sig, const blsPublicKey *pub, const void *h, mclSize size)
+{
+ G1 Hm;
+ if (!toG1(Hm, h, size)) return 0;
+ return isEqualTwoPairings(*cast(&sig->v), getQcoeff().data(), Hm, *cast(&pub->v));
+}
+
void blsSecretKeySub(blsSecretKey *sec, const blsSecretKey *rhs)
{
mclBnFr_sub(&sec->v, &sec->v, &rhs->v);