aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2017-05-07 09:47:42 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2017-05-07 10:11:24 +0800
commitff93ffa10763d5d8419649557e526d65860fb914 (patch)
tree50346959606cca5d4887be75de0504e928e46c79
parentb85df3bdcea93108a0c1c12e9471ba3e700329f6 (diff)
downloaddexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar.gz
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar.bz2
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar.lz
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar.xz
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.tar.zst
dexon-bls-ff93ffa10763d5d8419649557e526d65860fb914.zip
refactor getter/setter
-rw-r--r--go/bls/bls.go212
-rw-r--r--go/bls/bls_test.go58
2 files changed, 166 insertions, 104 deletions
diff --git a/go/bls/bls.go b/go/bls/bls.go
index a62cddd..ea6607e 100644
--- a/go/bls/bls.go
+++ b/go/bls/bls.go
@@ -10,6 +10,7 @@ package bls
import "C"
import "fmt"
import "unsafe"
+import "encoding/hex"
// CurveFp254BNb -- 254 bit curve
const CurveFp254BNb = 0
@@ -70,28 +71,62 @@ func (id *ID) getPointer() (p *C.blsId) {
return (*C.blsId)(unsafe.Pointer(&id.v[0]))
}
-// GetString --
-func (id *ID) GetString(ioMode int) string {
+// GetByte
+func (id *ID) GetByte(ioMode int) []byte {
buf := make([]byte, 1024)
// #nosec
n := C.blsIdGetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if n == 0 {
panic("implementation err. size of buf is small")
}
- return string(buf[:n])
+ return buf[:n]
}
-// SetStr --
-func (id *ID) SetStr(s string, ioMode int) error {
- buf := []byte(s)
+// SetByte --
+func (id *ID) SetByte(buf []byte, ioMode int) error {
// #nosec
err := C.blsIdSetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if err > 0 {
- return fmt.Errorf("bad string:%s", s)
+ return fmt.Errorf("bad byte:%x", buf)
}
return nil
}
+// Serialize
+func (id *ID) Serialize() []byte {
+ return id.GetByte(C.BlsIoEcComp)
+}
+
+// Deserialize
+func (id *ID) Deserialize(b []byte) error {
+ return id.SetByte(b, C.BlsIoEcComp)
+}
+
+// GetHexString
+func (id *ID) GetHexString() string {
+ return string(id.GetByte(16))
+}
+
+// GetDecString
+func (id *ID) GetDecString() string {
+ return string(id.GetByte(10))
+}
+
+// SetHexString
+func (id *ID) SetHexString(s string) error {
+ return id.SetByte([]byte(s), 16)
+}
+
+// SetDecString
+func (id *ID) SetDecString(s string) error {
+ return id.SetByte([]byte(s), 10)
+}
+
+// IsSame --
+func (id *ID) IsSame(rhs *ID) bool {
+ return C.blsIdIsSame(id.getPointer(), rhs.getPointer()) == 1
+}
+
// Set --
func (id *ID) Set(v []uint64) {
expect := GetOpUnitSize()
@@ -113,48 +148,55 @@ func (sec *SecretKey) getPointer() (p *C.blsSecretKey) {
return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0]))
}
-// GetString --
-func (sec *SecretKey) GetString(ioMode int) string {
+// GetByte
+func (sec *SecretKey) GetByte(ioMode int) []byte {
buf := make([]byte, 1024)
// #nosec
n := C.blsSecretKeyGetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if n == 0 {
panic("implementation err. size of buf is small")
}
- return string(buf[:n])
+ return buf[:n]
}
-// SetStr -- The string passed in is a number and can be either hex or decimal
-func (sec *SecretKey) SetStr(s string, ioMode int) error {
- buf := []byte(s)
+// SetByte --
+func (sec *SecretKey) SetByte(buf []byte, ioMode int) error {
// #nosec
err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if err > 0 {
- return fmt.Errorf("bad string:%s", s)
+ return fmt.Errorf("bad byte:%x", buf)
}
return nil
}
-// SetData --
-func (sec *SecretKey) SetData(buf []byte) error {
- // #nosec
- err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if err > 0 {
- return fmt.Errorf("bad buf:%s", buf)
- }
- return nil
+// Serialize
+func (sec *SecretKey) Serialize() []byte {
+ return sec.GetByte(C.BlsIoEcComp)
}
-// GetData --
-func (sec *SecretKey) GetData() []byte {
- fpSize := GetOpUnitSize() * 8
- buf := make([]byte, fpSize)
- // #nosec
- n := C.blsSecretKeyGetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if n != C.size_t(fpSize) {
- panic("implementation err. size of buf is small")
- }
- return buf
+// Deserialize
+func (sec *SecretKey) Deserialize(b []byte) error {
+ return sec.SetByte(b, C.BlsIoEcComp)
+}
+
+// GetHexString
+func (sec *SecretKey) GetHexString() string {
+ return string(sec.GetByte(16))
+}
+
+// GetDecString
+func (sec *SecretKey) GetDecString() string {
+ return string(sec.GetByte(10))
+}
+
+// SetHexString
+func (sec *SecretKey) SetHexString(s string) error {
+ return sec.SetByte([]byte(s), 16)
+}
+
+// SetDecString
+func (sec *SecretKey) SetDecString(s string) error {
+ return sec.SetByte([]byte(s), 10)
}
// IsSame --
@@ -230,48 +272,49 @@ func (pub *PublicKey) getPointer() (p *C.blsPublicKey) {
return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0]))
}
-// GetString --
-func (pub *PublicKey) GetString(ioMode int) string {
+// GetByte
+func (pub *PublicKey) GetByte(ioMode int) []byte {
buf := make([]byte, 1024)
- // #nosec
+ // #nopub
n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if n == 0 {
panic("implementation err. size of buf is small")
}
- return string(buf[:n])
+ return buf[:n]
}
-// SetStr --
-func (pub *PublicKey) SetStr(s string, ioMode int) error {
- buf := []byte(s)
- // #nosec
+// SetByte --
+func (pub *PublicKey) SetByte(buf []byte, ioMode int) error {
+ // #nopub
err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if err > 0 {
- return fmt.Errorf("bad string:%s", s)
+ return fmt.Errorf("bad byte:%x", buf)
}
return nil
}
-// SetData --
-func (pub *PublicKey) SetData(buf []byte) error {
- // #nosec
- err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if err > 0 {
- return fmt.Errorf("bad buf:%s", buf)
- }
- return nil
+// Serialize
+func (pub *PublicKey) Serialize() []byte {
+ return pub.GetByte(C.BlsIoEcComp)
}
-// GetData --
-func (pub *PublicKey) GetData() []byte {
- fpSize := GetOpUnitSize() * 8
- buf := make([]byte, fpSize*2)
- // #nosec
- n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if n != C.size_t(fpSize*2) {
- panic("implementation err. size of buf is small")
+// Deserialize
+func (pub *PublicKey) Deserialize(b []byte) error {
+ return pub.SetByte(b, C.BlsIoEcComp)
+}
+
+// GetHexString
+func (pub *PublicKey) GetHexString() string {
+ return fmt.Sprintf("%x", pub.Serialize())
+}
+
+// SetStr
+func (pub *PublicKey) SetStr(s string) error {
+ b, err := hex.DecodeString(s)
+ if err != nil {
+ return err
}
- return buf
+ return pub.Deserialize(b)
}
// IsSame --
@@ -305,48 +348,49 @@ func (sign *Sign) getPointer() (p *C.blsSign) {
return (*C.blsSign)(unsafe.Pointer(&sign.v[0]))
}
-// GetString --
-func (sign *Sign) GetString(ioMode int) string {
+// GetByte
+func (sign *Sign) GetByte(ioMode int) []byte {
buf := make([]byte, 1024)
- // #nosec
+ // #nosign
n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if n == 0 {
panic("implementation err. size of buf is small")
}
- return string(buf[:n])
+ return buf[:n]
}
-// SetStr --
-func (sign *Sign) SetStr(s string, ioMode int) error {
- buf := []byte(s)
- // #nosec
+// SetByte --
+func (sign *Sign) SetByte(buf []byte, ioMode int) error {
+ // #nosign
err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
if err > 0 {
- return fmt.Errorf("bad string:%s", s)
+ return fmt.Errorf("bad byte:%x", buf)
}
return nil
}
-// SetData --
-func (sign *Sign) SetData(buf []byte) error {
- // #nosec
- err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if err > 0 {
- return fmt.Errorf("bad buf:%s", buf)
- }
- return nil
+// Serialize
+func (sign *Sign) Serialize() []byte {
+ return sign.GetByte(C.BlsIoEcComp)
}
-// GetData --
-func (sign *Sign) GetData() []byte {
- fpSize := GetOpUnitSize() * 8
- buf := make([]byte, fpSize)
- // #nosec
- n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.BlsIoEcComp)
- if n != C.size_t(fpSize) {
- panic("implementation err. size of buf is small")
+// Deserialize
+func (sign *Sign) Deserialize(b []byte) error {
+ return sign.SetByte(b, C.BlsIoEcComp)
+}
+
+// GetHexString
+func (sign *Sign) GetHexString() string {
+ return fmt.Sprintf("%x", sign.Serialize())
+}
+
+// SetStr
+func (sign *Sign) SetStr(s string) error {
+ b, err := hex.DecodeString(s)
+ if err != nil {
+ return err
}
- return buf
+ return sign.Deserialize(b)
}
// IsSame --
diff --git a/go/bls/bls_test.go b/go/bls/bls_test.go
index 1a325d1..4e79f08 100644
--- a/go/bls/bls_test.go
+++ b/go/bls/bls_test.go
@@ -15,11 +15,20 @@ func testPre(t *testing.T) {
t.Log("id :", id)
var id2 ID
- err := id2.SetStr(id.GetString(10), 10)
+ err := id2.SetHexString(id.GetHexString())
if err != nil {
t.Fatal(err)
}
- t.Log("id2:", id2)
+ if !id.IsSame(&id2) {
+ t.Errorf("not same id", id.GetHexString(), id2.GetHexString())
+ }
+ err = id2.SetDecString(id.GetDecString())
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !id.IsSame(&id2) {
+ t.Errorf("not same id", id.GetDecString(), id2.GetDecString())
+ }
}
{
var sec SecretKey
@@ -46,7 +55,7 @@ func testPre(t *testing.T) {
sec := make([]SecretKey, 3)
for i := 0; i < len(sec); i++ {
sec[i].Init()
- t.Log("sec=", sec[i].GetString(16))
+ t.Log("sec=", sec[i].GetHexString())
}
}
}
@@ -60,11 +69,20 @@ func testStringConversion(t *testing.T) {
} else {
s = "40804142231733909759579603404752749028378864165570215949"
}
- err := sec.SetStr(s, 10)
+ err := sec.SetDecString(s)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if s != sec.GetDecString() {
+ t.Error("not equal")
+ }
+ s = sec.GetHexString()
+ var sec2 SecretKey
+ err = sec2.SetHexString(s)
if err != nil {
t.Fatal(err)
}
- if s != sec.GetString(10) {
+ if !sec.IsSame(&sec2) {
t.Error("not equal")
}
}
@@ -88,8 +106,8 @@ func testRecoverSecretKey(t *testing.T) {
// recover sec2 from secVec and idVec
var sec2 SecretKey
sec2.Recover(secVec, idVec)
- if sec.GetString(16) != sec2.GetString(16) {
- t.Errorf("Mismatch in recovered secret key:\n %s\n %s.", sec.GetString(16), sec2.GetString(16))
+ if !sec.IsSame(&sec2) {
+ t.Errorf("Mismatch in recovered secret key:\n %s\n %s.", sec.GetHexString(), sec2.GetHexString())
}
}
@@ -119,15 +137,15 @@ func testSign(t *testing.T) {
for i := 0; i < n; i++ {
idVec[i].Set([]uint64{idTbl[i], 0, 0, 0, 0, 0}[0:unitN])
- t.Logf("idVec[%d]=%s\n", i, idVec[i].GetString(16))
+ t.Logf("idVec[%d]=%s\n", i, idVec[i].GetHexString())
secVec[i].Set(msk, &idVec[i])
pubVec[i].Set(mpk, &idVec[i])
- t.Logf("pubVec[%d]=%s\n", i, pubVec[i].GetString(16))
+ t.Logf("pubVec[%d]=%s\n", i, pubVec[i].GetHexString())
- if pubVec[i].GetString(16) != secVec[i].GetPublicKey().GetString(16) {
- t.Error("Pubkey derivation does not match")
+ if !pubVec[i].IsSame(secVec[i].GetPublicKey()) {
+ t.Errorf("Pubkey derivation does not match\n%s\n%s", pubVec[i].GetHexString(), secVec[i].GetPublicKey().GetHexString())
}
signVec[i] = *secVec[i].Sign(m)
@@ -137,17 +155,17 @@ func testSign(t *testing.T) {
}
var sec1 SecretKey
sec1.Recover(secVec, idVec)
- if sec0.GetString(16) != sec1.GetString(16) {
+ if !sec0.IsSame(&sec1) {
t.Error("Mismatch in recovered seckey.")
}
var pub1 PublicKey
pub1.Recover(pubVec, idVec)
- if pub0.GetString(16) != pub1.GetString(16) {
+ if !pub0.IsSame(&pub1) {
t.Error("Mismatch in recovered pubkey.")
}
var s1 Sign
s1.Recover(signVec, idVec)
- if s0.GetString(16) != s1.GetString(16) {
+ if !s0.IsSame(&s1) {
t.Error("Mismatch in recovered signature.")
}
}
@@ -193,8 +211,8 @@ func testData(t *testing.T) {
t.Log("testData")
var sec1, sec2 SecretKey
sec1.Init()
- s := sec1.GetData()
- err := sec2.SetData(s)
+ b := sec1.Serialize()
+ err := sec2.Deserialize(b)
if err != nil {
t.Fatal(err)
}
@@ -202,9 +220,9 @@ func testData(t *testing.T) {
t.Error("SecretKey not same")
}
pub1 := sec1.GetPublicKey()
- s = pub1.GetData()
+ b = pub1.Serialize()
var pub2 PublicKey
- err = pub2.SetData(s)
+ err = pub2.Deserialize(b)
if err != nil {
t.Fatal(err)
}
@@ -213,9 +231,9 @@ func testData(t *testing.T) {
}
m := "doremi"
sign1 := sec1.Sign(m)
- s = sign1.GetData()
+ b = sign1.Serialize()
var sign2 Sign
- err = sign2.SetData(s)
+ err = sign2.Deserialize(b)
if err != nil {
t.Fatal(err)
}