Package mod contains a generic implementation of finite field arithmetic on integer fields with a constant modulus.
ByteOrder denotes the endianness of the operation.
Int is a generic implementation of finite field arithmetic on integer finite fields with a given constant modulus, built using Go's built-in big.Int package. Int satisfies the kyber.Scalar interface, and hence serves as a basic implementation of kyber.Scalar, e.g., representing discrete-log exponents of Schnorr groups or scalar multipliers for elliptic curves.
Int offers an API similar to and compatible with big.Int, but "carries around" a pointer to the relevant modulus and automatically normalizes the value to that modulus after all arithmetic operations, simplifying modular arithmetic. Binary operations assume that the source(s) have the same modulus, but do not check this assumption. Unary and binary arithmetic operations may be performed on uninitialized target objects, and receive the modulus of the first operand. For efficiency the modulus field M is a pointer, whose target is assumed never to change.
NewInt creaters a new Int with a given big.Int and a big.Int modulus.
NewInt64 creates a new Int with a given int64 value and big.Int modulus.
NewIntBytes creates a new Int with a given slice of bytes and a big.Int modulus.
NewIntString creates a new Int with a given string and a big.Int modulus. The value is set to a rational fraction n/d in a given base.
Add sets the target to a + b mod M, where M is a's modulus..
BigEndian encodes the value of this Int into a big-endian byte-slice at least min bytes but no more than max bytes long. Panics if max != 0 and the Int cannot be represented in max bytes.
Clone returns a separate duplicate of this Int.
Cmp compares two Ints for equality or inequality
Div sets the target to a * b^-1 mod M, where b^-1 is the modular inverse of b.
Equal returns true if the two Ints are equal
Exp sets the target to a^e mod M, where e is an arbitrary big.Int exponent (not necessarily 0 <= e < M).
Init a Int with a given big.Int value and modulus pointer. Note that the value is copied; the modulus is not.
Init64 creates an Int with an int64 value and big.Int modulus.
InitBytes init the Int to a number represented in a big-endian byte string.
InitString inits the Int to a rational fraction n/d specified with a pair of strings in a given base.
Int64 returns the int64 representation of the value. If the value is not representable in an int64 the result is undefined.
Inv sets the target to the modular inverse of a with respect to modulus M.
Jacobi computes the Jacobi symbol of (a/M), which indicates whether a is zero (0), a positive square in M (1), or a non-square in M (-1).
LittleEndian encodes the value of this Int into a little-endian byte-slice at least min bytes but no more than max bytes long. Panics if max != 0 and the Int cannot be represented in max bytes.
MarshalBinary encodes the value of this Int into a byte-slice exactly Len() bytes long. It uses i's ByteOrder to determine which byte order to output.
MarshalID returns a unique identifier for this type
MarshalSize returns the length in bytes of encoded integers with modulus M. The length of encoded Ints depends only on the size of the modulus, and not on the the value of the encoded integer, making the encoding is fixed-length for simplicity and security.
MarshalTo encodes this Int to the given Writer.
Mul sets the target to a * b mod M. Target receives a's modulus.
Neg sets the target to -a mod M.
Nonzero returns true if the integer value is nonzero.
One sets the Int to the value 1. The modulus must already be initialized.
Pick a [pseudo-]random integer modulo M using bits from the given stream cipher.
Set both value and modulus to be equal to another Int. Since this method copies the modulus as well, it may be used as an alternative to Init().
SetBytes set the value value to a number represented by a byte string. Endianness depends on the endianess set in i.
SetInt64 sets the Int to an arbitrary 64-bit "small integer" value. The modulus must already be initialized.
SetString sets the Int to a rational fraction n/d represented by a pair of strings. If d == "", then the denominator is taken to be 1. Returns (i,true) on success, or (nil,false) if either string fails to parse.
SetUint64 sets the Int to an arbitrary uint64 value. The modulus must already be initialized.
Sqrt computes some square root of a mod M of one exists. Assumes the modulus M is an odd prime. Returns true on success, false if input a is not a square.
Return the Int's integer value in hexadecimal string representation.
Sub sets the target to a - b mod M. Target receives a's modulus.
Uint64 returns the uint64 representation of the value. If the value is not representable in an uint64 the result is undefined.
UnmarshalBinary tries to decode a Int from a byte-slice buffer. Returns an error if the buffer is not exactly Len() bytes long or if the contents of the buffer represents an out-of-range integer.
UnmarshalFrom tries to decode an Int from the given Reader.
Zero set the Int to the value 0. The modulus must already be initialized.