23 #ifndef CRYPTO_BIGNUMBERUTIL_h
24 #define CRYPTO_BIGNUMBERUTIL_h
31 #define BIGNUMBER_LIMB_8BIT 0
32 #define BIGNUMBER_LIMB_16BIT 1
33 #define BIGNUMBER_LIMB_32BIT 0
36 #if BIGNUMBER_LIMB_8BIT
37 typedef uint8_t limb_t;
38 typedef int8_t slimb_t;
39 typedef uint16_t dlimb_t;
40 #elif BIGNUMBER_LIMB_16BIT
41 typedef uint16_t limb_t;
42 typedef int16_t slimb_t;
43 typedef uint32_t dlimb_t;
44 #elif BIGNUMBER_LIMB_32BIT
45 typedef uint32_t limb_t;
46 typedef int32_t slimb_t;
47 typedef uint64_t dlimb_t;
49 #error "limb_t must be 8, 16, or 32 bits in size"
55 static void unpackLE(limb_t *limbs,
size_t count,
56 const uint8_t *bytes,
size_t len);
57 static void unpackBE(limb_t *limbs,
size_t count,
58 const uint8_t *bytes,
size_t len);
59 static void packLE(uint8_t *bytes,
size_t len,
60 const limb_t *limbs,
size_t count);
61 static void packBE(uint8_t *bytes,
size_t len,
62 const limb_t *limbs,
size_t count);
Utilities to assist with implementing big number arithmetic.
static void packBE(uint8_t *bytes, size_t len, const limb_t *limbs, size_t count)
Packs the big-endian byte representation of a big number into a byte array.
static void unpackLE(limb_t *limbs, size_t count, const uint8_t *bytes, size_t len)
Unpacks the little-endian byte representation of a big number into a limb array.
static void unpackBE(limb_t *limbs, size_t count, const uint8_t *bytes, size_t len)
Unpacks the big-endian byte representation of a big number into a limb array.
static void packLE(uint8_t *bytes, size_t len, const limb_t *limbs, size_t count)
Packs the little-endian byte representation of a big number into a byte array.