aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--go/blscgo/bls.go (renamed from go/bls/bls.go)113
-rw-r--r--go/main.go48
2 files changed, 91 insertions, 70 deletions
diff --git a/go/bls/bls.go b/go/blscgo/bls.go
index d9fbdd6..bd0cd2d 100644
--- a/go/bls/bls.go
+++ b/go/blscgo/bls.go
@@ -1,4 +1,4 @@
-package bls
+package blscgo
/*
#cgo CFLAGS:-I../../include
@@ -9,20 +9,26 @@ import "C"
import "fmt"
import "unsafe"
+// Init --
func Init() {
C.blsInit()
}
-type Id struct {
+// ID --
+type ID struct {
v [4]C.uint64_t
}
-func (id *Id) getPointer() (p *C.blsId) {
+// getPointer --
+func (id *ID) getPointer() (p *C.blsId) {
+ // #nosec
return (*C.blsId)(unsafe.Pointer(&id.v[0]))
}
-func (id *Id) String() string {
+// String --
+func (id *ID) String() string {
buf := make([]byte, 1024)
+ // #nosec
n := C.blsIdGetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if n == 0 {
panic("implementation err. size of buf is small")
@@ -30,8 +36,10 @@ func (id *Id) String() string {
return string(buf[:n])
}
-func (id *Id) SetStr(s string) error {
+// SetStr --
+func (id *ID) SetStr(s string) error {
buf := []byte(s)
+ // #nosec
err := C.blsIdSetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if err > 0 {
return fmt.Errorf("bad string:%s", s)
@@ -39,24 +47,31 @@ func (id *Id) SetStr(s string) error {
return nil
}
-func (id *Id) Set(v []uint64) error {
+// Set --
+func (id *ID) Set(v []uint64) error {
if len(v) != 4 {
- return fmt.Errorf("bad size", len(v))
+ return fmt.Errorf("bad size (%d), expected size 4", len(v))
}
+ // #nosec
C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
return nil
}
+// SecretKey --
type SecretKey struct {
v [4]C.uint64_t
}
+// getPointer --
func (sec *SecretKey) getPointer() (p *C.blsSecretKey) {
+ // #nosec
return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0]))
}
+// String --
func (sec *SecretKey) String() string {
buf := make([]byte, 1024)
+ // #nosec
n := C.blsSecretKeyGetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if n == 0 {
panic("implementation err. size of buf is small")
@@ -64,8 +79,10 @@ func (sec *SecretKey) String() string {
return string(buf[:n])
}
+// SetStr -- The string passed in is a number and can be either hex or decimal
func (sec *SecretKey) SetStr(s string) error {
buf := []byte(s)
+ // #nosec
err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if err > 0 {
return fmt.Errorf("bad string:%s", s)
@@ -73,22 +90,27 @@ func (sec *SecretKey) SetStr(s string) error {
return nil
}
+// SetArray --
func (sec *SecretKey) SetArray(v []uint64) error {
if len(v) != 4 {
- return fmt.Errorf("bad size", len(v))
+ return fmt.Errorf("bad size (%d), expected size 4", len(v))
}
+ // #nosec
C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
return nil
}
+// Init --
func (sec *SecretKey) Init() {
C.blsSecretKeyInit(sec.getPointer())
}
+// Add --
func (sec *SecretKey) Add(rhs *SecretKey) {
C.blsSecretKeyAdd(sec.getPointer(), rhs.getPointer())
}
+// GetMasterSecretKey --
func (sec *SecretKey) GetMasterSecretKey(k int) (msk []SecretKey) {
msk = make([]SecretKey, k)
msk[0] = *sec
@@ -98,6 +120,7 @@ func (sec *SecretKey) GetMasterSecretKey(k int) (msk []SecretKey) {
return msk
}
+// GetMasterPublicKey --
func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) {
n := len(msk)
mpk = make([]PublicKey, n)
@@ -107,62 +130,38 @@ func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) {
return mpk
}
-func makeSecretKeyPointerArray(v []SecretKey) (pv []*C.blsSecretKey) {
- n := len(v)
- pv = make([]*C.blsSecretKey, n)
- for i := 0; i < n; i++ {
- pv[i] = v[i].getPointer()
- }
- return pv
-}
-func makePublicKeyPointerArray(v []PublicKey) (pv []*C.blsPublicKey) {
- n := len(v)
- pv = make([]*C.blsPublicKey, n)
- for i := 0; i < n; i++ {
- pv[i] = v[i].getPointer()
- }
- return pv
-}
-func makeSignPointerArray(v []Sign) (pv []*C.blsSign) {
- n := len(v)
- pv = make([]*C.blsSign, n)
- for i := 0; i < n; i++ {
- pv[i] = v[i].getPointer()
- }
- return pv
-}
-func makeIdPointerArray(v []Id) (pv []*C.blsId) {
- n := len(v)
- pv = make([]*C.blsId, n)
- for i := 0; i < n; i++ {
- pv[i] = v[i].getPointer()
- }
- return pv
-}
-func (sec *SecretKey) Set(msk []SecretKey, id *Id) {
+// Set --
+func (sec *SecretKey) Set(msk []SecretKey, id *ID) {
C.blsSecretKeySet(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer())
}
-func (sec *SecretKey) Recover(secVec []SecretKey, idVec []Id) {
+// Recover --
+func (sec *SecretKey) Recover(secVec []SecretKey, idVec []ID) {
C.blsSecretKeyRecover(sec.getPointer(), secVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(secVec)))
}
+// GetPop --
func (sec *SecretKey) GetPop() (sign *Sign) {
sign = new(Sign)
C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer())
return sign
}
+// PublicKey --
type PublicKey struct {
v [4 * 2 * 3]C.uint64_t
}
+// getPointer --
func (pub *PublicKey) getPointer() (p *C.blsPublicKey) {
+ // #nosec
return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0]))
}
+// String --
func (pub *PublicKey) String() string {
buf := make([]byte, 1024)
+ // #nosec
n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if n == 0 {
panic("implementation err. size of buf is small")
@@ -170,8 +169,10 @@ func (pub *PublicKey) String() string {
return string(buf[:n])
}
+// SetStr --
func (pub *PublicKey) SetStr(s string) error {
buf := []byte(s)
+ // #nosec
err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if err > 0 {
return fmt.Errorf("bad string:%s", s)
@@ -179,27 +180,36 @@ func (pub *PublicKey) SetStr(s string) error {
return nil
}
+// Add --
func (pub *PublicKey) Add(rhs *PublicKey) {
C.blsPublicKeyAdd(pub.getPointer(), rhs.getPointer())
}
-func (pub *PublicKey) Set(msk []PublicKey, id *Id) {
- C.blsPublicKeySet(pub.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer())
+
+// Set --
+func (pub *PublicKey) Set(mpk []PublicKey, id *ID) {
+ C.blsPublicKeySet(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer())
}
-func (pub *PublicKey) Recover(pubVec []PublicKey, idVec []Id) {
+// Recover --
+func (pub *PublicKey) Recover(pubVec []PublicKey, idVec []ID) {
C.blsPublicKeyRecover(pub.getPointer(), pubVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(pubVec)))
}
+// Sign --
type Sign struct {
v [4 * 3]C.uint64_t
}
+// getPointer --
func (sign *Sign) getPointer() (p *C.blsSign) {
+ // #nosec
return (*C.blsSign)(unsafe.Pointer(&sign.v[0]))
}
+// String --
func (sign *Sign) String() string {
buf := make([]byte, 1024)
+ // #nosec
n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if n == 0 {
panic("implementation err. size of buf is small")
@@ -207,8 +217,10 @@ func (sign *Sign) String() string {
return string(buf[:n])
}
+// SetStr --
func (sign *Sign) SetStr(s string) error {
buf := []byte(s)
+ // #nosec
err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
if err > 0 {
return fmt.Errorf("bad string:%s", s)
@@ -216,31 +228,40 @@ func (sign *Sign) SetStr(s string) error {
return nil
}
+// GetPublicKey --
func (sec *SecretKey) GetPublicKey() (pub *PublicKey) {
pub = new(PublicKey)
C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer())
return pub
}
+// Sign --
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)))
return sign
}
+// Add --
func (sign *Sign) Add(rhs *Sign) {
C.blsSignAdd(sign.getPointer(), rhs.getPointer())
}
-func (sign *Sign) Recover(signVec []Sign, idVec []Id) {
+
+// Recover --
+func (sign *Sign) Recover(signVec []Sign, idVec []ID) {
C.blsSignRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec)))
}
+// Verify --
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
}
+// VerifyPop --
func (sign *Sign) VerifyPop(pub *PublicKey) bool {
return C.blsSignVerifyPop(sign.getPointer(), pub.getPointer()) == 1
}
diff --git a/go/main.go b/go/main.go
index 6cd5cb0..87934ad 100644
--- a/go/main.go
+++ b/go/main.go
@@ -1,7 +1,7 @@
package main
import "fmt"
-import "./bls"
+import "./blscgo"
import "runtime"
import "time"
@@ -13,7 +13,7 @@ func verifyTrue(b bool) {
func testRecoverSecretKey() {
fmt.Println("testRecoverSecretKey")
k := 3000
- var sec bls.SecretKey
+ var sec blscgo.SecretKey
sec.Init()
fmt.Println("sec =", sec)
@@ -21,14 +21,14 @@ func testRecoverSecretKey() {
msk := sec.GetMasterSecretKey(k)
n := k
- secVec := make([]bls.SecretKey, n)
- idVec := make([]bls.Id, n)
+ secVec := make([]blscgo.SecretKey, n)
+ idVec := make([]blscgo.ID, n)
for i := 0; i < n; i++ {
idVec[i].Set([]uint64{1, 2, 3, uint64(i)})
secVec[i].Set(msk, &idVec[i])
}
// recover sec2 from secVec and idVec
- var sec2 bls.SecretKey
+ var sec2 blscgo.SecretKey
sec2.Recover(secVec, idVec)
fmt.Println("sec2=", sec2)
}
@@ -37,7 +37,7 @@ func testSign() {
m := "testSign"
fmt.Println(m)
- var sec0 bls.SecretKey
+ var sec0 blscgo.SecretKey
sec0.Init()
pub0 := sec0.GetPublicKey()
s0 := sec0.Sign(m)
@@ -45,15 +45,15 @@ func testSign() {
k := 3
msk := sec0.GetMasterSecretKey(k)
- mpk := bls.GetMasterPublicKey(msk)
+ mpk := blscgo.GetMasterPublicKey(msk)
idTbl := []uint64{3, 5, 193, 22, 15}
n := len(idTbl)
- secVec := make([]bls.SecretKey, n)
- pubVec := make([]bls.PublicKey, n)
- signVec := make([]bls.Sign, n)
- idVec := make([]bls.Id, n)
+ secVec := make([]blscgo.SecretKey, n)
+ pubVec := make([]blscgo.PublicKey, n)
+ signVec := make([]blscgo.Sign, n)
+ idVec := make([]blscgo.ID, n)
for i := 0; i < n; i++ {
idVec[i].Set([]uint64{idTbl[i], 0, 0, 0})
@@ -69,21 +69,21 @@ func testSign() {
signVec[i] = *secVec[i].Sign(m)
verifyTrue(signVec[i].Verify(&pubVec[i], m))
}
- var sec1 bls.SecretKey
+ var sec1 blscgo.SecretKey
sec1.Recover(secVec, idVec)
verifyTrue(sec0.String() == sec1.String())
- var pub1 bls.PublicKey
+ var pub1 blscgo.PublicKey
pub1.Recover(pubVec, idVec)
verifyTrue(pub0.String() == pub1.String())
- var s1 bls.Sign
+ var s1 blscgo.Sign
s1.Recover(signVec, idVec)
verifyTrue(s0.String() == s1.String())
}
func testAdd() {
fmt.Println("testAdd")
- var sec1 bls.SecretKey
- var sec2 bls.SecretKey
+ var sec1 blscgo.SecretKey
+ var sec2 blscgo.SecretKey
sec1.Init()
sec2.Init()
@@ -103,7 +103,7 @@ func testAdd() {
func testPop() {
fmt.Println("testPop")
- var sec bls.SecretKey
+ var sec blscgo.SecretKey
sec.Init()
pop := sec.GetPop()
verifyTrue(pop.VerifyPop(sec.GetPublicKey()))
@@ -112,24 +112,24 @@ func testPop() {
}
func main() {
fmt.Println("init")
- bls.Init()
+ blscgo.Init()
{
- var id bls.Id
+ var id blscgo.ID
id.Set([]uint64{4, 3, 2, 1})
fmt.Println("id :", id)
- var id2 bls.Id
+ var id2 blscgo.ID
id2.SetStr(id.String())
fmt.Println("id2:", id2)
}
{
- var sec bls.SecretKey
+ var sec blscgo.SecretKey
sec.SetArray([]uint64{1, 2, 3, 4})
fmt.Println("sec=", sec)
}
fmt.Println("create secret key")
- m := "this is a bls sample for go"
- var sec bls.SecretKey
+ m := "this is a blscgo sample for go"
+ var sec blscgo.SecretKey
sec.Init()
fmt.Println("sec:", sec)
fmt.Println("create public key")
@@ -141,7 +141,7 @@ func main() {
// How to make array of SecretKey
{
- sec := make([]bls.SecretKey, 3)
+ sec := make([]blscgo.SecretKey, 3)
for i := 0; i < len(sec); i++ {
sec[i].Init()
fmt.Println("sec=", sec[i].String())