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

Side by Side Diff: nss/lib/freebl/ctr.c

Issue 319593003: Update to NSS 3.16.2 Beta 3. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/nss
Patch Set: Remove unused function SEC_NumberOrNameStringToOIDTag Created 6 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 | Annotate | Revision Log
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 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 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/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 4
5 #ifdef FREEBL_NO_DEPEND 5 #ifdef FREEBL_NO_DEPEND
6 #include "stubs.h" 6 #include "stubs.h"
7 #endif 7 #endif
8 #include "prtypes.h" 8 #include "prtypes.h"
9 #include "blapit.h" 9 #include "blapit.h"
10 #include "blapii.h" 10 #include "blapii.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 /* 75 /*
76 * Used by counter mode. Increment the counter block. Not all bits in the 76 * Used by counter mode. Increment the counter block. Not all bits in the
77 * counter block are part of the counter, counterBits tells how many bits 77 * counter block are part of the counter, counterBits tells how many bits
78 * are part of the counter. The counter block is blocksize long. It's a 78 * are part of the counter. The counter block is blocksize long. It's a
79 * big endian value. 79 * big endian value.
80 * 80 *
81 * XXX Does not handle counter rollover. 81 * XXX Does not handle counter rollover.
82 */ 82 */
83 static void 83 static void
84 ctr_GetNextCtr(unsigned char *counter, unsigned int counterBits, 84 ctr_GetNextCtr(unsigned char *counter, unsigned int counterBits,
85 » » unsigned int blocksize) 85 » unsigned int blocksize)
86 { 86 {
87 unsigned char *counterPtr = counter + blocksize - 1; 87 unsigned char *counterPtr = counter + blocksize - 1;
88 unsigned char mask, count; 88 unsigned char mask, count;
89 89
90 PORT_Assert(counterBits <= blocksize*PR_BITS_PER_BYTE); 90 PORT_Assert(counterBits <= blocksize*PR_BITS_PER_BYTE);
91 while (counterBits >= PR_BITS_PER_BYTE) { 91 while (counterBits >= PR_BITS_PER_BYTE) {
92 if (++(*(counterPtr--))) { 92 if (++(*(counterPtr--))) {
93 return; 93 return;
94 } 94 }
95 counterBits -= PR_BITS_PER_BYTE; 95 counterBits -= PR_BITS_PER_BYTE;
96 } 96 }
97 if (counterBits == 0) { 97 if (counterBits == 0) {
98 return; 98 return;
99 } 99 }
100 /* increment the final partial byte */ 100 /* increment the final partial byte */
101 mask = (1 << counterBits)-1; 101 mask = (1 << counterBits)-1;
102 count = ++(*counterPtr) & mask; 102 count = ++(*counterPtr) & mask;
103 *counterPtr = ((*counterPtr) & ~mask) | count; 103 *counterPtr = ((*counterPtr) & ~mask) | count;
104 return; 104 return;
105 } 105 }
106 106
107 static void 107 static void
108 ctr_xor(unsigned char *target, const unsigned char *x, 108 ctr_xor(unsigned char *target, const unsigned char *x,
109 » const unsigned char *y, unsigned int count) 109 » const unsigned char *y, unsigned int count)
110 { 110 {
111 unsigned int i; 111 unsigned int i;
112 for (i=0; i < count; i++) { 112 for (i=0; i < count; i++) {
113 *target++ = *x++ ^ *y++; 113 *target++ = *x++ ^ *y++;
114 } 114 }
115 } 115 }
116 116
117 SECStatus 117 SECStatus
118 CTR_Update(CTRContext *ctr, unsigned char *outbuf, 118 CTR_Update(CTRContext *ctr, unsigned char *outbuf,
119 » » unsigned int *outlen, unsigned int maxout, 119 » unsigned int *outlen, unsigned int maxout,
120 » » const unsigned char *inbuf, unsigned int inlen, 120 » const unsigned char *inbuf, unsigned int inlen,
121 » » unsigned int blocksize) 121 » unsigned int blocksize)
122 { 122 {
123 unsigned int tmp; 123 unsigned int tmp;
124 SECStatus rv; 124 SECStatus rv;
125 125
126 if (maxout < inlen) { 126 if (maxout < inlen) {
127 *outlen = inlen; 127 *outlen = inlen;
128 PORT_SetError(SEC_ERROR_OUTPUT_LEN); 128 PORT_SetError(SEC_ERROR_OUTPUT_LEN);
129 return SECFailure; 129 return SECFailure;
130 } 130 }
131 *outlen = 0; 131 *outlen = 0;
132 if (ctr->bufPtr != blocksize) { 132 if (ctr->bufPtr != blocksize) {
133 unsigned int needed = PR_MIN(blocksize-ctr->bufPtr, inlen); 133 unsigned int needed = PR_MIN(blocksize-ctr->bufPtr, inlen);
134 » ctr_xor(outbuf, inbuf, ctr->buffer+ctr->bufPtr, needed); 134 » ctr_xor(outbuf, inbuf, ctr->buffer + ctr->bufPtr, needed);
135 ctr->bufPtr += needed; 135 ctr->bufPtr += needed;
136 outbuf += needed; 136 outbuf += needed;
137 inbuf += needed; 137 inbuf += needed;
138 *outlen += needed; 138 *outlen += needed;
139 inlen -= needed; 139 inlen -= needed;
140 if (inlen == 0) { 140 if (inlen == 0) {
141 return SECSuccess; 141 return SECSuccess;
142 } 142 }
143 PORT_Assert(ctr->bufPtr == blocksize); 143 PORT_Assert(ctr->bufPtr == blocksize);
144 } 144 }
145 » 145
146 while (inlen >= blocksize) { 146 while (inlen >= blocksize) {
147 rv = (*ctr->cipher)(ctr->context, ctr->buffer, &tmp, blocksize, 147 rv = (*ctr->cipher)(ctr->context, ctr->buffer, &tmp, blocksize,
148 ctr->counter, blocksize, blocksize); 148 ctr->counter, blocksize, blocksize);
149 ctr_GetNextCtr(ctr->counter, ctr->counterBits, blocksize); 149 ctr_GetNextCtr(ctr->counter, ctr->counterBits, blocksize);
150 if (rv != SECSuccess) { 150 if (rv != SECSuccess) {
151 return SECFailure; 151 return SECFailure;
152 } 152 }
153 ctr_xor(outbuf, inbuf, ctr->buffer, blocksize); 153 ctr_xor(outbuf, inbuf, ctr->buffer, blocksize);
154 outbuf += blocksize; 154 outbuf += blocksize;
155 inbuf += blocksize; 155 inbuf += blocksize;
(...skipping 27 matching lines...) Expand all
183 SECStatus rv; 183 SECStatus rv;
184 184
185 if (maxout < inlen) { 185 if (maxout < inlen) {
186 *outlen = inlen; 186 *outlen = inlen;
187 PORT_SetError(SEC_ERROR_OUTPUT_LEN); 187 PORT_SetError(SEC_ERROR_OUTPUT_LEN);
188 return SECFailure; 188 return SECFailure;
189 } 189 }
190 *outlen = 0; 190 *outlen = 0;
191 if (ctr->bufPtr != blocksize) { 191 if (ctr->bufPtr != blocksize) {
192 unsigned int needed = PR_MIN(blocksize-ctr->bufPtr, inlen); 192 unsigned int needed = PR_MIN(blocksize-ctr->bufPtr, inlen);
193 » ctr_xor(outbuf, inbuf, ctr->buffer+ctr->bufPtr, needed); 193 » ctr_xor(outbuf, inbuf, ctr->buffer + ctr->bufPtr, needed);
194 ctr->bufPtr += needed; 194 ctr->bufPtr += needed;
195 outbuf += needed; 195 outbuf += needed;
196 inbuf += needed; 196 inbuf += needed;
197 *outlen += needed; 197 *outlen += needed;
198 inlen -= needed; 198 inlen -= needed;
199 if (inlen == 0) { 199 if (inlen == 0) {
200 return SECSuccess; 200 return SECSuccess;
201 } 201 }
202 PORT_Assert(ctr->bufPtr == blocksize); 202 PORT_Assert(ctr->bufPtr == blocksize);
203 } 203 }
(...skipping 16 matching lines...) Expand all
220 ctr_GetNextCtr(ctr->counter, ctr->counterBits, blocksize); 220 ctr_GetNextCtr(ctr->counter, ctr->counterBits, blocksize);
221 if (rv != SECSuccess) { 221 if (rv != SECSuccess) {
222 return SECFailure; 222 return SECFailure;
223 } 223 }
224 ctr_xor(outbuf, inbuf, ctr->buffer, inlen); 224 ctr_xor(outbuf, inbuf, ctr->buffer, inlen);
225 ctr->bufPtr = inlen; 225 ctr->bufPtr = inlen;
226 *outlen += inlen; 226 *outlen += inlen;
227 return SECSuccess; 227 return SECSuccess;
228 } 228 }
229 #endif 229 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698