Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: nss/lib/freebl/sha_fast.h

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « nss/lib/freebl/sha512.c ('k') | nss/lib/freebl/sha_fast.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #ifndef _SHA_FAST_H_
6 #define _SHA_FAST_H_
7
8 #include "prlong.h"
9
10 #define SHA1_INPUT_LEN 64
11
12 #if defined(IS_64) && !defined(__sparc)
13 typedef PRUint64 SHA_HW_t;
14 #define SHA1_USING_64_BIT 1
15 #else
16 typedef PRUint32 SHA_HW_t;
17 #endif
18
19 struct SHA1ContextStr {
20 union {
21 PRUint32 w[16]; /* input buffer */
22 PRUint8 b[64];
23 } u;
24 PRUint64 size; /* count of hashed bytes. */
25 SHA_HW_t H[22]; /* 5 state variables, 16 tmp values, 1 extra */
26 };
27
28 #if defined(_MSC_VER)
29 #include <stdlib.h>
30 #if defined(IS_LITTLE_ENDIAN)
31 #if (_MSC_VER >= 1300)
32 #pragma intrinsic(_byteswap_ulong)
33 #define SHA_HTONL(x) _byteswap_ulong(x)
34 #elif defined(NSS_X86_OR_X64)
35 #ifndef FORCEINLINE
36 #if (_MSC_VER >= 1200)
37 #define FORCEINLINE __forceinline
38 #else
39 #define FORCEINLINE __inline
40 #endif /* _MSC_VER */
41 #endif /* !defined FORCEINLINE */
42 #define FASTCALL __fastcall
43
44 static FORCEINLINE PRUint32 FASTCALL
45 swap4b(PRUint32 dwd)
46 {
47 __asm {
48 mov eax,dwd
49 bswap eax
50 }
51 }
52
53 #define SHA_HTONL(x) swap4b(x)
54 #endif /* NSS_X86_OR_X64 */
55 #endif /* IS_LITTLE_ENDIAN */
56
57 #pragma intrinsic (_lrotr, _lrotl)
58 #define SHA_ROTL(x,n) _lrotl(x,n)
59 #define SHA_ROTL_IS_DEFINED 1
60 #endif /* _MSC_VER */
61
62 #if defined(__GNUC__)
63 /* __x86_64__ and __x86_64 are defined by GCC on x86_64 CPUs */
64 #if defined( SHA1_USING_64_BIT )
65 static __inline__ PRUint64 SHA_ROTL(PRUint64 x, PRUint32 n)
66 {
67 PRUint32 t = (PRUint32)x;
68 return ((t << n) | (t >> (32 - n)));
69 }
70 #else
71 static __inline__ PRUint32 SHA_ROTL(PRUint32 t, PRUint32 n)
72 {
73 return ((t << n) | (t >> (32 - n)));
74 }
75 #endif
76 #define SHA_ROTL_IS_DEFINED 1
77
78 #if defined(NSS_X86_OR_X64)
79 static __inline__ PRUint32 swap4b(PRUint32 value)
80 {
81 __asm__("bswap %0" : "+r" (value));
82 return (value);
83 }
84 #define SHA_HTONL(x) swap4b(x)
85
86 #elif defined(__thumb2__) || \
87 (!defined(__thumb__) && \
88 (defined(__ARM_ARCH_6__) || \
89 defined(__ARM_ARCH_6J__) || \
90 defined(__ARM_ARCH_6K__) || \
91 defined(__ARM_ARCH_6Z__) || \
92 defined(__ARM_ARCH_6ZK__) || \
93 defined(__ARM_ARCH_6T2__) || \
94 defined(__ARM_ARCH_7__) || \
95 defined(__ARM_ARCH_7A__) || \
96 defined(__ARM_ARCH_7R__)))
97 static __inline__ PRUint32 swap4b(PRUint32 value)
98 {
99 PRUint32 ret;
100 __asm__("rev %0, %1" : "=r" (ret) : "r"(value));
101 return ret;
102 }
103 #define SHA_HTONL(x) swap4b(x)
104
105 #endif /* x86 family */
106
107 #endif /* __GNUC__ */
108
109 #if !defined(SHA_ROTL_IS_DEFINED)
110 #define SHA_NEED_TMP_VARIABLE 1
111 #define SHA_ROTL(X,n) (tmp = (X), ((tmp) << (n)) | ((tmp) >> (32-(n))))
112 #endif
113
114 #if defined(NSS_X86_OR_X64)
115 #define SHA_ALLOW_UNALIGNED_ACCESS 1
116 #endif
117
118 #if !defined(SHA_HTONL)
119 #define SHA_MASK 0x00FF00FF
120 #if defined(IS_LITTLE_ENDIAN)
121 #undef SHA_NEED_TMP_VARIABLE
122 #define SHA_NEED_TMP_VARIABLE 1
123 #define SHA_HTONL(x) (tmp = (x), tmp = (tmp << 16) | (tmp >> 16), \
124 ((tmp & SHA_MASK) << 8) | ((tmp >> 8) & SHA_MASK))
125 #else
126 #define SHA_HTONL(x) (x)
127 #endif
128 #endif
129
130 #define SHA_BYTESWAP(x) x = SHA_HTONL(x)
131
132 #define SHA_STORE(n) ((PRUint32*)hashout)[n] = SHA_HTONL(ctx->H[n])
133 #if defined(SHA_ALLOW_UNALIGNED_ACCESS)
134 #define SHA_STORE_RESULT \
135 SHA_STORE(0); \
136 SHA_STORE(1); \
137 SHA_STORE(2); \
138 SHA_STORE(3); \
139 SHA_STORE(4);
140
141 #elif defined(IS_LITTLE_ENDIAN) || defined( SHA1_USING_64_BIT )
142 #define SHA_STORE_RESULT \
143 if (!((ptrdiff_t)hashout % sizeof(PRUint32))) { \
144 SHA_STORE(0); \
145 SHA_STORE(1); \
146 SHA_STORE(2); \
147 SHA_STORE(3); \
148 SHA_STORE(4); \
149 } else { \
150 PRUint32 tmpbuf[5]; \
151 tmpbuf[0] = SHA_HTONL(ctx->H[0]); \
152 tmpbuf[1] = SHA_HTONL(ctx->H[1]); \
153 tmpbuf[2] = SHA_HTONL(ctx->H[2]); \
154 tmpbuf[3] = SHA_HTONL(ctx->H[3]); \
155 tmpbuf[4] = SHA_HTONL(ctx->H[4]); \
156 memcpy(hashout, tmpbuf, SHA1_LENGTH); \
157 }
158
159 #else
160 #define SHA_STORE_RESULT \
161 if (!((ptrdiff_t)hashout % sizeof(PRUint32))) { \
162 SHA_STORE(0); \
163 SHA_STORE(1); \
164 SHA_STORE(2); \
165 SHA_STORE(3); \
166 SHA_STORE(4); \
167 } else { \
168 memcpy(hashout, ctx->H, SHA1_LENGTH); \
169 }
170 #endif
171
172 #endif /* _SHA_FAST_H_ */
OLDNEW
« no previous file with comments | « nss/lib/freebl/sha512.c ('k') | nss/lib/freebl/sha_fast.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698