library: math/big.Int (mini-impl for _cmptest/bigintdemo)

This commit is contained in:
xushiwei
2024-08-01 00:32:21 +08:00
parent 79d8b00b27
commit 2e4b1d8c2b
8 changed files with 537 additions and 3 deletions

View File

@@ -38,5 +38,7 @@ func main() {
// Swap a and b so that b is the next number in the sequence.
a, b = b, a
}
c.Printf(c.Str("%s\n"), a.CStr()) // 100-digit Fibonacci number
cstr := a.CStr()
c.Printf(c.Str("%s\n"), cstr) // 100-digit Fibonacci number
openssl.FreeCStr(cstr)
}

View File

@@ -0,0 +1,5 @@
#include <openssl/crypto.h>
void opensslFree(void *ptr) {
OPENSSL_free(ptr);
}

View File

@@ -98,6 +98,36 @@ func (*BIGNUM) Copy(b *BIGNUM) *BIGNUM { return nil }
// llgo:link (*BIGNUM).Swap C.BN_swap
func (*BIGNUM) Swap(b *BIGNUM) {}
// int BN_is_zero(const BIGNUM *a);
//
// llgo:link (*BIGNUM).IsZero C.BN_is_zero
func (*BIGNUM) IsZero() c.Int { return 0 }
// void BN_zero_ex(BIGNUM *a);
//
// llgo:link (*BIGNUM).SetZero C.BN_zero_ex
func (*BIGNUM) SetZero() {}
// int BN_is_one(const BIGNUM *a);
//
// llgo:link (*BIGNUM).IsOne C.BN_is_one
func (*BIGNUM) IsOne() c.Int { return 0 }
// int BN_is_odd(const BIGNUM *a);
//
// llgo:link (*BIGNUM).IsOdd C.BN_is_odd
func (*BIGNUM) IsOdd() c.Int { return 0 }
// int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w);
//
// llgo:link (*BIGNUM).AbsIsWord C.BN_abs_is_word
func (*BIGNUM) AbsIsWord(w BN_ULONG) c.Int { return 0 }
// int BN_is_word(const BIGNUM *a, const BN_ULONG w);
//
// llgo:link (*BIGNUM).IsWord C.BN_is_word
func (*BIGNUM) IsWord(w BN_ULONG) c.Int { return 0 }
// int BN_set_word(BIGNUM *a, BN_ULONG w);
//
// llgo:link (*BIGNUM).SetWord C.BN_set_word
@@ -287,6 +317,11 @@ func (*BIGNUM) Rshift1(a *BIGNUM) c.Int { return 0 }
// llgo:link (*BIGNUM).Exp C.BN_exp
func (*BIGNUM) Exp(a, p *BIGNUM, ctx *BN_CTX) c.Int { return 0 }
// int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx);
//
// llgo:link (*BIGNUM).ModExp C.BN_mod_exp
func (*BIGNUM) ModExp(a, p, m *BIGNUM, ctx *BN_CTX) c.Int { return 0 }
// int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
//
// llgo:link (*BIGNUM).Gcd C.BN_gcd

View File

@@ -25,13 +25,14 @@ import (
// -----------------------------------------------------------------------------
const (
LLGoFiles = "$(pkg-config --cflags openssl): _wrap/openssl.c"
LLGoPackage = "link: $(pkg-config --libs openssl); -lssl -lcrypto"
)
//go:linkname Free C.OPENSSL_free
//go:linkname Free C.opensslFree
func Free(ptr unsafe.Pointer)
//go:linkname FreeCStr C.OPENSSL_free
//go:linkname FreeCStr C.opensslFree
func FreeCStr(ptr *c.Char)
// -----------------------------------------------------------------------------