~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to words.h

  • Committer: weidai
  • Date: 2005-07-12 04:23:32 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:198
port to MSVC .NET 2005 beta 2

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 
6
6
NAMESPACE_BEGIN(CryptoPP)
7
7
 
8
 
inline unsigned int CountWords(const word *X, unsigned int N)
 
8
inline size_t CountWords(const word *X, size_t N)
9
9
{
10
10
        while (N && X[N-1]==0)
11
11
                N--;
12
12
        return N;
13
13
}
14
14
 
15
 
inline void SetWords(word *r, word a, unsigned int n)
 
15
inline void SetWords(word *r, word a, size_t n)
16
16
{
17
 
        for (unsigned int i=0; i<n; i++)
 
17
        for (size_t i=0; i<n; i++)
18
18
                r[i] = a;
19
19
}
20
20
 
21
 
inline void CopyWords(word *r, const word *a, unsigned int n)
 
21
inline void CopyWords(word *r, const word *a, size_t n)
22
22
{
23
 
        for (unsigned int i=0; i<n; i++)
 
23
        for (size_t i=0; i<n; i++)
24
24
                r[i] = a[i];
25
25
}
26
26
 
27
 
inline void XorWords(word *r, const word *a, const word *b, unsigned int n)
 
27
inline void XorWords(word *r, const word *a, const word *b, size_t n)
28
28
{
29
 
        for (unsigned int i=0; i<n; i++)
 
29
        for (size_t i=0; i<n; i++)
30
30
                r[i] = a[i] ^ b[i];
31
31
}
32
32
 
33
 
inline void XorWords(word *r, const word *a, unsigned int n)
 
33
inline void XorWords(word *r, const word *a, size_t n)
34
34
{
35
 
        for (unsigned int i=0; i<n; i++)
 
35
        for (size_t i=0; i<n; i++)
36
36
                r[i] ^= a[i];
37
37
}
38
38
 
39
 
inline void AndWords(word *r, const word *a, const word *b, unsigned int n)
 
39
inline void AndWords(word *r, const word *a, const word *b, size_t n)
40
40
{
41
 
        for (unsigned int i=0; i<n; i++)
 
41
        for (size_t i=0; i<n; i++)
42
42
                r[i] = a[i] & b[i];
43
43
}
44
44
 
45
 
inline void AndWords(word *r, const word *a, unsigned int n)
 
45
inline void AndWords(word *r, const word *a, size_t n)
46
46
{
47
 
        for (unsigned int i=0; i<n; i++)
 
47
        for (size_t i=0; i<n; i++)
48
48
                r[i] &= a[i];
49
49
}
50
50
 
51
 
inline word ShiftWordsLeftByBits(word *r, unsigned int n, unsigned int shiftBits)
 
51
inline word ShiftWordsLeftByBits(word *r, size_t n, unsigned int shiftBits)
52
52
{
53
53
        assert (shiftBits<WORD_BITS);
54
54
        word u, carry=0;
55
55
        if (shiftBits)
56
 
                for (unsigned int i=0; i<n; i++)
 
56
                for (size_t i=0; i<n; i++)
57
57
                {
58
58
                        u = r[i];
59
59
                        r[i] = (u << shiftBits) | carry;
62
62
        return carry;
63
63
}
64
64
 
65
 
inline word ShiftWordsRightByBits(word *r, unsigned int n, unsigned int shiftBits)
 
65
inline word ShiftWordsRightByBits(word *r, size_t n, unsigned int shiftBits)
66
66
{
67
67
        assert (shiftBits<WORD_BITS);
68
68
        word u, carry=0;
69
69
        if (shiftBits)
70
 
                for (int i=n-1; i>=0; i--)
 
70
                for (size_t i=n; i>0; i--)
71
71
                {
72
 
                        u = r[i];
73
 
                        r[i] = (u >> shiftBits) | carry;
 
72
                        u = r[i-1];
 
73
                        r[i-1] = (u >> shiftBits) | carry;
74
74
                        carry = u << (WORD_BITS-shiftBits);
75
75
                }
76
76
        return carry;
77
77
}
78
78
 
79
 
inline void ShiftWordsLeftByWords(word *r, unsigned int n, unsigned int shiftWords)
 
79
inline void ShiftWordsLeftByWords(word *r, size_t n, size_t shiftWords)
80
80
{
81
81
        shiftWords = STDMIN(shiftWords, n);
82
82
        if (shiftWords)
83
83
        {
84
 
                for (unsigned int i=n-1; i>=shiftWords; i--)
 
84
                for (size_t i=n-1; i>=shiftWords; i--)
85
85
                        r[i] = r[i-shiftWords];
86
86
                SetWords(r, 0, shiftWords);
87
87
        }
88
88
}
89
89
 
90
 
inline void ShiftWordsRightByWords(word *r, unsigned int n, unsigned int shiftWords)
 
90
inline void ShiftWordsRightByWords(word *r, size_t n, size_t shiftWords)
91
91
{
92
92
        shiftWords = STDMIN(shiftWords, n);
93
93
        if (shiftWords)
94
94
        {
95
 
                for (unsigned int i=0; i+shiftWords<n; i++)
 
95
                for (size_t i=0; i+shiftWords<n; i++)
96
96
                        r[i] = r[i+shiftWords];
97
97
                SetWords(r+n-shiftWords, 0, shiftWords);
98
98
        }