diff options
Diffstat (limited to 'ffi/go')
-rw-r--r-- | ffi/go/bls/bls.go | 18 | ||||
-rw-r--r-- | ffi/go/bls/bls_test.go | 30 |
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) { |