Lines Matching +full:a +full:- +full:c
1 /* crypto/sha/sha_dgst.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
9 * This library is free for commercial and non-commercial use as long as
18 * If this package is used in a product, Eric Young should be given attribution
20 * This can be in the form of a textual message at program startup or
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
65 #include <machine/ansi.h> /* we use the __ variants of bit-sized types */
74 char *SHA_version="SHA part of SSLeay 0.9.0b 11-Oct-1998";
76 /* Implemented from SHA-0 document - The Secure Hash Algorithm
91 void sha_block(SHA_CTX *c, const u_int32_t *p, int num);
102 void SHA_Init(SHA_CTX *c) in SHA_Init() argument
104 c->h0=INIT_DATA_h0; in SHA_Init()
105 c->h1=INIT_DATA_h1; in SHA_Init()
106 c->h2=INIT_DATA_h2; in SHA_Init()
107 c->h3=INIT_DATA_h3; in SHA_Init()
108 c->h4=INIT_DATA_h4; in SHA_Init()
109 c->Nl=0; in SHA_Init()
110 c->Nh=0; in SHA_Init()
111 c->num=0; in SHA_Init()
114 void SHA_Update(SHA_CTX *c, const void *in, size_t len) in SHA_Update() argument
123 l=(c->Nl+(len<<3))&0xffffffffL; in SHA_Update()
124 if (l < c->Nl) /* overflow */ in SHA_Update()
125 c->Nh++; in SHA_Update()
126 c->Nh+=(len>>29); in SHA_Update()
127 c->Nl=l; in SHA_Update()
129 if (c->num != 0) in SHA_Update()
131 p=c->data; in SHA_Update()
132 sw=c->num>>2; in SHA_Update()
133 sc=c->num&0x03; in SHA_Update()
135 if ((c->num+len) >= SHA_CBLOCK) in SHA_Update()
145 len-=(SHA_CBLOCK-c->num); in SHA_Update()
147 sha_block(c,p,64); in SHA_Update()
148 c->num=0; in SHA_Update()
153 c->num+=(int)len; in SHA_Update()
154 if ((sc+len) < 4) /* ugly, add char's to a word */ in SHA_Update()
162 ew=(c->num>>2); in SHA_Update()
163 ec=(c->num&0x03); in SHA_Update()
179 * being that the sha_block 'C' version changes the values in SHA_Update()
181 * copies it to a local array. I should be able to do this for in SHA_Update()
182 * the C version as well.... in SHA_Update()
192 sha_block(c,(u_int32_t *)data,sw); in SHA_Update()
194 len-=sw; in SHA_Update()
200 * chars and save the leftovers to c->data. */ in SHA_Update()
201 p=c->data; in SHA_Update()
210 for (sw=(SHA_LBLOCK/4); sw; sw--) in SHA_Update()
218 p=c->data; in SHA_Update()
222 for (sw=(SHA_BLOCK/4); sw; sw--) in SHA_Update()
229 p=c->data; in SHA_Update()
231 sha_block(c,p,64); in SHA_Update()
232 len-=SHA_CBLOCK; in SHA_Update()
235 c->num=ec; in SHA_Update()
245 static void SHA_Transform(SHA_CTX *c, unsigned char *b) in SHA_Transform() argument
257 for (i=(SHA_LBLOCK/4); i; i--) in SHA_Transform()
268 for (i=(SHA_LBLOCK/4); i; i--) in SHA_Transform()
277 sha_block(c,p,64); in SHA_Transform()
280 void sha_block(SHA_CTX *c, const u_int32_t *W, int num) in sha_block() argument
282 u_int32_t A,B,C,D,E,T; in sha_block() local
285 A=c->h0; in sha_block()
286 B=c->h1; in sha_block()
287 C=c->h2; in sha_block()
288 D=c->h3; in sha_block()
289 E=c->h4; in sha_block()
293 BODY_00_15( 0,A,B,C,D,E,T,W); in sha_block()
294 BODY_00_15( 1,T,A,B,C,D,E,W); in sha_block()
295 BODY_00_15( 2,E,T,A,B,C,D,W); in sha_block()
296 BODY_00_15( 3,D,E,T,A,B,C,W); in sha_block()
297 BODY_00_15( 4,C,D,E,T,A,B,W); in sha_block()
298 BODY_00_15( 5,B,C,D,E,T,A,W); in sha_block()
299 BODY_00_15( 6,A,B,C,D,E,T,W); in sha_block()
300 BODY_00_15( 7,T,A,B,C,D,E,W); in sha_block()
301 BODY_00_15( 8,E,T,A,B,C,D,W); in sha_block()
302 BODY_00_15( 9,D,E,T,A,B,C,W); in sha_block()
303 BODY_00_15(10,C,D,E,T,A,B,W); in sha_block()
304 BODY_00_15(11,B,C,D,E,T,A,W); in sha_block()
305 BODY_00_15(12,A,B,C,D,E,T,W); in sha_block()
306 BODY_00_15(13,T,A,B,C,D,E,W); in sha_block()
307 BODY_00_15(14,E,T,A,B,C,D,W); in sha_block()
308 BODY_00_15(15,D,E,T,A,B,C,W); in sha_block()
309 BODY_16_19(16,C,D,E,T,A,B,W,W,W,W); in sha_block()
310 BODY_16_19(17,B,C,D,E,T,A,W,W,W,W); in sha_block()
311 BODY_16_19(18,A,B,C,D,E,T,W,W,W,W); in sha_block()
312 BODY_16_19(19,T,A,B,C,D,E,W,W,W,X); in sha_block()
314 BODY_20_31(20,E,T,A,B,C,D,W,W,W,X); in sha_block()
315 BODY_20_31(21,D,E,T,A,B,C,W,W,W,X); in sha_block()
316 BODY_20_31(22,C,D,E,T,A,B,W,W,W,X); in sha_block()
317 BODY_20_31(23,B,C,D,E,T,A,W,W,W,X); in sha_block()
318 BODY_20_31(24,A,B,C,D,E,T,W,W,X,X); in sha_block()
319 BODY_20_31(25,T,A,B,C,D,E,W,W,X,X); in sha_block()
320 BODY_20_31(26,E,T,A,B,C,D,W,W,X,X); in sha_block()
321 BODY_20_31(27,D,E,T,A,B,C,W,W,X,X); in sha_block()
322 BODY_20_31(28,C,D,E,T,A,B,W,W,X,X); in sha_block()
323 BODY_20_31(29,B,C,D,E,T,A,W,W,X,X); in sha_block()
324 BODY_20_31(30,A,B,C,D,E,T,W,X,X,X); in sha_block()
325 BODY_20_31(31,T,A,B,C,D,E,W,X,X,X); in sha_block()
326 BODY_32_39(32,E,T,A,B,C,D,X); in sha_block()
327 BODY_32_39(33,D,E,T,A,B,C,X); in sha_block()
328 BODY_32_39(34,C,D,E,T,A,B,X); in sha_block()
329 BODY_32_39(35,B,C,D,E,T,A,X); in sha_block()
330 BODY_32_39(36,A,B,C,D,E,T,X); in sha_block()
331 BODY_32_39(37,T,A,B,C,D,E,X); in sha_block()
332 BODY_32_39(38,E,T,A,B,C,D,X); in sha_block()
333 BODY_32_39(39,D,E,T,A,B,C,X); in sha_block()
335 BODY_40_59(40,C,D,E,T,A,B,X); in sha_block()
336 BODY_40_59(41,B,C,D,E,T,A,X); in sha_block()
337 BODY_40_59(42,A,B,C,D,E,T,X); in sha_block()
338 BODY_40_59(43,T,A,B,C,D,E,X); in sha_block()
339 BODY_40_59(44,E,T,A,B,C,D,X); in sha_block()
340 BODY_40_59(45,D,E,T,A,B,C,X); in sha_block()
341 BODY_40_59(46,C,D,E,T,A,B,X); in sha_block()
342 BODY_40_59(47,B,C,D,E,T,A,X); in sha_block()
343 BODY_40_59(48,A,B,C,D,E,T,X); in sha_block()
344 BODY_40_59(49,T,A,B,C,D,E,X); in sha_block()
345 BODY_40_59(50,E,T,A,B,C,D,X); in sha_block()
346 BODY_40_59(51,D,E,T,A,B,C,X); in sha_block()
347 BODY_40_59(52,C,D,E,T,A,B,X); in sha_block()
348 BODY_40_59(53,B,C,D,E,T,A,X); in sha_block()
349 BODY_40_59(54,A,B,C,D,E,T,X); in sha_block()
350 BODY_40_59(55,T,A,B,C,D,E,X); in sha_block()
351 BODY_40_59(56,E,T,A,B,C,D,X); in sha_block()
352 BODY_40_59(57,D,E,T,A,B,C,X); in sha_block()
353 BODY_40_59(58,C,D,E,T,A,B,X); in sha_block()
354 BODY_40_59(59,B,C,D,E,T,A,X); in sha_block()
356 BODY_60_79(60,A,B,C,D,E,T,X); in sha_block()
357 BODY_60_79(61,T,A,B,C,D,E,X); in sha_block()
358 BODY_60_79(62,E,T,A,B,C,D,X); in sha_block()
359 BODY_60_79(63,D,E,T,A,B,C,X); in sha_block()
360 BODY_60_79(64,C,D,E,T,A,B,X); in sha_block()
361 BODY_60_79(65,B,C,D,E,T,A,X); in sha_block()
362 BODY_60_79(66,A,B,C,D,E,T,X); in sha_block()
363 BODY_60_79(67,T,A,B,C,D,E,X); in sha_block()
364 BODY_60_79(68,E,T,A,B,C,D,X); in sha_block()
365 BODY_60_79(69,D,E,T,A,B,C,X); in sha_block()
366 BODY_60_79(70,C,D,E,T,A,B,X); in sha_block()
367 BODY_60_79(71,B,C,D,E,T,A,X); in sha_block()
368 BODY_60_79(72,A,B,C,D,E,T,X); in sha_block()
369 BODY_60_79(73,T,A,B,C,D,E,X); in sha_block()
370 BODY_60_79(74,E,T,A,B,C,D,X); in sha_block()
371 BODY_60_79(75,D,E,T,A,B,C,X); in sha_block()
372 BODY_60_79(76,C,D,E,T,A,B,X); in sha_block()
373 BODY_60_79(77,B,C,D,E,T,A,X); in sha_block()
374 BODY_60_79(78,A,B,C,D,E,T,X); in sha_block()
375 BODY_60_79(79,T,A,B,C,D,E,X); in sha_block()
377 c->h0=(c->h0+E)&0xffffffffL; in sha_block()
378 c->h1=(c->h1+T)&0xffffffffL; in sha_block()
379 c->h2=(c->h2+A)&0xffffffffL; in sha_block()
380 c->h3=(c->h3+B)&0xffffffffL; in sha_block()
381 c->h4=(c->h4+C)&0xffffffffL; in sha_block()
383 num-=64; in sha_block()
386 A=c->h0; in sha_block()
387 B=c->h1; in sha_block()
388 C=c->h2; in sha_block()
389 D=c->h3; in sha_block()
390 E=c->h4; in sha_block()
396 void SHA_Final(unsigned char *md, SHA_CTX *c) in SHA_Final() argument
404 /* c->num should definitly have room for at least one more byte. */ in SHA_Final()
405 p=c->data; in SHA_Final()
406 j=c->num; in SHA_Final()
416 if (c->num >= SHA_LAST_BLOCK) in SHA_Final()
420 sha_block(c,p,64); in SHA_Final()
423 for (; i<(SHA_LBLOCK-2); i++) in SHA_Final()
425 p[SHA_LBLOCK-2]=c->Nh; in SHA_Final()
426 p[SHA_LBLOCK-1]=c->Nl; in SHA_Final()
427 sha_block(c,p,64); in SHA_Final()
429 l=c->h0; nl2c(l,cp); in SHA_Final()
430 l=c->h1; nl2c(l,cp); in SHA_Final()
431 l=c->h2; nl2c(l,cp); in SHA_Final()
432 l=c->h3; nl2c(l,cp); in SHA_Final()
433 l=c->h4; nl2c(l,cp); in SHA_Final()
436 explicit_bzero(&c, sizeof(c)); in SHA_Final()