aboutsummaryrefslogtreecommitdiffstats
path: root/go
diff options
context:
space:
mode:
Diffstat (limited to 'go')
-rw-r--r--go/bls/bls.go216
-rw-r--r--go/bls/bls_test.go76
2 files changed, 151 insertions, 141 deletions
diff --git a/go/bls/bls.go b/go/bls/bls.go
index 087b386..f342615 100644
--- a/go/bls/bls.go
+++ b/go/bls/bls.go
@@ -75,55 +75,69 @@ func (id *ID) getPointer() (p *C.blsId) {
return (*C.blsId)(unsafe.Pointer(&id.v[0]))
}
-// GetByte --
-func (id *ID) GetByte(ioMode int) []byte {
+// GetLittleEndian --
+func (id *ID) GetLittleEndian() []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))
+ n := C.blsIdGetLittleEndian(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), id.getPointer())
if n == 0 {
- panic("implementation err. size of buf is small")
+ panic("err blsIdGetLittleEndian")
}
return buf[:n]
}
-// SetByte --
-func (id *ID) SetByte(buf []byte, ioMode int) error {
+// SetLittleEndian --
+func (id *ID) SetLittleEndian(buf []byte) error {
// #nosec
- err := C.blsIdSetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ err := C.blsIdSetLittleEndian(id.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf)))
if err != 0 {
- return fmt.Errorf("bad byte:%x", buf)
+ return fmt.Errorf("err blsIdSetLittleEndian %x", err)
}
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))
+ buf := make([]byte, 1024)
+ // #nosec
+ n := C.blsIdGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), id.getPointer())
+ if n == 0 {
+ panic("err blsIdGetHexStr")
+ }
+ return string(buf[:n])
}
// GetDecString --
func (id *ID) GetDecString() string {
- return string(id.GetByte(10))
+ buf := make([]byte, 1024)
+ // #nosec
+ n := C.blsIdGetDecStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), id.getPointer())
+ if n == 0 {
+ panic("err blsIdGetDecStr")
+ }
+ return string(buf[:n])
}
// SetHexString --
func (id *ID) SetHexString(s string) error {
- return id.SetByte([]byte(s), 16)
+ buf := []byte(s)
+ // #nosec
+ err := C.blsIdSetHexStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ if err != 0 {
+ return fmt.Errorf("err blsIdSetHexStr %x", err)
+ }
+ return nil
}
// SetDecString --
func (id *ID) SetDecString(s string) error {
- return id.SetByte([]byte(s), 10)
+ buf := []byte(s)
+ // #nosec
+ err := C.blsIdSetDecStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ if err != 0 {
+ return fmt.Errorf("err blsIdSetDecStr %x", buf)
+ }
+ return nil
}
// IsSame --
@@ -131,16 +145,6 @@ func (id *ID) IsSame(rhs *ID) bool {
return C.blsIdIsSame(id.getPointer(), rhs.getPointer()) == 1
}
-// Set --
-func (id *ID) Set(v []uint64) {
- expect := GetOpUnitSize()
- if len(v) != expect {
- panic(fmt.Errorf("bad size (%d), expected size %d", len(v), expect))
- }
- // #nosec
- C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
-}
-
// SecretKey --
type SecretKey struct {
v [C.BLS_MAX_OP_UNIT_SIZE]C.uint64_t
@@ -152,55 +156,69 @@ func (sec *SecretKey) getPointer() (p *C.blsSecretKey) {
return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0]))
}
-// GetByte --
-func (sec *SecretKey) GetByte(ioMode int) []byte {
+// GetLittleEndian --
+func (sec *SecretKey) GetLittleEndian() []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))
+ n := C.blsSecretKeyGetLittleEndian(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), sec.getPointer())
if n == 0 {
- panic("implementation err. size of buf is small")
+ panic("err blsSecretKeyGetLittleEndian")
}
return buf[:n]
}
-// SetByte --
-func (sec *SecretKey) SetByte(buf []byte, ioMode int) error {
+// SetLittleEndian --
+func (sec *SecretKey) SetLittleEndian(buf []byte) error {
// #nosec
- err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ err := C.blsSecretKeySetLittleEndian(sec.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf)))
if err != 0 {
- return fmt.Errorf("bad byte:%x", buf)
+ return fmt.Errorf("err blsSecretKeySetLittleEndian %x", buf)
}
return nil
}
-// Serialize --
-func (sec *SecretKey) Serialize() []byte {
- return sec.GetByte(C.blsIoEcComp)
-}
-
-// 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))
+ buf := make([]byte, 1024)
+ // #nosec
+ n := C.blsSecretKeyGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), sec.getPointer())
+ if n == 0 {
+ panic("err blsSecretKeyGetHexStr")
+ }
+ return string(buf[:n])
}
// GetDecString --
func (sec *SecretKey) GetDecString() string {
- return string(sec.GetByte(10))
+ buf := make([]byte, 1024)
+ // #nosec
+ n := C.blsSecretKeyGetDecStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), sec.getPointer())
+ if n == 0 {
+ panic("err blsSecretKeyGetDecStr")
+ }
+ return string(buf[:n])
}
// SetHexString --
func (sec *SecretKey) SetHexString(s string) error {
- return sec.SetByte([]byte(s), 16)
+ buf := []byte(s)
+ // #nosec
+ err := C.blsSecretKeySetHexStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ if err != 0 {
+ return fmt.Errorf("erre blsSecretKeySetHexStr %s", s)
+ }
+ return nil
}
// SetDecString --
func (sec *SecretKey) SetDecString(s string) error {
- return sec.SetByte([]byte(s), 10)
+ buf := []byte(s)
+ // #nosec
+ err := C.blsSecretKeySetDecStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ if err != 0 {
+ return fmt.Errorf("erre blsSecretKeySetDecStr %s", s)
+ }
+ return nil
}
// IsSame --
@@ -208,19 +226,9 @@ func (sec *SecretKey) IsSame(rhs *SecretKey) bool {
return C.blsSecretKeyIsSame(sec.getPointer(), rhs.getPointer()) == 1
}
-// SetArray --
-func (sec *SecretKey) SetArray(v []uint64) {
- expect := GetOpUnitSize()
- if len(v) != expect {
- panic(fmt.Errorf("bad size (%d), expected size %d", len(v), expect))
- }
- // #nosec
- C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
-}
-
// Init --
func (sec *SecretKey) Init() {
- C.blsSecretKeyInit(sec.getPointer())
+ C.blsSecretKeySetByCSPRNG(sec.getPointer())
}
// Add --
@@ -250,9 +258,9 @@ func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) {
// Set --
func (sec *SecretKey) Set(msk []SecretKey, id *ID) error {
- err := C.blsSecretKeySet(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer())
+ err := C.blsSecretKeyShare(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer())
if err != 0 {
- return fmt.Errorf("SecretKey.Set")
+ return fmt.Errorf("err blsSecretKeyShare id %s", id.GetHexString())
}
return nil
}
@@ -269,7 +277,7 @@ func (sec *SecretKey) Recover(secVec []SecretKey, idVec []ID) error {
// GetPop --
func (sec *SecretKey) GetPop() (sign *Sign) {
sign = new(Sign)
- C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer())
+ C.blsGetPop(sign.getPointer(), sec.getPointer())
return sign
}
@@ -284,37 +292,27 @@ func (pub *PublicKey) getPointer() (p *C.blsPublicKey) {
return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0]))
}
-// GetByte --
-func (pub *PublicKey) GetByte(ioMode int) []byte {
+// Serialize --
+func (pub *PublicKey) Serialize() []byte {
buf := make([]byte, 1024)
// #nosec
- n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ n := C.blsPublicKeySerialize(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), pub.getPointer())
if n == 0 {
- panic("implementation err. size of buf is small")
+ panic("err blsPublicKeySerialize")
}
return buf[:n]
}
-// SetByte --
-func (pub *PublicKey) SetByte(buf []byte, ioMode int) error {
+// Deserialize --
+func (pub *PublicKey) Deserialize(buf []byte) error {
// #nosec
- err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ err := C.blsPublicKeyDeserialize(pub.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf)))
if err != 0 {
- return fmt.Errorf("bad byte:%x", buf)
+ return fmt.Errorf("err blsPublicKeyDeserialize %x", buf)
}
return nil
}
-// Serialize --
-func (pub *PublicKey) Serialize() []byte {
- return pub.GetByte(C.blsIoEcComp)
-}
-
-// 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())
@@ -341,7 +339,7 @@ func (pub *PublicKey) Add(rhs *PublicKey) {
// Set --
func (pub *PublicKey) Set(mpk []PublicKey, id *ID) error {
- err := C.blsPublicKeySet(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer())
+ err := C.blsPublicKeyShare(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer())
if err != 0 {
return fmt.Errorf("PublicKey.set")
}
@@ -363,42 +361,32 @@ type Sign struct {
}
// getPointer --
-func (sign *Sign) getPointer() (p *C.blsSign) {
+func (sign *Sign) getPointer() (p *C.blsSignature) {
// #nosec
- return (*C.blsSign)(unsafe.Pointer(&sign.v[0]))
+ return (*C.blsSignature)(unsafe.Pointer(&sign.v[0]))
}
-// GetByte --
-func (sign *Sign) GetByte(ioMode int) []byte {
+// Serialize --
+func (sign *Sign) Serialize() []byte {
buf := make([]byte, 1024)
// #nosec
- n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ n := C.blsSignatureSerialize(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), sign.getPointer())
if n == 0 {
- panic("implementation err. size of buf is small")
+ panic("err blsSignatureSerialize")
}
return buf[:n]
}
-// SetByte --
-func (sign *Sign) SetByte(buf []byte, ioMode int) error {
+// Deserialize --
+func (sign *Sign) Deserialize(buf []byte) error {
// #nosec
- err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode))
+ err := C.blsSignatureDeserialize(sign.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf)))
if err != 0 {
- return fmt.Errorf("bad byte:%x", buf)
+ return fmt.Errorf("err blsSignatureDeserialize %x", buf)
}
return nil
}
-// Serialize --
-func (sign *Sign) Serialize() []byte {
- return sign.GetByte(C.blsIoEcComp)
-}
-
-// 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())
@@ -415,13 +403,13 @@ func (sign *Sign) SetHexString(s string) error {
// IsSame --
func (sign *Sign) IsSame(rhs *Sign) bool {
- return C.blsSignIsSame(sign.getPointer(), rhs.getPointer()) == 1
+ return C.blsSignatureIsSame(sign.getPointer(), rhs.getPointer()) == 1
}
// GetPublicKey --
func (sec *SecretKey) GetPublicKey() (pub *PublicKey) {
pub = new(PublicKey)
- C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer())
+ C.blsGetPublicKey(pub.getPointer(), sec.getPointer())
return pub
}
@@ -430,18 +418,18 @@ func (sec *SecretKey) Sign(m string) (sign *Sign) {
sign = new(Sign)
buf := []byte(m)
// #nosec
- C.blsSecretKeySign(sec.getPointer(), sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ C.blsSign(sign.getPointer(), sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
return sign
}
// Add --
func (sign *Sign) Add(rhs *Sign) {
- C.blsSignAdd(sign.getPointer(), rhs.getPointer())
+ C.blsSignatureAdd(sign.getPointer(), rhs.getPointer())
}
// Recover --
func (sign *Sign) Recover(signVec []Sign, idVec []ID) error {
- err := C.blsSignRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec)))
+ err := C.blsSignatureRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec)))
if err != 0 {
return fmt.Errorf("Sign.Recover")
}
@@ -452,10 +440,10 @@ func (sign *Sign) Recover(signVec []Sign, idVec []ID) error {
func (sign *Sign) Verify(pub *PublicKey, m string) bool {
buf := []byte(m)
// #nosec
- return C.blsSignVerify(sign.getPointer(), pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1
+ return C.blsVerify(sign.getPointer(), pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1
}
// VerifyPop --
func (sign *Sign) VerifyPop(pub *PublicKey) bool {
- return C.blsSignVerifyPop(sign.getPointer(), pub.getPointer()) == 1
+ return C.blsVerifyPop(sign.getPointer(), pub.getPointer()) == 1
}
diff --git a/go/bls/bls_test.go b/go/bls/bls_test.go
index 361b662..2561e83 100644
--- a/go/bls/bls_test.go
+++ b/go/bls/bls_test.go
@@ -11,11 +11,13 @@ func testPre(t *testing.T) {
t.Log("init")
{
var id ID
- id.Set([]uint64{6, 5, 4, 3, 2, 1}[0:unitN])
-
- t.Log("id :", id)
+ err := id.SetLittleEndian([]byte{6, 5, 4, 3, 2, 1})
+ if err != nil {
+ t.Error(err)
+ }
+ t.Log("id :", id.GetHexString())
var id2 ID
- err := id2.SetHexString(id.GetHexString())
+ err = id2.SetHexString(id.GetHexString())
if err != nil {
t.Fatal(err)
}
@@ -32,20 +34,23 @@ func testPre(t *testing.T) {
}
{
var sec SecretKey
- sec.SetArray([]uint64{1, 2, 3, 4, 5, 6}[0:unitN])
- t.Log("sec=", sec)
+ err := sec.SetLittleEndian([]byte{1, 2, 3, 4, 5, 6})
+ if err != nil {
+ t.Error(err)
+ }
+ t.Log("sec=", sec.GetHexString())
}
t.Log("create secret key")
m := "this is a bls sample for go"
var sec SecretKey
sec.Init()
- t.Log("sec:", sec)
+ t.Log("sec:", sec.GetHexString())
t.Log("create public key")
pub := sec.GetPublicKey()
- t.Log("pub:", pub)
+ t.Log("pub:", pub.GetHexString())
sign := sec.Sign(m)
- t.Log("sign:", sign)
+ t.Log("sign:", sign.GetHexString())
if !sign.Verify(pub, m) {
t.Error("Signature does not verify")
}
@@ -92,6 +97,7 @@ func testRecoverSecretKey(t *testing.T) {
k := 3000
var sec SecretKey
sec.Init()
+ t.Logf("sec=%s\n", sec.GetHexString())
// make master secret key
msk := sec.GetMasterSecretKey(k)
@@ -100,17 +106,21 @@ func testRecoverSecretKey(t *testing.T) {
secVec := make([]SecretKey, n)
idVec := make([]ID, n)
for i := 0; i < n; i++ {
- idVec[i].Set([]uint64{uint64(i), 1, 2, 3, 4, 5}[0:unitN])
- err := secVec[i].Set(msk, &idVec[i])
+ err := idVec[i].SetLittleEndian([]byte{byte(i & 255), byte(i >> 8), 2, 3, 4, 5})
if err != nil {
- t.Errorf("%s\n", err)
+ t.Error(err)
+ }
+ err = secVec[i].Set(msk, &idVec[i])
+ if err != nil {
+ t.Error(err)
}
+ // t.Logf("idVec[%d]=%s\n", i, idVec[i].GetHexString())
}
// recover sec2 from secVec and idVec
var sec2 SecretKey
err := sec2.Recover(secVec, idVec)
if err != nil {
- t.Errorf("err%s\n", err)
+ t.Error(err)
}
if !sec.IsSame(&sec2) {
t.Errorf("Mismatch in recovered secret key:\n %s\n %s.", sec.GetHexString(), sec2.GetHexString())
@@ -118,7 +128,7 @@ func testRecoverSecretKey(t *testing.T) {
}
func testEachSign(t *testing.T, m string, msk []SecretKey, mpk []PublicKey) ([]ID, []SecretKey, []PublicKey, []Sign) {
- idTbl := []uint64{3, 5, 193, 22, 15}
+ idTbl := []byte{3, 5, 193, 22, 15}
n := len(idTbl)
secVec := make([]SecretKey, n)
@@ -127,10 +137,13 @@ func testEachSign(t *testing.T, m string, msk []SecretKey, mpk []PublicKey) ([]I
idVec := make([]ID, n)
for i := 0; i < n; i++ {
- idVec[i].Set([]uint64{idTbl[i], 0, 0, 0, 0, 0}[0:unitN])
+ err := idVec[i].SetLittleEndian([]byte{idTbl[i], 0, 0, 0, 0, 0})
+ if err != nil {
+ t.Error(err)
+ }
t.Logf("idVec[%d]=%s\n", i, idVec[i].GetHexString())
- err := secVec[i].Set(msk, &idVec[i])
+ err = secVec[i].Set(msk, &idVec[i])
if err != nil {
t.Error(err)
}
@@ -236,8 +249,8 @@ func testData(t *testing.T) {
t.Log("testData")
var sec1, sec2 SecretKey
sec1.Init()
- b := sec1.Serialize()
- err := sec2.Deserialize(b)
+ b := sec1.GetLittleEndian()
+ err := sec2.SetLittleEndian(b)
if err != nil {
t.Fatal(err)
}
@@ -386,12 +399,15 @@ func benchmarkDeriveSeckeyShare(k int, b *testing.B) {
msk := sec.GetMasterSecretKey(k)
var id ID
for n := 0; n < b.N; n++ {
- id.Set([]uint64{1, 2, 3, 4, 5, uint64(n)})
+ err = id.SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(n)})
+ if err != nil {
+ b.Error(err)
+ }
b.StartTimer()
err := sec.Set(msk, &id)
b.StopTimer()
if err != nil {
- b.Errorf("%s\n", err)
+ b.Error(err)
}
}
}
@@ -417,10 +433,13 @@ func benchmarkRecoverSeckey(k int, b *testing.B) {
secVec := make([]SecretKey, n)
idVec := make([]ID, n)
for i := 0; i < n; i++ {
- idVec[i].Set([]uint64{1, 2, 3, 4, 5, uint64(i)})
- err := secVec[i].Set(msk, &idVec[i])
+ err := idVec[i].SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(i)})
if err != nil {
- b.Errorf("%s\n", err)
+ b.Error(err)
+ }
+ err = secVec[i].Set(msk, &idVec[i])
+ if err != nil {
+ b.Error(err)
}
}
@@ -456,10 +475,13 @@ func benchmarkRecoverSignature(k int, b *testing.B) {
secVec := make([]SecretKey, n)
signVec := make([]Sign, n)
for i := 0; i < n; i++ {
- idVec[i].Set([]uint64{1, 2, 3, 4, 5, uint64(i)})
- err := secVec[i].Set(msk, &idVec[i])
+ err := idVec[i].SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(i)})
if err != nil {
- b.Errorf("%s\n", err)
+ b.Error(err)
+ }
+ err = secVec[i].Set(msk, &idVec[i])
+ if err != nil {
+ b.Error(err)
}
signVec[i] = *secVec[i].Sign("test message")
}
@@ -470,7 +492,7 @@ func benchmarkRecoverSignature(k int, b *testing.B) {
for n := 0; n < b.N; n++ {
err := sig.Recover(signVec, idVec)
if err != nil {
- b.Errorf("%s\n", err)
+ b.Error(err)
}
}
}