From 16257d70be30bac3830fdff14c985a1b8fa0590c Mon Sep 17 00:00:00 2001 From: Nik <njunger@uwaterloo.ca> Date: Tue, 27 Jan 2015 16:36:16 -0500 Subject: [PATCH] Removed C type wrappers --- generation.go | 12 ++++++------ gmp_big.go | 32 +++++++++++++++----------------- params.go | 22 +++++++++------------- 3 files changed, 30 insertions(+), 36 deletions(-) diff --git a/generation.go b/generation.go index 4127bb5..2ee46a6 100644 --- a/generation.go +++ b/generation.go @@ -28,36 +28,36 @@ import "math/big" func GenerateA(rbits uint32, qbits uint32) Params { params := makeParams() - C.pbc_param_init_a_gen(params.data, C.int(rbits), C.int(qbits)) + C.pbc_param_init_a_gen(params, C.int(rbits), C.int(qbits)) return params } func GenerateA1(n *big.Int) Params { params := makeParams() - C.pbc_param_init_a1_gen(params.data, &big2mpz(n).data[0]) + C.pbc_param_init_a1_gen(params, &big2mpz(n)[0]) return params } func GenerateD(d uint32, bitlimit uint32) Params { params := makeParams() - C.genPairingD(params.data, C.uint(d), C.uint(bitlimit)) + C.genPairingD(params, C.uint(d), C.uint(bitlimit)) return params } func GenerateE(rbits uint32, qbits uint32) Params { params := makeParams() - C.pbc_param_init_e_gen(params.data, C.int(rbits), C.int(qbits)) + C.pbc_param_init_e_gen(params, C.int(rbits), C.int(qbits)) return params } func GenerateF(bits uint32) Params { params := makeParams() - C.pbc_param_init_f_gen(params.data, C.int(bits)) + C.pbc_param_init_f_gen(params, C.int(bits)) return params } func GenerateG(d uint32, bitlimit uint32) Params { params := makeParams() - C.genPairingG(params.data, C.uint(d), C.uint(bitlimit)) + C.genPairingG(params, C.uint(d), C.uint(bitlimit)) return params } diff --git a/gmp_big.go b/gmp_big.go index d6928df..c437868 100644 --- a/gmp_big.go +++ b/gmp_big.go @@ -7,42 +7,40 @@ package pbc */ import "C" -import "math/big" -import "runtime" -import "unsafe" - -type mpz_t struct { - data C.mpz_t -} +import ( + "math/big" + "runtime" + "unsafe" +) var wordSize C.size_t var bitsPerWord C.size_t -func clearmpz(x *mpz_t) { - C.mpz_clear(&x.data[0]) +func clearmpz(x *C.mpz_t) { + C.mpz_clear(&x[0]) } -func newmpz() *mpz_t { - out := &mpz_t{} - C.mpz_init(&out.data[0]) +func newmpz() *C.mpz_t { + out := &C.mpz_t{} + C.mpz_init(&out[0]) runtime.SetFinalizer(out, clearmpz) return out } -func big2mpz(num *big.Int) *mpz_t { +func big2mpz(num *big.Int) *C.mpz_t { words := num.Bits() out := newmpz() if len(words) > 0 { - C.mpz_import(&out.data[0], C.size_t(len(words)), -1, wordSize, 0, 0, unsafe.Pointer(&words[0])) + C.mpz_import(&out[0], C.size_t(len(words)), -1, wordSize, 0, 0, unsafe.Pointer(&words[0])) } return out } -func mpz2big(num *mpz_t) (out *big.Int) { - wordsNeeded := (C.mpz_sizeinbase(&num.data[0], 2) + (bitsPerWord - 1)) / bitsPerWord +func mpz2big(num *C.mpz_t) (out *big.Int) { + wordsNeeded := (C.mpz_sizeinbase(&num[0], 2) + (bitsPerWord - 1)) / bitsPerWord words := make([]big.Word, wordsNeeded) var wordsWritten C.size_t - C.mpz_export(unsafe.Pointer(&words[0]), &wordsWritten, -1, wordSize, 0, 0, &num.data[0]) + C.mpz_export(unsafe.Pointer(&words[0]), &wordsWritten, -1, wordSize, 0, 0, &num[0]) out = &big.Int{} out.SetBits(words) return diff --git a/params.go b/params.go index 667d2fb..81ea4a7 100644 --- a/params.go +++ b/params.go @@ -29,34 +29,30 @@ type Params interface { String() string } -type paramsImpl struct { - data C.pbc_param_ptr -} - func NewParamsFromString(data string) (Pairing, error) { cstr := C.CString(data) defer C.free(unsafe.Pointer(cstr)) params := makeParams() - if ok := C.pbc_param_init_set_str(params.data, cstr); ok != 0 { + if ok := C.pbc_param_init_set_str(params, cstr); ok != 0 { return nil, ErrInvalidParamString } return params, nil } -func (params *paramsImpl) NewPairing() Pairing { +func (params *C.struct_pbc_param_s) NewPairing() Pairing { return NewPairingFromParams(params) } -func (params *paramsImpl) WriteTo(w io.Writer) (n int64, err error) { +func (params *C.struct_pbc_param_s) WriteTo(w io.Writer) (n int64, err error) { count, err := io.WriteString(w, params.String()) return int64(count), err } -func (params *paramsImpl) String() string { +func (params *C.struct_pbc_param_s) String() string { var buf *C.char var bufLen C.size_t - if C.param_out_str(&buf, &bufLen, params.data) == 0 { + if C.param_out_str(&buf, &bufLen, params) == 0 { return "" } str := C.GoStringN(buf, C.int(bufLen)) @@ -64,12 +60,12 @@ func (params *paramsImpl) String() string { return str } -func paramsFinalizer(params *paramsImpl) { - C.pbc_param_clear(params.data) +func paramsFinalizer(params *C.struct_pbc_param_s) { + C.pbc_param_clear(params) } -func makeParams() *paramsImpl { - params := ¶msImpl{data: &C.struct_pbc_param_s{}} +func makeParams() *C.struct_pbc_param_s { + params := &C.struct_pbc_param_s{} runtime.SetFinalizer(params, paramsFinalizer) return params } -- GitLab