|
scclib
Stable Cloud Computing C++ Library
|
Big number. More...
#include <bignum.h>
Public Member Functions | |
| Bignum () | |
| Construct and set to 0. | |
| Bignum (Bignum &&other) | |
| Move constructor. | |
| Bignum & | operator= (Bignum &&other) |
| Move assignment. | |
| Bignum (const Bignum &other) | |
| Copy constructor. | |
| Bignum & | operator= (const Bignum &other) |
| Copy assignment. | |
| Bignum (uint32_t w) | |
| Word constructor. | |
| Bignum & | operator= (uint32_t w) |
| Word assignment. | |
| Bignum (const void *loc, int len) | |
| Set to data. | |
| void * | bn () |
| Bignum context for use by external services. | |
| const void * | const_bn () const |
| Bignum context for use by external services. | |
| void | set_width (int) |
| Set the number to a specified bit width. | |
| void | set (uint32_t) |
| Set to a word. More... | |
| void | set (const void *, int) |
| Set a positive integer from input bytes. | |
| void | set_2sc (const void *, int) |
| Set integer from twos complement input stream. | |
| int | len () const |
| Required length of get() output in bytes. More... | |
| void | get (void *, int) const |
| Octal (byte) output of a positive number. More... | |
| int | len_2sc () const |
| Get the length of octal output in twos complement form. | |
| void | get_2sc (void *, int) const |
| Octal (byte) output, in two's complement form. More... | |
| void | copy (const Bignum &) |
| Copy into this bignum. | |
| void | move (Bignum &) |
| Move into this bignum. More... | |
| void | clear () |
| Clear and set to 0. | |
| int | width () const |
| Number of significant bits. More... | |
| void | exp (const Bignum &) |
| Exponent a^b. | |
| void | exp (uint32_t b) |
| Exponent a^b. | |
| void | gcd (const Bignum &) |
| Greatest common divisor for a and b. | |
| void | gen_rand (int, bool=false, bool=false) |
| Generate a random number of the specified bit width. More... | |
| bool | is_prime (int=-1) |
| Perform a Miller-Rabin prime test to test primality. More... | |
| void | gen_prime (int) |
| Generate a random pseudo-prime number of the specified bit width. More... | |
| void | lshift (int) |
| Left bit shift. | |
| void | rshift (int) |
| Right bit shift. | |
| void | add (const Bignum &) |
| Add a+b. | |
| void | add (uint32_t b) |
| Word add a+b. | |
| void | sub (const Bignum &) |
| Subtract a-b. | |
| void | sub (uint32_t b) |
| Subtract an integer. | |
| void | mul (const Bignum &) |
| Mulitply a*b. | |
| void | mul (uint32_t b) |
| Word multiply. | |
| void | div (const Bignum &, Bignum *) |
| Divide a/b. More... | |
| void | div (uint32_t b, Bignum *rem) |
| Divide a/b. More... | |
| void | mod (const Bignum &) |
| Modulus ab. | |
| void | mod (uint32_t b) |
| Word modulus. | |
| void | negate () |
| Negate (change sign). | |
| void | bit_not () |
| Bitwise not ~a. | |
| void | bit_and (const Bignum &b) |
| Bitwise not a&b. | |
| void | bit_or (const Bignum &b) |
| Bitwise or a|b. | |
| void | bit_xor (const Bignum &b) |
| Bitwise xor a^b. | |
| bool | is_bit_set (int) const |
| Is the bit set? More... | |
| void | set_bit (int) |
| Set a bit. More... | |
| void | clear_bit (int) |
| Clear a bit. More... | |
| void | gcd (uint32_t b) |
| Greatest common divisor of a and b. | |
| bool | is_negative () const |
| Is negative? | |
| int | cmp (uint32_t w) const |
| Arithmetic compare for an integer. | |
| int | cmp (const Bignum &) const |
| Arithmetic compare. | |
| bool | operator== (const Bignum &o) const |
| Equal operator. | |
| bool | operator!= (const Bignum &o) const |
| Not equal operator. | |
| bool | operator< (const Bignum &o) const |
| Less than operator. | |
| bool | operator> (const Bignum &o) const |
| Greater than operator. | |
| bool | operator<= (const Bignum &o) const |
| Less than equal operator. | |
| bool | operator>= (const Bignum &o) const |
| Greater than equal operator. | |
| bool | operator== (uint32_t o) const |
| Equal operator. | |
| bool | operator!= (uint32_t o) const |
| Not equal operator. | |
| bool | operator< (uint32_t o) const |
| Less than operator. | |
| bool | operator> (uint32_t o) const |
| Greater than operator. | |
| bool | operator<= (uint32_t o) const |
| Less than equal operator. | |
| bool | operator>= (uint32_t o) const |
| Greater than equal operator. | |
| Bignum | operator<< (int shift) const |
| Right shift operator. | |
| Bignum & | operator<<= (int shift) |
| Right shift assign operator. | |
| Bignum | operator>> (int shift) const |
| Right shift operator. | |
| Bignum & | operator>>= (int shift) |
| Right shift assign operator. | |
| Bignum | operator+ (const Bignum &a) const |
| Add operator. | |
| Bignum | operator+= (const Bignum &a) |
| Add assign operator. | |
| Bignum | operator+ (uint32_t a) const |
| Add operator. | |
| Bignum | operator+= (uint32_t a) |
| Add assign operator. | |
| Bignum & | operator++ () |
| Prefix addition operator. | |
| Bignum | operator++ (int d) |
| Postfix addition operator. | |
| Bignum | operator- () |
| Negation operator -a. | |
| Bignum | operator- (const Bignum &a) const |
| Subtract operator. | |
| Bignum | operator-= (const Bignum &a) |
| Subtract assign operator. | |
| Bignum | operator- (uint32_t a) const |
| Subtract operator. | |
| Bignum | operator-= (uint32_t a) |
| Subtract assign operator. | |
| Bignum & | operator-- () |
| Prefix decrement. | |
| Bignum | operator-- (int d) |
| Postfix decrement. | |
| Bignum | operator* (const Bignum &a) const |
| Multiply operator. | |
| Bignum | operator*= (const Bignum &a) |
| Multiply assign operator. | |
| Bignum | operator* (uint32_t a) const |
| Multiply operator. | |
| Bignum | operator*= (uint32_t a) |
| Multiply assign operator. | |
| Bignum | operator/ (const Bignum &a) const |
| Divide operator. | |
| Bignum | operator/= (const Bignum &a) |
| Divide assign operator. | |
| Bignum | operator/ (uint32_t a) const |
| Divide operator. | |
| Bignum | operator/= (uint32_t a) |
| Divide assign operator. | |
| Bignum | operator% (const Bignum &a) const |
| Modulus operator. | |
| Bignum | operator%= (const Bignum &a) |
| Modulus assign operator. | |
| Bignum | operator% (uint32_t a) const |
| Modulus operator. | |
| Bignum | operator%= (uint32_t a) |
| Modulus assign operator. | |
| Bignum | operator& (const Bignum &a) const |
| And operator. | |
| Bignum | operator&= (const Bignum &a) |
| And assign operator. | |
| Bignum | operator& (uint32_t a) const |
| And operator. | |
| Bignum | operator&= (uint32_t a) |
| And assign operator. | |
| Bignum | operator| (const Bignum &a) const |
| Or operator. | |
| Bignum | operator|= (const Bignum &a) |
| Or assign operator. | |
| Bignum | operator| (uint32_t a) const |
| Or operator. | |
| Bignum | operator|= (uint32_t a) |
| Or assign operator. | |
| Bignum | operator^ (const Bignum &a) const |
| Xor operator. | |
| Bignum | operator^= (const Bignum &a) |
| Xor assign operator. | |
| Bignum | operator^ (uint32_t a) const |
| Xor operator. | |
| Bignum | operator^= (uint32_t a) |
| Xor assign operator. | |
| Bignum | operator~ () const |
| Not operator. | |
| std::string | str (bool=false) const |
| Return a string representation in decimal or hex. More... | |
Static Public Member Functions | |
| static bool | is_prime (uint32_t w) |
| Is prime for an integer. | |
Big number.
| void scc::crypto::Bignum::clear_bit | ( | int | ) |
Clear a bit.
Bits are 0 indexed.
| bit_number | bit to set, must be >= 0. |
|
inline |
| void scc::crypto::Bignum::gen_prime | ( | int | ) |
Generate a random pseudo-prime number of the specified bit width.
| bit_width | The size of the prime in bits. |
| void scc::crypto::Bignum::gen_rand | ( | int | , |
| bool | = false, |
||
| bool | = false |
||
| ) |
Generate a random number of the specified bit width.
A cryptographically strong number has the upper two bits set, so that the product of two such numbers will always have 2*bit_width size.
| bit_width | The size of the prime in bits, must be > 0. If strong, must be > 1. |
| strong | If this is true, generate a cryptographically strong number (top two bits are on). |
| odd | If this is true, generates an odd number. |
| void scc::crypto::Bignum::get | ( | void * | , |
| int | |||
| ) | const |
Octal (byte) output of a positive number.
| loc | data location |
| len | length of data |
Throws an exception if the number is negative.
| void scc::crypto::Bignum::get_2sc | ( | void * | , |
| int | |||
| ) | const |
Octal (byte) output, in two's complement form.
Returns the minimum number of bytes required.
Example:
128 bin 0000 0000 1000 0000 hex 00 80 127 bin 0111 1111 hex 7f -1 bin 1111 1111 hex ff -127 bin 1000 0001 hex 81 -128 bin 1000 0000 hex 80 -129 bin 1111 1111 0111 1111 hex ff 7f
| loc | data location |
| len | length of data |
| bool scc::crypto::Bignum::is_bit_set | ( | int | ) | const |
Is the bit set?
Bits are 0 indexed.
| bit_number | bit to set, must be >= 0. |
| bool scc::crypto::Bignum::is_prime | ( | int | = -1 | ) |
Perform a Miller-Rabin prime test to test primality.
The default calculates primes with expected 1/10^80 probability of false positive.
| trials | Number of trials, <= 0 means calculate trials automatically. |
| int scc::crypto::Bignum::len | ( | ) | const |
Required length of get() output in bytes.
The number zero has length 1.
| void scc::crypto::Bignum::move | ( | Bignum & | ) |
Move into this bignum.
The other bignum will be initialized and set to zero.
| void scc::crypto::Bignum::set | ( | uint32_t | ) |
Set to a word.
This setter will not necessarily zero out all data.
| void scc::crypto::Bignum::set_bit | ( | int | ) |
Set a bit.
Bits are 0 indexed. Expands the number if necessary.
| bit_number | bit to set, must be >= 0. |
| std::string scc::crypto::Bignum::str | ( | bool | = false | ) | const |
Return a string representation in decimal or hex.
| hex | emit hexadecimal |
| int scc::crypto::Bignum::width | ( | ) | const |
Number of significant bits.
The number 0 has width 1.