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 := &paramsImpl{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