Module bn

big-number library for Lua 5.x based on OpenSSL BIGNUM

This module provides a complete wrapper for OpenSSL’s BIGNUM operations, enabling arbitrary precision arithmetic similar to BIGNUM.

Usage:

    bn = require('openssl').bn
    

Info:

  • License: This code is hereby placed in the public domain.
  • Author: Luiz Henrique de Figueiredo lhf@tecgraf.puc-rio.br

Functions

bits (x) bits(x)
tostring (x) tostring(x)
tohex (x) tohex(x)
totext (x[, n]) totext(x[, n])
tonumber (x) tonumber(x)
iszero (x) iszero(x)
isone (x) isone(x)
isodd (x) isodd(x)
isneg (x) isneg(x)
number (x) number(x)
text (t) text(t)
compare (x, y) compare(x, y)
__eq (x, y) __eq(x, y)
__lt (x, y) __lt(x, y)
sqr (x) sqr(x)
neg (x) neg(x)
abs (x) abs(x)
add (x, y) add(x, y)
sub (x, y) sub(x, y)
mul (x, y) mul(x, y)
div (x, y) div(x, y)
mod (x, y) mod(x, y)
rmod (x, y) rmod(x, y)
divmod (x, y) divmod(x, y)
gcd (x, y) gcd(x, y)
pow (x, y) pow(x, y)
addmod (x, y, m) addmod(x, y, m)
submod (x, y, m) submod(x, y, m)
mulmod (x, y, m) mulmod(x, y, m)
powmod (x, y, m) powmod(x, y, m)
sqrmod (x, m) sqrmod(x, m)
invmod (x, m) invmod(x, m)
sqrtmod (x, m) sqrtmod(x, m)
random ([bits=32]) random([bits])
aprime ([bits=32]) aprime([bits])
isprime (x[, checks]) isprime(x[, checks])


Functions

bits (x)
bits(x)

Parameters:

  • x big number

Returns:

    integer number of bits

Usage:

    bits = bn.bits(x)
tostring (x)
tostring(x)

Parameters:

  • x big number

Returns:

    string decimal representation

Usage:

    s = bn.tostring(x)
tohex (x)
tohex(x)

Parameters:

  • x big number

Returns:

    string hexadecimal representation

Usage:

    s = bn.tohex(x)
totext (x[, n])
totext(x[, n])

Parameters:

  • x big number
  • n number of bytes (optional)

Returns:

    string binary representation

Usage:

    t = bn.totext(x)
tonumber (x)
tonumber(x)

Parameters:

  • x big number

Returns:

    number

Usage:

    n = bn.tonumber(x)
iszero (x)
iszero(x)

Parameters:

  • x big number

Returns:

    boolean true if x == 0

Usage:

    ok = bn.iszero(x)
isone (x)
isone(x)

Parameters:

  • x big number

Returns:

    boolean true if x == 1

Usage:

    ok = bn.isone(x)
isodd (x)
isodd(x)

Parameters:

  • x big number

Returns:

    boolean true if x is odd

Usage:

    ok = bn.isodd(x)
isneg (x)
isneg(x)

Parameters:

  • x big number

Returns:

    boolean true if x < 0

Usage:

    ok = bn.isneg(x)
number (x)
number(x)

Parameters:

  • x number or string

Returns:

    big number

Usage:

    x = bn.number(123)
text (t)
text(t)

Parameters:

  • t string binary representation

Returns:

    big number

Usage:

    x = bn.text(t)
compare (x, y)
compare(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    integer (-1, 0, 1)

Usage:

    cmp = bn.compare(x, y)
__eq (x, y)
__eq(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    boolean true if x == y
__lt (x, y)
__lt(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    boolean true if x < y
sqr (x)
sqr(x)

Parameters:

  • x big number

Returns:

    big number x^2

Usage:

    y = bn.sqr(x)
neg (x)
neg(x)

Parameters:

  • x big number

Returns:

    big number -x

Usage:

    y = bn.neg(x)
abs (x)
abs(x)

Parameters:

  • x big number

Returns:

    big number |x|

Usage:

    y = bn.abs(x)
add (x, y)
add(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x + y

Usage:

    z = bn.add(x, y)
sub (x, y)
sub(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x – y

Usage:

    z = bn.sub(x, y)
mul (x, y)
mul(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x * y

Usage:

    z = bn.mul(x, y)
div (x, y)
div(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x // y

Usage:

    q = bn.div(x, y)
mod (x, y)
mod(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x % y

Usage:

    r = bn.mod(x, y)
rmod (x, y)
rmod(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x mod y (always positive)

Usage:

    r = bn.rmod(x, y)
divmod (x, y)
divmod(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    q, r quotient and remainder

Usage:

    q, r = bn.divmod(x, y)
gcd (x, y)
gcd(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number gcd(x, y)

Usage:

    g = bn.gcd(x, y)
pow (x, y)
pow(x, y)

Parameters:

  • x big number
  • y big number

Returns:

    big number x^y

Usage:

    z = bn.pow(x, y)
addmod (x, y, m)
addmod(x, y, m)

Parameters:

  • x big number
  • y big number
  • m modulus

Returns:

    big number (x + y) % m

Usage:

    z = bn.addmod(x, y, m)
submod (x, y, m)
submod(x, y, m)

Parameters:

  • x big number
  • y big number
  • m modulus

Returns:

    big number (x – y) % m

Usage:

    z = bn.submod(x, y, m)
mulmod (x, y, m)
mulmod(x, y, m)

Parameters:

  • x big number
  • y big number
  • m modulus

Returns:

    big number (x * y) % m

Usage:

    z = bn.mulmod(x, y, m)
powmod (x, y, m)
powmod(x, y, m)

Parameters:

  • x big number
  • y big number
  • m modulus

Returns:

    big number (x^y) % m

Usage:

    z = bn.powmod(x, y, m)
sqrmod (x, m)
sqrmod(x, m)

Parameters:

  • x big number
  • m modulus

Returns:

    big number (x^2) % m

Usage:

    z = bn.sqrmod(x, m)
invmod (x, m)
invmod(x, m)

Parameters:

  • x big number
  • m modulus

Returns:

    big number modular inverse

Usage:

    y = bn.invmod(x, m)
sqrtmod (x, m)
sqrtmod(x, m)

Parameters:

  • x big number
  • m modulus

Returns:

    big number modular square root

Usage:

    y = bn.sqrtmod(x, m)
random ([bits=32])
random([bits])

Parameters:

  • bits number of bits (default 32) (default 32)

Returns:

    big number random value

Usage:

    x = bn.random(128)
aprime ([bits=32])
aprime([bits])

Parameters:

  • bits number of bits (default 32) (default 32)

Returns:

    big number probable prime

Usage:

    p = bn.aprime(128)
isprime (x[, checks])
isprime(x[, checks])

Parameters:

  • x big number
  • checks number of checks (optional)

Returns:

    boolean true if x is prime

Usage:

    ok = bn.isprime(x)
generated by LDoc 1.5.0 Last updated 2025-11-05 20:38:13