diff --git a/.gitignore b/.gitignore index 1428b3e..bdbc6ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ lib/ main +.ccls-cache/ diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d7d96d4 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.batsense.net/mCaptcha/mcaptcha-pow-go + +go 1.21.5 diff --git a/mcaptcha_pow_go.go b/mcaptcha_pow_go.go new file mode 100644 index 0000000..317446a --- /dev/null +++ b/mcaptcha_pow_go.go @@ -0,0 +1,45 @@ +package "mcaptcha_pow_go" + +/* +#cgo LDFLAGS: ./lib/libmcaptcha_pow_ffi.a -ldl +#include "./mcaptcha-pow-ffi/mcaptcha_pow_ffi.h" +#include +*/ +import "C" +import "fmt" + +type ProofOfWork struct { + nonce uint64 + result string +} + +func ProveWork(salt string, phrase string, difficulty uint) ProofOfWork { + res := C.prove_work(C.CString(salt), + C.CString(phrase), C.uint(difficulty)) + + return ProofOfWork{ + nonce: uint64(res.nonce), + result: C.GoString(res.result), + } + +} + +func (v ProofOfWork) IsSufficientDifficulty(salt string, difficulty uint) bool { + res := C.is_sufficient_difficulty( + C.ulong(v.nonce), + C.CString(v.result), + C.CString(salt), + C.uint(difficulty)) + return bool(res) + +} + +func (v ProofOfWork) IsValidProof(phrase string, salt string) bool { + res := C.is_valid_proof( + C.ulong(v.nonce), + C.CString(v.result), + C.CString(phrase), + C.CString(salt)) + return bool(res) + +}