34static inline uint16_t BSL_ByteToUint16(
const uint8_t *data)
37 return ((uint16_t)data[0] << 8) | ((uint16_t)data[1]);
48static inline void BSL_Uint16ToByte(uint16_t num, uint8_t *data)
51 data[0] = (uint8_t)(num >> 8);
52 data[1] = (uint8_t)(num & 0xffu);
65static inline uint32_t BSL_ByteToUint24(
const uint8_t *data)
69 return ((uint32_t)data[0] << 16) | ((uint32_t)data[1] << 8) | ((uint32_t)data[2]);
80static inline void BSL_Uint24ToByte(uint32_t num, uint8_t *data)
83 data[0] = (uint8_t)(num >> 16);
84 data[1] = (uint8_t)(num >> 8);
85 data[2] = (uint8_t)(num & 0xffu);
98static inline uint32_t BSL_ByteToUint32(
const uint8_t *data)
102 return ((uint32_t)data[0] << 24) | ((uint32_t)data[1] << 16) | ((uint32_t)data[2] << 8) | ((uint32_t)data[3]);
114static inline uint64_t BSL_ByteToUint48(
const uint8_t *data)
119 return ((uint64_t)data[0] << 40) | ((uint64_t)data[1] << 32) | ((uint64_t)data[2] << 24) |
120 ((uint64_t)data[3] << 16) | ((uint64_t)data[4] << 8) | ((uint64_t)data[5]);
131static inline void BSL_Uint48ToByte(uint64_t num, uint8_t *data)
134 data[0] = (uint8_t)(num >> 40);
135 data[1] = (uint8_t)(num >> 32);
136 data[2] = (uint8_t)(num >> 24);
137 data[3] = (uint8_t)(num >> 16);
138 data[4] = (uint8_t)(num >> 8);
139 data[5] = (uint8_t)(num & 0xffu);
152static inline uint64_t BSL_ByteToUint64(
const uint8_t *data)
158 return ((uint64_t)data[0] << 56) | ((uint64_t)data[1] << 48) | ((uint64_t)data[2] << 40) |
159 ((uint64_t)data[3] << 32) | ((uint64_t)data[4] << 24) | ((uint64_t)data[5] << 16) |
160 ((uint64_t)data[6] << 8) | ((uint64_t)data[7]);
171static inline void BSL_Uint32ToByte(uint32_t num, uint8_t *data)
174 data[0] = (uint8_t)(num >> 24);
175 data[1] = (uint8_t)(num >> 16);
176 data[2] = (uint8_t)(num >> 8);
177 data[3] = (uint8_t)(num & 0xffu);
189static inline void BSL_Uint64ToByte(uint64_t num, uint8_t *data)
192 data[0] = (uint8_t)(num >> 56);
193 data[1] = (uint8_t)(num >> 48);
194 data[2] = (uint8_t)(num >> 40);
195 data[3] = (uint8_t)(num >> 32);
196 data[4] = (uint8_t)(num >> 24);
197 data[5] = (uint8_t)(num >> 16);
198 data[6] = (uint8_t)(num >> 8);
199 data[7] = (uint8_t)(num & 0xffu);
205static inline uint32_t Uint32ConstTimeMsb(uint32_t a)
208 return 0u - (a >> 31);
212static inline uint32_t Uint32ConstTimeIsZero(uint32_t a)
214 return Uint32ConstTimeMsb(~a & (a - 1));
218static inline uint32_t Uint32ConstTimeEqual(uint32_t a, uint32_t b)
220 return Uint32ConstTimeIsZero(a ^ b);
225static inline uint32_t Uint32ConstTimeSelect(uint32_t mask, uint32_t a, uint32_t b)
227 return ((mask) & a) | ((~mask) & b);
230static inline uint8_t Uint8ConstTimeSelect(uint32_t mask, uint8_t a, uint8_t b)
232 return (((mask) & a) | ((~mask) & b)) & 0xff;
236static inline uint32_t Uint32ConstTimeLt(uint32_t a, uint32_t b)
238 return Uint32ConstTimeMsb(a ^ ((a ^ b) | ((a - b) ^ a)));
242static inline uint32_t Uint32ConstTimeGe(uint32_t a, uint32_t b)
244 return ~Uint32ConstTimeLt(a, b);
248static inline uint32_t Uint32ConstTimeGt(uint32_t a, uint32_t b)
250 return Uint32ConstTimeLt(b, a);
254static inline uint32_t Uint32ConstTimeLe(uint32_t a, uint32_t b)
256 return Uint32ConstTimeGe(b, a);
260static inline uint32_t ConstTimeMemcmp(
const uint8_t *a,
const uint8_t *b, uint32_t l)
263 for (uint32_t i = 0; i < l; i++) {
266 return Uint32ConstTimeIsZero(r);