purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
uint.c File Reference
#include "purify/uint.h"
#include <assert.h>
#include <string.h>
#include "uint_impl.h"

Go to the source code of this file.

Macros

#define PURIFY_UINT_FN(name)   purify_u256_##name
 
#define PURIFY_UINT_WORDS   4
 
#define PURIFY_UINT_FN(name)   purify_u320_##name
 
#define PURIFY_UINT_WORDS   5
 
#define PURIFY_UINT_FN(name)   purify_u512_##name
 
#define PURIFY_UINT_WORDS   8
 

Functions

static size_t purify_uint_bit_length_u64 (uint64_t value)
 
static uint64_t purify_uint_mul_u64 (uint64_t lhs, uint64_t rhs, uint64_t *hi)
 
static uint64_t purify_uint_add_u64_carry (uint64_t value, uint64_t addend, uint64_t *hi)
 
static uint64_t purify_uint_mask_u64 (int flag)
 
static int purify_u512_is_nonzero_ct (const uint64_t value[8])
 
static void purify_u512_shift_left_one_or_bit (uint64_t value[8], uint64_t bit)
 
static uint64_t purify_u512_sub_with_borrow_ct (uint64_t out[8], const uint64_t lhs[8], const uint64_t rhs[8])
 
static void purify_u512_cmov_words (uint64_t dst[8], const uint64_t src[8], uint64_t mask)
 
static uint64_t purify_uint_divmod_u32 (uint64_t hi, uint64_t lo, uint32_t divisor, uint32_t *rem_out)
 
void purify_u320_widen_u256 (uint64_t out[5], const uint64_t value[4])
 
void purify_u512_widen_u256 (uint64_t out[8], const uint64_t value[4])
 
int purify_u256_try_narrow_u320 (uint64_t out[4], const uint64_t value[5])
 
int purify_u256_try_narrow_u512 (uint64_t out[4], const uint64_t value[8])
 
int purify_u512_try_divmod_same (uint64_t quotient[8], uint64_t remainder[8], const uint64_t numerator[8], const uint64_t denominator[8])
 
int purify_u512_try_divmod_same_consttime (uint64_t quotient[8], uint64_t remainder[8], const uint64_t numerator[8], const uint64_t denominator[8])
 
void purify_u512_multiply_u256 (uint64_t out[8], const uint64_t lhs[4], const uint64_t rhs[4])
 

Macro Definition Documentation

◆ PURIFY_UINT_FN [1/3]

#define PURIFY_UINT_FN (   name)    purify_u256_##name

Definition at line 147 of file uint.c.

◆ PURIFY_UINT_FN [2/3]

#define PURIFY_UINT_FN (   name)    purify_u320_##name

Definition at line 147 of file uint.c.

◆ PURIFY_UINT_FN [3/3]

#define PURIFY_UINT_FN (   name)    purify_u512_##name

Definition at line 147 of file uint.c.

◆ PURIFY_UINT_WORDS [1/3]

#define PURIFY_UINT_WORDS   4

Definition at line 148 of file uint.c.

◆ PURIFY_UINT_WORDS [2/3]

#define PURIFY_UINT_WORDS   5

Definition at line 148 of file uint.c.

◆ PURIFY_UINT_WORDS [3/3]

#define PURIFY_UINT_WORDS   8

Definition at line 148 of file uint.c.

Function Documentation

◆ purify_u256_try_narrow_u320()

int purify_u256_try_narrow_u320 ( uint64_t  out[4],
const uint64_t  value[5] 
)

Definition at line 175 of file uint.c.

Referenced by purify_curve_hash_to_curve(), and purify::try_narrow().

◆ purify_u256_try_narrow_u512()

int purify_u256_try_narrow_u512 ( uint64_t  out[4],
const uint64_t  value[8] 
)

Definition at line 183 of file uint.c.

Referenced by purify_curve_unpack_public(), and purify::try_narrow().

◆ purify_u320_widen_u256()

void purify_u320_widen_u256 ( uint64_t  out[5],
const uint64_t  value[4] 
)

Definition at line 165 of file uint.c.

Referenced by purify_curve_two_p(), and purify::widen().

◆ purify_u512_cmov_words()

static void purify_u512_cmov_words ( uint64_t  dst[8],
const uint64_t  src[8],
uint64_t  mask 
)
static

Definition at line 103 of file uint.c.

Referenced by purify_u512_try_divmod_same_consttime().

◆ purify_u512_is_nonzero_ct()

static int purify_u512_is_nonzero_ct ( const uint64_t  value[8])
static

Definition at line 70 of file uint.c.

Referenced by purify_u512_try_divmod_same_consttime().

◆ purify_u512_multiply_u256()

void purify_u512_multiply_u256 ( uint64_t  out[8],
const uint64_t  lhs[4],
const uint64_t  rhs[4] 
)

◆ purify_u512_shift_left_one_or_bit()

static void purify_u512_shift_left_one_or_bit ( uint64_t  value[8],
uint64_t  bit 
)
static

Definition at line 79 of file uint.c.

References bit().

Referenced by purify_u512_try_divmod_same_consttime().

◆ purify_u512_sub_with_borrow_ct()

static uint64_t purify_u512_sub_with_borrow_ct ( uint64_t  out[8],
const uint64_t  lhs[8],
const uint64_t  rhs[8] 
)
static

Definition at line 89 of file uint.c.

Referenced by purify_u512_try_divmod_same_consttime().

◆ purify_u512_try_divmod_same()

int purify_u512_try_divmod_same ( uint64_t  quotient[8],
uint64_t  remainder[8],
const uint64_t  numerator[8],
const uint64_t  denominator[8] 
)

Definition at line 194 of file uint.c.

Referenced by purify_curve_unpack_public(), and purify::try_divmod_same().

◆ purify_u512_try_divmod_same_consttime()

int purify_u512_try_divmod_same_consttime ( uint64_t  quotient[8],
uint64_t  remainder[8],
const uint64_t  numerator[8],
const uint64_t  denominator[8] 
)

◆ purify_u512_widen_u256()

void purify_u512_widen_u256 ( uint64_t  out[8],
const uint64_t  value[4] 
)

◆ purify_uint_add_u64_carry()

static uint64_t purify_uint_add_u64_carry ( uint64_t  value,
uint64_t  addend,
uint64_t *  hi 
)
static

Definition at line 54 of file uint.c.

Referenced by purify_u512_multiply_u256(), and try_mul_small().

◆ purify_uint_bit_length_u64()

static size_t purify_uint_bit_length_u64 ( uint64_t  value)
static

Definition at line 17 of file uint.c.

Referenced by bit_length().

◆ purify_uint_divmod_u32()

static uint64_t purify_uint_divmod_u32 ( uint64_t  hi,
uint64_t  lo,
uint32_t  divisor,
uint32_t *  rem_out 
)
static

Definition at line 110 of file uint.c.

Referenced by divmod_small().

◆ purify_uint_mask_u64()

static uint64_t purify_uint_mask_u64 ( int  flag)
static

Definition at line 66 of file uint.c.

Referenced by purify_u512_try_divmod_same_consttime().

◆ purify_uint_mul_u64()

static uint64_t purify_uint_mul_u64 ( uint64_t  lhs,
uint64_t  rhs,
uint64_t *  hi 
)
static

Definition at line 33 of file uint.c.

Referenced by purify_u512_multiply_u256(), and try_mul_small().