aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2016-09-14 15:15:23 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2016-09-14 15:15:23 +0800
commit218791d020469766d9bbce9ad0cccf07e0ae93e1 (patch)
tree6d3a02f2d30e9881d0a697b7c649f169bfe4f8f3
parent261c20cf9b4b3fbd50e4984ca81ef1912e4f11f9 (diff)
downloaddexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.gz
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.bz2
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.lz
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.xz
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.zst
dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.zip
runtime.SetFinalizer is removed
-rw-r--r--go/bls/bls.go121
1 files changed, 54 insertions, 67 deletions
diff --git a/go/bls/bls.go b/go/bls/bls.go
index c59b55c..187b89a 100644
--- a/go/bls/bls.go
+++ b/go/bls/bls.go
@@ -7,7 +7,6 @@ package bls
*/
import "C"
import "fmt"
-import "runtime"
import "unsafe"
func Init() {
@@ -15,29 +14,26 @@ func Init() {
}
type Id struct {
- self *C.blsId
+ v [4]C.uint64_t
}
-func destroyBlsId(p *Id) {
- C.blsIdDestroy(p.self)
+func (id *Id) getPointer() (p *C.blsId) {
+ return (*C.blsId)(unsafe.Pointer(&id.v[0]))
}
func NewId() *Id {
- p := new(Id)
- p.self = C.blsIdCreate()
- runtime.SetFinalizer(p, destroyBlsId)
- return p
+ return new(Id)
}
func (id *Id) Clone() (r *Id) {
- r = NewId()
- C.blsIdCopy(r.self, id.self)
+ r = new(Id)
+ *r = *id
return r
}
func (id *Id) String() string {
buf := make([]byte, 1024)
- n := C.blsIdGetStr(id.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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")
}
@@ -46,7 +42,7 @@ func (id *Id) String() string {
func (id *Id) SetStr(s string) error {
buf := []byte(s)
- err := C.blsIdSetStr(id.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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)
}
@@ -57,34 +53,31 @@ func (id *Id) Set(v []uint64) error {
if len(v) != 4 {
return fmt.Errorf("bad size", len(v))
}
- C.blsIdSet(id.self, (*C.uint64_t)(unsafe.Pointer(&v[0])))
+ C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
return nil
}
type SecretKey struct {
- self *C.blsSecretKey
+ v [4]C.uint64_t
}
-func destroyBlsSecretKey(p *SecretKey) {
- C.blsSecretKeyDestroy(p.self)
+func (sec *SecretKey) getPointer() (p *C.blsSecretKey) {
+ return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0]))
}
func NewSecretKey() *SecretKey {
- p := new(SecretKey)
- p.self = C.blsSecretKeyCreate()
- runtime.SetFinalizer(p, destroyBlsSecretKey)
- return p
+ return new(SecretKey)
}
func (sec *SecretKey) Clone() (r *SecretKey) {
- r = NewSecretKey()
- C.blsSecretKeyCopy(r.self, sec.self)
+ r = new(SecretKey)
+ *r = *sec
return r
}
func (sec *SecretKey) String() string {
buf := make([]byte, 1024)
- n := C.blsSecretKeyGetStr(sec.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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")
}
@@ -93,7 +86,7 @@ func (sec *SecretKey) String() string {
func (sec *SecretKey) SetStr(s string) error {
buf := []byte(s)
- err := C.blsSecretKeySetStr(sec.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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)
}
@@ -104,23 +97,23 @@ func (sec *SecretKey) SetArray(v []uint64) error {
if len(v) != 4 {
return fmt.Errorf("bad size", len(v))
}
- C.blsSecretKeySetArray(sec.self, (*C.uint64_t)(unsafe.Pointer(&v[0])))
+ C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0])))
return nil
}
func (sec *SecretKey) Init() {
- C.blsSecretKeyInit(sec.self)
+ C.blsSecretKeyInit(sec.getPointer())
}
func (sec *SecretKey) Add(rhs *SecretKey) {
- C.blsSecretKeyAdd(sec.self, rhs.self)
+ C.blsSecretKeyAdd(sec.getPointer(), rhs.getPointer())
}
func (sec *SecretKey) GetMasterSecretKey(k int) (msk []*SecretKey) {
msk = make([]*SecretKey, k)
msk[0] = sec.Clone()
for i := 1; i < k; i++ {
- msk[i] = NewSecretKey()
+ msk[i] = new(SecretKey)
msk[i].Init()
}
return msk
@@ -139,7 +132,7 @@ 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].self
+ pv[i] = v[i].getPointer()
}
return pv
}
@@ -147,7 +140,7 @@ 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].self
+ pv[i] = v[i].getPointer()
}
return pv
}
@@ -155,7 +148,7 @@ 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].self
+ pv[i] = v[i].getPointer()
}
return pv
}
@@ -163,51 +156,48 @@ 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].self
+ pv[i] = v[i].getPointer()
}
return pv
}
func (sec *SecretKey) Set(msk []*SecretKey, id *Id) {
v := makeSecretKeyPointerArray(msk)
- C.blsSecretKeySet(sec.self, (**C.blsSecretKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.self)
+ C.blsSecretKeySet(sec.getPointer(), (**C.blsSecretKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.getPointer())
}
func (sec *SecretKey) Recover(secVec []*SecretKey, idVec []*Id) {
sv := makeSecretKeyPointerArray(secVec)
iv := makeIdPointerArray(idVec)
- C.blsSecretKeyRecover(sec.self, (**C.blsSecretKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(secVec)))
+ C.blsSecretKeyRecover(sec.getPointer(), (**C.blsSecretKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(secVec)))
}
func (sec *SecretKey) GetPop() (sign *Sign) {
sign = NewSign()
- C.blsSecretKeyGetPop(sec.self, sign.self)
+ C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer())
return sign
}
type PublicKey struct {
- self *C.blsPublicKey
+ v [4 * 2 * 3]C.uint64_t
}
-func destroyBlsPublicKey(p *PublicKey) {
- C.blsPublicKeyDestroy(p.self)
+func (pub *PublicKey) getPointer() (p *C.blsPublicKey) {
+ return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0]))
}
func NewPublicKey() *PublicKey {
- p := new(PublicKey)
- p.self = C.blsPublicKeyCreate()
- runtime.SetFinalizer(p, destroyBlsPublicKey)
- return p
+ return new(PublicKey)
}
func (pub *PublicKey) Clone() (r *PublicKey) {
- r = NewPublicKey()
- C.blsPublicKeyCopy(r.self, pub.self)
+ r = new(PublicKey)
+ *r = *pub
return r
}
func (pub *PublicKey) String() string {
buf := make([]byte, 1024)
- n := C.blsPublicKeyGetStr(pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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")
}
@@ -216,7 +206,7 @@ func (pub *PublicKey) String() string {
func (pub *PublicKey) SetStr(s string) error {
buf := []byte(s)
- err := C.blsPublicKeySetStr(pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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)
}
@@ -224,43 +214,40 @@ func (pub *PublicKey) SetStr(s string) error {
}
func (pub *PublicKey) Add(rhs *PublicKey) {
- C.blsPublicKeyAdd(pub.self, rhs.self)
+ C.blsPublicKeyAdd(pub.getPointer(), rhs.getPointer())
}
-func (sec *PublicKey) Set(msk []*PublicKey, id *Id) {
+func (pub *PublicKey) Set(msk []*PublicKey, id *Id) {
v := makePublicKeyPointerArray(msk)
- C.blsPublicKeySet(sec.self, (**C.blsPublicKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.self)
+ C.blsPublicKeySet(pub.getPointer(), (**C.blsPublicKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.getPointer())
}
func (pub *PublicKey) Recover(pubVec []*PublicKey, idVec []*Id) {
sv := makePublicKeyPointerArray(pubVec)
iv := makeIdPointerArray(idVec)
- C.blsPublicKeyRecover(pub.self, (**C.blsPublicKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(pubVec)))
+ C.blsPublicKeyRecover(pub.getPointer(), (**C.blsPublicKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(pubVec)))
}
type Sign struct {
- self *C.blsSign
+ v [4 * 3]C.uint64_t
}
-func destroyBlsSign(p *Sign) {
- C.blsSignDestroy(p.self)
+func (sign *Sign) getPointer() (p *C.blsSign) {
+ return (*C.blsSign)(unsafe.Pointer(&sign.v[0]))
}
func NewSign() *Sign {
- p := new(Sign)
- p.self = C.blsSignCreate()
- runtime.SetFinalizer(p, destroyBlsSign)
- return p
+ return new(Sign)
}
func (sign *Sign) Clone() (r *Sign) {
- r = NewSign()
- C.blsSignCopy(r.self, sign.self)
+ r = new(Sign)
+ *r = *sign
return r
}
func (sign *Sign) String() string {
buf := make([]byte, 1024)
- n := C.blsSignGetStr(sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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")
}
@@ -269,7 +256,7 @@ func (sign *Sign) String() string {
func (sign *Sign) SetStr(s string) error {
buf := []byte(s)
- err := C.blsSignSetStr(sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ 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)
}
@@ -278,31 +265,31 @@ func (sign *Sign) SetStr(s string) error {
func (sec *SecretKey) GetPublicKey() (pub *PublicKey) {
pub = NewPublicKey()
- C.blsSecretKeyGetPublicKey(sec.self, pub.self)
+ C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer())
return pub
}
func (sec *SecretKey) Sign(m string) (sign *Sign) {
sign = NewSign()
buf := []byte(m)
- C.blsSecretKeySign(sec.self, sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
+ C.blsSecretKeySign(sec.getPointer(), sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))
return sign
}
func (sign *Sign) Add(rhs *Sign) {
- C.blsSignAdd(sign.self, rhs.self)
+ C.blsSignAdd(sign.getPointer(), rhs.getPointer())
}
func (sign *Sign) Recover(signVec []*Sign, idVec []*Id) {
sv := makeSignPointerArray(signVec)
iv := makeIdPointerArray(idVec)
- C.blsSignRecover(sign.self, (**C.blsSign)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(signVec)))
+ C.blsSignRecover(sign.getPointer(), (**C.blsSign)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(signVec)))
}
func (sign *Sign) Verify(pub *PublicKey, m string) bool {
buf := []byte(m)
- return C.blsSignVerify(sign.self, pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1
+ return C.blsSignVerify(sign.getPointer(), pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1
}
func (sign *Sign) VerifyPop(pub *PublicKey) bool {
- return C.blsSignVerifyPop(sign.self, pub.self) == 1
+ return C.blsSignVerifyPop(sign.getPointer(), pub.getPointer()) == 1
}