1 #ifndef CRYPTOPP_WORDS_H 2 #define CRYPTOPP_WORDS_H 9 inline
size_t CountWords(const word *X,
size_t N)
11 while (N && X[N-1]==0)
16 inline void SetWords(word *r, word a,
size_t n)
18 for (
size_t i=0; i<n; i++)
22 inline void CopyWords(word *r,
const word *a,
size_t n)
25 #if CRYPTOPP_MSC_VERSION 26 memcpy_s(r, n*WORD_SIZE, a, n*WORD_SIZE);
28 memcpy(r, a, n*WORD_SIZE);
32 inline void XorWords(word *r,
const word *a,
const word *b,
size_t n)
34 for (
size_t i=0; i<n; i++)
38 inline void XorWords(word *r,
const word *a,
size_t n)
40 for (
size_t i=0; i<n; i++)
44 inline void AndWords(word *r,
const word *a,
const word *b,
size_t n)
46 for (
size_t i=0; i<n; i++)
50 inline void AndWords(word *r,
const word *a,
size_t n)
52 for (
size_t i=0; i<n; i++)
56 inline word ShiftWordsLeftByBits(word *r,
size_t n,
unsigned int shiftBits)
58 assert (shiftBits<WORD_BITS);
61 for (
size_t i=0; i<n; i++)
64 r[i] = (u << shiftBits) | carry;
65 carry = u >> (WORD_BITS-shiftBits);
70 inline word ShiftWordsRightByBits(word *r,
size_t n,
unsigned int shiftBits)
72 assert (shiftBits<WORD_BITS);
75 for (
size_t i=n; i>0; i--)
78 r[i-1] = (u >> shiftBits) | carry;
79 carry = u << (WORD_BITS-shiftBits);
84 inline void ShiftWordsLeftByWords(word *r,
size_t n,
size_t shiftWords)
86 shiftWords =
STDMIN(shiftWords, n);
89 for (
size_t i=n-1; i>=shiftWords; i--)
90 r[i] = r[i-shiftWords];
91 SetWords(r, 0, shiftWords);
95 inline void ShiftWordsRightByWords(word *r,
size_t n,
size_t shiftWords)
97 shiftWords =
STDMIN(shiftWords, n);
100 for (
size_t i=0; i+shiftWords<n; i++)
101 r[i] = r[i+shiftWords];
102 SetWords(r+n-shiftWords, 0, shiftWords);
Utility functions for the Crypto++ library.
void memcpy_s(void *dest, size_t sizeInBytes, const void *src, size_t count)
Bounds checking replacement for memcpy()
Library configuration file.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
Crypto++ library namespace.