ltc_math_descriptor

math descriptor

extern (C) nothrow
struct ltc_math_descriptor {}

Members

Variables

add
int function(void* a, void* b, void* c) nothrow add;

add two integers @param a The first source integer @param b The second source integer @param c The destination of "a + b" @return CRYPT_OK on success

addi
int function(void* a, c_ulong b, void* c) nothrow addi;

add two integers @param a The first source integer @param b The second source integer (single digit of upto bits_per_digit in length) @param c The destination of "a + b" @return CRYPT_OK on success

bits_per_digit
int bits_per_digit;

Bits per digit, amount of bits must fit in an c_ulong

compare
int function(void* a, void* b) nothrow compare;

compare two integers @param a The left side integer @param b The right side integer @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison)

compare_d
int function(void* a, c_ulong n) nothrow compare_d;

compare against int @param a The left side integer @param b The right side integer (upto bits_per_digit) @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison)

copy
int function(void* src, void* dst) nothrow copy;

copy @param src The number to copy from @param dst The number to write to @return CRYPT_OK on success

count_bits
int function(void* a) nothrow count_bits;

Count the number of bits used to represent the integer @param a The integer to count @return The number of bits required to represent the integer

count_lsb_bits
int function(void* a) nothrow count_lsb_bits;

Count the number of LSB bits which are zero @param a The integer to count @return The number of contiguous zero LSB bits

deinit
void function(void* a) nothrow deinit;

deinit @param a The number to free @return CRYPT_OK on success

div_2
int function(void* a, void* b) nothrow div_2;

divide by two @param a The integer to divide (shift right) @param b The destination @return CRYPT_OK on success

ecc_map
int function(ecc_point* P, void* modulus, void* mp) nothrow ecc_map;

ECC mapping from projective to affine, currently uses (x,y,z) => (x/z^2, y/z^3, 1) @param P The point to map @param modulus The modulus @param mp The "b" value from montgomery_setup() @return CRYPT_OK on success @remark The mapping can be different but keep in mind a ecc_point only has three integers (x,y,z) so if you use a different mapping you have to make it fit.

ecc_mul2add
int function(ecc_point* A, void* kA, ecc_point* B, void* kB, ecc_point* C, void* modulus) nothrow ecc_mul2add;

Computes kA*A + kB*B = C using Shamir's Trick @param A First point to multiply @param kA What to multiple A by @param B Second point to multiply @param kB What to multiple B by @param C out Destination point (can overlap with A or B @param modulus Modulus for curve @return CRYPT_OK on success

ecc_ptadd
int function(ecc_point* P, ecc_point* Q, ecc_point* R, void* modulus, void* mp) nothrow ecc_ptadd;

ECC GF(p) point addition @param P The first point @param Q The second point @param R The destination of P + Q @param modulus The modulus @param mp The "b" value from montgomery_setup() @return CRYPT_OK on success

ecc_ptdbl
int function(ecc_point* P, ecc_point* R, void* modulus, void* mp) nothrow ecc_ptdbl;

ECC GF(p) point double @param P The first point @param R The destination of 2P @param modulus The modulus @param mp The "b" value from montgomery_setup() @return CRYPT_OK on success

ecc_ptmul
int function(void* k, ecc_point* G, ecc_point* R, void* modulus, int map) nothrow ecc_ptmul;

ECC GF(p) point multiplication (from the NIST curves) @param k The integer to multiply the point by @param G The point to multiply @param R The destination for kG @param modulus The modulus for the field @param map Boolean indicated whether to map back to affine or not (can be ignored if you work in affine only) @return CRYPT_OK on success

exptmod
int function(void* a, void* b, void* c, void* d) nothrow exptmod;

Modular exponentiation @param a The base integer @param b The power (can be negative) integer @param c The modulus integer @param d The destination @return CRYPT_OK on success

gcd
int function(void* a, void* b, void* c) nothrow gcd;

gcd @param a The first integer @param b The second integer @param c The destination for (a, b) @return CRYPT_OK on success

get_digit
c_ulong function(void* a, int n) nothrow get_digit;

get digit n @param a The number to read from @param n The number of the digit to fetch @return The bits_per_digit sized n'th digit of a

get_digit_count
int function(void* a) nothrow get_digit_count;

Get the number of digits that represent the number @param a The number to count @return The number of digits used to represent the number

get_int
c_ulong function(void* a) nothrow get_int;

get small constant @param a Number to read, only fetches upto bits_per_digit from the number @return The lower bits_per_digit of the integer (unsigned)

init
int function(void** a) nothrow init;

initialize a bignum @param a The number to initialize @return CRYPT_OK on success

init_copy
int function(void** dst, void* src) nothrow init_copy;

init copy @param dst The number to initialize and write to @param src The number to copy from @return CRYPT_OK on success

invmod
int function(void*, void*, void*) nothrow invmod;

Modular inversion @param a The value to invert @param b The modulus @param c The destination (1/a mod b) @return CRYPT_OK on success

isprime
int function(void* a, int* b) nothrow isprime;

Primality testing @param a The integer to test @param b The destination of the result (FP_YES if prime) @return CRYPT_OK on success

lcm
int function(void* a, void* b, void* c) nothrow lcm;

lcm @param a The first integer @param b The second integer @param c The destination for [a, b] @return CRYPT_OK on success

modi
int function(void* a, c_ulong b, c_ulong* c) nothrow modi;

Get remainder (small value) @param a The integer to reduce @param b The modulus (upto bits_per_digit in length) @param c The destination for the residue @return CRYPT_OK on success

montgomery_deinit
void function(void* a) nothrow montgomery_deinit;

clean up (frees memory) @param a The value "b" from montgomery_setup() @return CRYPT_OK on success

montgomery_normalization
int function(void* a, void* b) nothrow montgomery_normalization;

get normalization value @param a The destination for the normalization value @param b The modulus @return CRYPT_OK on success

montgomery_reduce
int function(void* a, void* b, void* c) nothrow montgomery_reduce;

reduce a number @param a The number [and dest] to reduce @param b The modulus @param c The value "b" from montgomery_setup() @return CRYPT_OK on success

montgomery_setup
int function(void* a, void** b) nothrow montgomery_setup;

setup montgomery @param a The modulus @param b The destination for the reduction digit @return CRYPT_OK on success

mpdiv
int function(void* a, void* b, void* c, void* d) nothrow mpdiv;

Divide an integer @param a The dividend @param b The divisor @param c The quotient (can be NULL to signify don't care) @param d The remainder (can be NULL to signify don't care) @return CRYPT_OK on success

mul
int function(void* a, void* b, void* c) nothrow mul;

multiply two integers @param a The first source integer @param b The second source integer (single digit of upto bits_per_digit in length) @param c The destination of "a * b" @return CRYPT_OK on success

muli
int function(void* a, c_ulong b, void* c) nothrow muli;

multiply two integers @param a The first source integer @param b The second source integer (single digit of upto bits_per_digit in length) @param c The destination of "a * b" @return CRYPT_OK on success

mulmod
int function(void* a, void* b, void* c, void* d) nothrow mulmod;

Modular multiplication @param a The first source @param b The second source @param c The modulus @param d The destination (a*b mod c) @return CRYPT_OK on success

name
char* name;

Name of the math provider

neg
int function(void* src, void* dst) nothrow neg;

negate @param src The number to negate @param dst The destination @return CRYPT_OK on success

read_radix
int function(void* a, const char* str, int radix) nothrow read_radix;

read ascii string @param a The integer to store into @param str The string to read @param radix The radix the integer has been represented in (2-64) @return CRYPT_OK on success

rsa_keygen
int function(prng_state* prng, int wprng, int size, long e, rsa_key* key) nothrow rsa_keygen;

RSA Key Generation @param prng An active PRNG state @param wprng The index of the PRNG desired @param size The size of the modulus (key size) desired (octets) @param e The "e" value (public key). e==65537 is a good choice @param key out Destination of a newly created private key pair @return CRYPT_OK if successful, upon error all allocated ram is freed

rsa_me
int function(const ubyte* _in, c_ulong inlen, ubyte* _out, c_ulong* outlen, int which, rsa_key* key) nothrow rsa_me;

RSA exponentiation @param in The octet array representing the base @param inlen The length of the input @param out The destination (to be stored in an octet array format) @param outlen The length of the output buffer and the resulting size (zero padded to the size of the modulus) @param which PK_PUBLIC for public RSA and PK_PRIVATE for private RSA @param key The RSA key to use @return CRYPT_OK on success

set_int
int function(void* a, c_ulong n) nothrow set_int;

set small constant @param a Number to write to @param n Source upto bits_per_digit (actually meant for very small constants) @return CRYPT_OK on succcess

sqr
int function(void* a, void* b) nothrow sqr;

Square an integer @param a The integer to square @param b The destination @return CRYPT_OK on success

sqrmod
int function(void* a, void* b, void* c) nothrow sqrmod;

Modular squaring @param a The first source @param b The modulus @param c The destination (a*a mod b) @return CRYPT_OK on success

sub
int function(void* a, void* b, void* c) nothrow sub;

subtract two integers @param a The first source integer @param b The second source integer @param c The destination of "a - b" @return CRYPT_OK on success

subi
int function(void* a, c_ulong b, void* c) nothrow subi;

subtract two integers @param a The first source integer @param b The second source integer (single digit of upto bits_per_digit in length) @param c The destination of "a - b" @return CRYPT_OK on success

twoexpt
int function(void* a, int n) nothrow twoexpt;

Compute a power of two @param a The integer to store the power in @param n The power of two you want to store (a = 2^n) @return CRYPT_OK on success

unsigned_read
int function(void* dst, ubyte* src, c_ulong len) nothrow unsigned_read;

read an array of octets and store as integer @param dst The integer to load @param src The array of octets @param len The number of octets @return CRYPT_OK on success

unsigned_size
c_ulong function(void* a) nothrow unsigned_size;

get size as unsigned char string @param a The integer to get the size (when stored in array of octets) @return The length of the integer

unsigned_write
int function(void* src, ubyte* dst) nothrow unsigned_write;

store an integer as an array of octets @param src The integer to store @param dst The buffer to store the integer in @return CRYPT_OK on success

write_radix
int function(void* a, char* str, int radix) nothrow write_radix;

write number to string @param a The integer to store @param str The destination for the string @param radix The radix the integer is to be represented in (2-64) @return CRYPT_OK on success

Meta