2024-01-08 04:39:39 +05:30
|
|
|
package gomcaptcha
|
2024-01-08 04:23:07 +05:30
|
|
|
|
|
|
|
/*
|
|
|
|
#cgo LDFLAGS: ./lib/libmcaptcha_pow_ffi.a -ldl
|
|
|
|
#include "./mcaptcha-pow-ffi/mcaptcha_pow_ffi.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
*/
|
|
|
|
import "C"
|
|
|
|
|
|
|
|
type ProofOfWork struct {
|
2024-01-08 04:39:39 +05:30
|
|
|
Nonce uint64
|
|
|
|
Result string
|
2024-01-08 04:23:07 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
func ProveWork(salt string, phrase string, difficulty uint) ProofOfWork {
|
|
|
|
res := C.prove_work(C.CString(salt),
|
|
|
|
C.CString(phrase), C.uint(difficulty))
|
|
|
|
|
|
|
|
return ProofOfWork{
|
2024-01-08 04:39:39 +05:30
|
|
|
Nonce: uint64(res.nonce),
|
|
|
|
Result: C.GoString(res.result),
|
2024-01-08 04:23:07 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v ProofOfWork) IsSufficientDifficulty(salt string, difficulty uint) bool {
|
|
|
|
res := C.is_sufficient_difficulty(
|
2024-01-08 04:39:39 +05:30
|
|
|
C.ulong(v.Nonce),
|
|
|
|
C.CString(v.Result),
|
2024-01-08 04:23:07 +05:30
|
|
|
C.CString(salt),
|
|
|
|
C.uint(difficulty))
|
|
|
|
return bool(res)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v ProofOfWork) IsValidProof(phrase string, salt string) bool {
|
|
|
|
res := C.is_valid_proof(
|
2024-01-08 04:39:39 +05:30
|
|
|
C.ulong(v.Nonce),
|
|
|
|
C.CString(v.Result),
|
2024-01-08 04:23:07 +05:30
|
|
|
C.CString(phrase),
|
|
|
|
C.CString(salt))
|
|
|
|
return bool(res)
|
|
|
|
|
|
|
|
}
|