From 0dbdb0f7dc29d27ba815c9a9205a8bc989d117bd Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Mon, 29 May 2017 06:43:37 +0900 Subject: go/bls uses GetHex/SetHex --- go/bls/bls.go | 37 ++++++++++++++++++++++++++----------- src/bls_if.cpp | 8 ++++++-- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/go/bls/bls.go b/go/bls/bls.go index f342615..c569f1f 100644 --- a/go/bls/bls.go +++ b/go/bls/bls.go @@ -10,7 +10,6 @@ package bls import "C" import "fmt" import "unsafe" -import "encoding/hex" // CurveFp254BNb -- 254 bit curve const CurveFp254BNb = 0 @@ -315,16 +314,24 @@ func (pub *PublicKey) Deserialize(buf []byte) error { // GetHexString -- func (pub *PublicKey) GetHexString() string { - return fmt.Sprintf("%x", pub.Serialize()) + buf := make([]byte, 1024) + // #nosec + n := C.blsPublicKeyGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), pub.getPointer()) + if n == 0 { + panic("err blsPublicKeyGetHexStr") + } + return string(buf[:n]) } // SetHexString -- func (pub *PublicKey) SetHexString(s string) error { - b, err := hex.DecodeString(s) - if err != nil { - return err + buf := []byte(s) + // #nosec + err := C.blsPublicKeySetHexStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("err blsPublicKeySetHexStr %x", buf) } - return pub.Deserialize(b) + return nil } // IsSame -- @@ -389,16 +396,24 @@ func (sign *Sign) Deserialize(buf []byte) error { // GetHexString -- func (sign *Sign) GetHexString() string { - return fmt.Sprintf("%x", sign.Serialize()) + buf := make([]byte, 1024) + // #nosec + n := C.blsSignatureGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), sign.getPointer()) + if n == 0 { + panic("err blsSignatureGetHexStr") + } + return string(buf[:n]) } // SetHexString -- func (sign *Sign) SetHexString(s string) error { - b, err := hex.DecodeString(s) - if err != nil { - return err + buf := []byte(s) + // #nosec + err := C.blsSignatureSetHexStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("err blsSignatureSetHexStr %x", buf) } - return sign.Deserialize(b) + return nil } // IsSame -- diff --git a/src/bls_if.cpp b/src/bls_if.cpp index d8b24ea..6213a4f 100644 --- a/src/bls_if.cpp +++ b/src/bls_if.cpp @@ -222,7 +222,9 @@ size_t blsPublicKeyGetHexStr(char *buf, size_t maxBufSize, const blsPublicKey *p { std::string s; s.resize(1024); - if (blsPublicKeySerialize(&s[0], s.size(), pub) == 0) { + size_t len = blsPublicKeySerialize(&s[0], s.size(), pub); + if (len > 0) { + s.resize(len); s = mcl::fp::littleEndianToHexStr(s.c_str(), s.size()); if (s.size() < maxBufSize) { memcpy(buf, s.c_str(), s.size()); @@ -276,7 +278,9 @@ size_t blsSignatureGetHexStr(char *buf, size_t maxBufSize, const blsSignature *s { std::string s; s.resize(1024); - if (blsSignatureSerialize(&s[0], s.size(), sig) == 0) { + size_t len = blsSignatureSerialize(&s[0], s.size(), sig); + if (len > 0) { + s.resize(len); s = mcl::fp::littleEndianToHexStr(s.c_str(), s.size()); if (s.size() < maxBufSize) { memcpy(buf, s.c_str(), s.size()); -- cgit v1.2.3