aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2019-01-08 18:46:49 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2019-01-09 13:20:27 +0800
commitddd2989d3e681aed4c03c6223978d2d6d0cfe206 (patch)
treea4b26d2fba2b062daa2be824678923db878b4264
parent25093f5bc029196b4fe8240355147680be7c3880 (diff)
downloaddexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar.gz
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar.bz2
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar.lz
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar.xz
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.tar.zst
dexon-bls-ddd2989d3e681aed4c03c6223978d2d6d0cfe206.zip
add SignHash, VerifyHash to cgo
-rw-r--r--ffi/go/bls/bls.go18
-rw-r--r--ffi/go/bls/bls_test.go30
2 files changed, 48 insertions, 0 deletions
diff --git a/ffi/go/bls/bls.go b/ffi/go/bls/bls.go
index 9b2691c..ff4f951 100644
--- a/ffi/go/bls/bls.go
+++ b/ffi/go/bls/bls.go
@@ -347,3 +347,21 @@ func HashAndMapToSignature(buf []byte) *Sign {
func VerifyPairing(X *Sign, Y *Sign, pub *PublicKey) bool {
return C.blsVerifyPairing(X.getPointer(), Y.getPointer(), pub.getPointer()) == 1
}
+
+// SignHash --
+func (sec *SecretKey) SignHash(hash []byte) (sign *Sign) {
+ sign = new(Sign)
+ // #nosec
+ err := C.blsSignHash(sign.getPointer(), sec.getPointer(), unsafe.Pointer(&hash[0]), C.size_t(len(hash)))
+ if err == 0 {
+ return sign
+ } else {
+ return nil
+ }
+}
+
+// VerifyHash --
+func (sign *Sign) VerifyHash(pub *PublicKey, hash []byte) bool {
+ // #nosec
+ return C.blsVerifyHash(sign.getPointer(), pub.getPointer(), unsafe.Pointer(&hash[0]), C.size_t(len(hash))) == 1
+}
diff --git a/ffi/go/bls/bls_test.go b/ffi/go/bls/bls_test.go
index 7626156..72f1838 100644
--- a/ffi/go/bls/bls_test.go
+++ b/ffi/go/bls/bls_test.go
@@ -2,6 +2,8 @@ package bls
import "testing"
import "strconv"
+import "crypto/sha256"
+import "crypto/sha512"
var unitN = 0
@@ -392,6 +394,33 @@ func testAggregate2(t *testing.T) {
}
}
+func testHash(t *testing.T) {
+ var sec SecretKey
+ sec.SetByCSPRNG()
+ pub := sec.GetPublicKey()
+ m := "abc"
+ var h []byte
+ if GetOpUnitSize() == 4 {
+ d := sha256.Sum256([]byte(m))
+ h = d[:]
+ } else {
+ // use SHA512 if bitSize > 256
+ d := sha512.Sum512([]byte(m))
+ h = d[:]
+ }
+ sig1 := sec.Sign(m)
+ sig2 := sec.SignHash(h)
+ if !sig1.IsEqual(sig2) {
+ t.Errorf("SignHash")
+ }
+ if !sig1.Verify(pub, m) {
+ t.Errorf("sig1.Verify")
+ }
+ if !sig2.VerifyHash(pub, h) {
+ t.Errorf("sig2.VerifyHash")
+ }
+}
+
func test(t *testing.T, c int) {
err := Init(c)
if err != nil {
@@ -411,6 +440,7 @@ func test(t *testing.T, c int) {
testSerializeToHexStr(t)
testPairing(t)
testAggregate2(t)
+ testHash(t)
}
func TestMain(t *testing.T) {