1 #ifndef CRYPTOPP_WORDS_H
2 #define CRYPTOPP_WORDS_H
6 NAMESPACE_BEGIN(CryptoPP)
8 inline
size_t CountWords(const word *X,
size_t N)
10 while (N && X[N-1]==0)
15 inline void SetWords(word *r, word a,
size_t n)
17 for (
size_t i=0; i<n; i++)
21 inline void CopyWords(word *r,
const word *a,
size_t n)
24 memcpy(r, a, n*WORD_SIZE);
27 inline void XorWords(word *r,
const word *a,
const word *b,
size_t n)
29 for (
size_t i=0; i<n; i++)
33 inline void XorWords(word *r,
const word *a,
size_t n)
35 for (
size_t i=0; i<n; i++)
39 inline void AndWords(word *r,
const word *a,
const word *b,
size_t n)
41 for (
size_t i=0; i<n; i++)
45 inline void AndWords(word *r,
const word *a,
size_t n)
47 for (
size_t i=0; i<n; i++)
51 inline word ShiftWordsLeftByBits(word *r,
size_t n,
unsigned int shiftBits)
53 assert (shiftBits<WORD_BITS);
56 for (
size_t i=0; i<n; i++)
59 r[i] = (u << shiftBits) | carry;
60 carry = u >> (WORD_BITS-shiftBits);
65 inline word ShiftWordsRightByBits(word *r,
size_t n,
unsigned int shiftBits)
67 assert (shiftBits<WORD_BITS);
70 for (
size_t i=n; i>0; i--)
73 r[i-1] = (u >> shiftBits) | carry;
74 carry = u << (WORD_BITS-shiftBits);
79 inline void ShiftWordsLeftByWords(word *r,
size_t n,
size_t shiftWords)
81 shiftWords = STDMIN(shiftWords, n);
84 for (
size_t i=n-1; i>=shiftWords; i--)
85 r[i] = r[i-shiftWords];
86 SetWords(r, 0, shiftWords);
90 inline void ShiftWordsRightByWords(word *r,
size_t n,
size_t shiftWords)
92 shiftWords = STDMIN(shiftWords, n);
95 for (
size_t i=0; i+shiftWords<n; i++)
96 r[i] = r[i+shiftWords];
97 SetWords(r+n-shiftWords, 0, shiftWords);