Lines Matching +full:a +full:- +full:c

1 /* crypto/sha/sha1dgst.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 */
75 * The assembly-language code is not position-independent, so don't
76 * try to use it in a shared library.
82 static char *SHA1_version="SHA1 part of SSLeay 0.9.0b 11-Oct-1998";
84 /* Implemented from SHA-1 document - The Secure Hash Algorithm
100 void sha1_block_x86(SHA_CTX *c, const u_int32_t *p, int num);
103 void sha1_block(SHA_CTX *c, const u_int32_t *p, int num);
129 void SHA1_Init(SHA_CTX *c) in SHA1_Init() argument
131 c->h0=INIT_DATA_h0; in SHA1_Init()
132 c->h1=INIT_DATA_h1; in SHA1_Init()
133 c->h2=INIT_DATA_h2; in SHA1_Init()
134 c->h3=INIT_DATA_h3; in SHA1_Init()
135 c->h4=INIT_DATA_h4; in SHA1_Init()
136 c->Nl=0; in SHA1_Init()
137 c->Nh=0; in SHA1_Init()
138 c->num=0; in SHA1_Init()
142 SHA1_Update(SHA_CTX *c, const void *in, size_t len) in SHA1_Update() argument
151 l=(c->Nl+(len<<3))&0xffffffffL; in SHA1_Update()
152 if (l < c->Nl) /* overflow */ in SHA1_Update()
153 c->Nh++; in SHA1_Update()
154 c->Nh+=(len>>29); in SHA1_Update()
155 c->Nl=l; in SHA1_Update()
157 if (c->num != 0) in SHA1_Update()
159 p=c->data; in SHA1_Update()
160 sw=c->num>>2; in SHA1_Update()
161 sc=c->num&0x03; in SHA1_Update()
163 if ((c->num+len) >= SHA_CBLOCK) in SHA1_Update()
173 len-=(SHA_CBLOCK-c->num); in SHA1_Update()
175 sha1_block(c,p,64); in SHA1_Update()
176 c->num=0; in SHA1_Update()
181 c->num+=(int)len; in SHA1_Update()
182 if ((sc+len) < 4) /* ugly, add char's to a word */ in SHA1_Update()
190 ew=(c->num>>2); in SHA1_Update()
191 ec=(c->num&0x03); in SHA1_Update()
207 * being that the sha1_block 'C' version changes the values in SHA1_Update()
209 * copies it to a local array. I should be able to do this for in SHA1_Update()
210 * the C version as well.... in SHA1_Update()
220 sha1_block(c,(u_int32_t *)data,sw); in SHA1_Update()
222 len-=sw; in SHA1_Update()
228 * chars and save the leftovers to c->data. */ in SHA1_Update()
229 p=c->data; in SHA1_Update()
238 for (sw=(SHA_LBLOCK/4); sw; sw--) in SHA1_Update()
246 p=c->data; in SHA1_Update()
250 for (sw=(SHA_BLOCK/4); sw; sw--) in SHA1_Update()
257 p=c->data; in SHA1_Update()
259 sha1_block(c,p,64); in SHA1_Update()
260 len-=SHA_CBLOCK; in SHA1_Update()
263 c->num=ec; in SHA1_Update()
273 static void SHA1_Transform(SHA_CTX *c, unsigned char *b) in SHA1_Transform() argument
285 for (i=(SHA_LBLOCK/4); i; i--) in SHA1_Transform()
296 for (i=(SHA_LBLOCK/4); i; i--) in SHA1_Transform()
305 sha1_block(c,p,64); in SHA1_Transform()
311 sha1_block(SHA_CTX *c, const u_int32_t *W, int num) in sha1_block() argument
313 u_int32_t A,B,C,D,E,T; in sha1_block() local
316 A=c->h0; in sha1_block()
317 B=c->h1; in sha1_block()
318 C=c->h2; in sha1_block()
319 D=c->h3; in sha1_block()
320 E=c->h4; in sha1_block()
324 BODY_00_15( 0,A,B,C,D,E,T,W); in sha1_block()
325 BODY_00_15( 1,T,A,B,C,D,E,W); in sha1_block()
326 BODY_00_15( 2,E,T,A,B,C,D,W); in sha1_block()
327 BODY_00_15( 3,D,E,T,A,B,C,W); in sha1_block()
328 BODY_00_15( 4,C,D,E,T,A,B,W); in sha1_block()
329 BODY_00_15( 5,B,C,D,E,T,A,W); in sha1_block()
330 BODY_00_15( 6,A,B,C,D,E,T,W); in sha1_block()
331 BODY_00_15( 7,T,A,B,C,D,E,W); in sha1_block()
332 BODY_00_15( 8,E,T,A,B,C,D,W); in sha1_block()
333 BODY_00_15( 9,D,E,T,A,B,C,W); in sha1_block()
334 BODY_00_15(10,C,D,E,T,A,B,W); in sha1_block()
335 BODY_00_15(11,B,C,D,E,T,A,W); in sha1_block()
336 BODY_00_15(12,A,B,C,D,E,T,W); in sha1_block()
337 BODY_00_15(13,T,A,B,C,D,E,W); in sha1_block()
338 BODY_00_15(14,E,T,A,B,C,D,W); in sha1_block()
339 BODY_00_15(15,D,E,T,A,B,C,W); in sha1_block()
340 BODY_16_19(16,C,D,E,T,A,B,W,W,W,W); in sha1_block()
341 BODY_16_19(17,B,C,D,E,T,A,W,W,W,W); in sha1_block()
342 BODY_16_19(18,A,B,C,D,E,T,W,W,W,W); in sha1_block()
343 BODY_16_19(19,T,A,B,C,D,E,W,W,W,X); in sha1_block()
345 BODY_20_31(20,E,T,A,B,C,D,W,W,W,X); in sha1_block()
346 BODY_20_31(21,D,E,T,A,B,C,W,W,W,X); in sha1_block()
347 BODY_20_31(22,C,D,E,T,A,B,W,W,W,X); in sha1_block()
348 BODY_20_31(23,B,C,D,E,T,A,W,W,W,X); in sha1_block()
349 BODY_20_31(24,A,B,C,D,E,T,W,W,X,X); in sha1_block()
350 BODY_20_31(25,T,A,B,C,D,E,W,W,X,X); in sha1_block()
351 BODY_20_31(26,E,T,A,B,C,D,W,W,X,X); in sha1_block()
352 BODY_20_31(27,D,E,T,A,B,C,W,W,X,X); in sha1_block()
353 BODY_20_31(28,C,D,E,T,A,B,W,W,X,X); in sha1_block()
354 BODY_20_31(29,B,C,D,E,T,A,W,W,X,X); in sha1_block()
355 BODY_20_31(30,A,B,C,D,E,T,W,X,X,X); in sha1_block()
356 BODY_20_31(31,T,A,B,C,D,E,W,X,X,X); in sha1_block()
357 BODY_32_39(32,E,T,A,B,C,D,X); in sha1_block()
358 BODY_32_39(33,D,E,T,A,B,C,X); in sha1_block()
359 BODY_32_39(34,C,D,E,T,A,B,X); in sha1_block()
360 BODY_32_39(35,B,C,D,E,T,A,X); in sha1_block()
361 BODY_32_39(36,A,B,C,D,E,T,X); in sha1_block()
362 BODY_32_39(37,T,A,B,C,D,E,X); in sha1_block()
363 BODY_32_39(38,E,T,A,B,C,D,X); in sha1_block()
364 BODY_32_39(39,D,E,T,A,B,C,X); in sha1_block()
366 BODY_40_59(40,C,D,E,T,A,B,X); in sha1_block()
367 BODY_40_59(41,B,C,D,E,T,A,X); in sha1_block()
368 BODY_40_59(42,A,B,C,D,E,T,X); in sha1_block()
369 BODY_40_59(43,T,A,B,C,D,E,X); in sha1_block()
370 BODY_40_59(44,E,T,A,B,C,D,X); in sha1_block()
371 BODY_40_59(45,D,E,T,A,B,C,X); in sha1_block()
372 BODY_40_59(46,C,D,E,T,A,B,X); in sha1_block()
373 BODY_40_59(47,B,C,D,E,T,A,X); in sha1_block()
374 BODY_40_59(48,A,B,C,D,E,T,X); in sha1_block()
375 BODY_40_59(49,T,A,B,C,D,E,X); in sha1_block()
376 BODY_40_59(50,E,T,A,B,C,D,X); in sha1_block()
377 BODY_40_59(51,D,E,T,A,B,C,X); in sha1_block()
378 BODY_40_59(52,C,D,E,T,A,B,X); in sha1_block()
379 BODY_40_59(53,B,C,D,E,T,A,X); in sha1_block()
380 BODY_40_59(54,A,B,C,D,E,T,X); in sha1_block()
381 BODY_40_59(55,T,A,B,C,D,E,X); in sha1_block()
382 BODY_40_59(56,E,T,A,B,C,D,X); in sha1_block()
383 BODY_40_59(57,D,E,T,A,B,C,X); in sha1_block()
384 BODY_40_59(58,C,D,E,T,A,B,X); in sha1_block()
385 BODY_40_59(59,B,C,D,E,T,A,X); in sha1_block()
387 BODY_60_79(60,A,B,C,D,E,T,X); in sha1_block()
388 BODY_60_79(61,T,A,B,C,D,E,X); in sha1_block()
389 BODY_60_79(62,E,T,A,B,C,D,X); in sha1_block()
390 BODY_60_79(63,D,E,T,A,B,C,X); in sha1_block()
391 BODY_60_79(64,C,D,E,T,A,B,X); in sha1_block()
392 BODY_60_79(65,B,C,D,E,T,A,X); in sha1_block()
393 BODY_60_79(66,A,B,C,D,E,T,X); in sha1_block()
394 BODY_60_79(67,T,A,B,C,D,E,X); in sha1_block()
395 BODY_60_79(68,E,T,A,B,C,D,X); in sha1_block()
396 BODY_60_79(69,D,E,T,A,B,C,X); in sha1_block()
397 BODY_60_79(70,C,D,E,T,A,B,X); in sha1_block()
398 BODY_60_79(71,B,C,D,E,T,A,X); in sha1_block()
399 BODY_60_79(72,A,B,C,D,E,T,X); in sha1_block()
400 BODY_60_79(73,T,A,B,C,D,E,X); in sha1_block()
401 BODY_60_79(74,E,T,A,B,C,D,X); in sha1_block()
402 BODY_60_79(75,D,E,T,A,B,C,X); in sha1_block()
403 BODY_60_79(76,C,D,E,T,A,B,X); in sha1_block()
404 BODY_60_79(77,B,C,D,E,T,A,X); in sha1_block()
405 BODY_60_79(78,A,B,C,D,E,T,X); in sha1_block()
406 BODY_60_79(79,T,A,B,C,D,E,X); in sha1_block()
408 c->h0=(c->h0+E)&0xffffffffL; in sha1_block()
409 c->h1=(c->h1+T)&0xffffffffL; in sha1_block()
410 c->h2=(c->h2+A)&0xffffffffL; in sha1_block()
411 c->h3=(c->h3+B)&0xffffffffL; in sha1_block()
412 c->h4=(c->h4+C)&0xffffffffL; in sha1_block()
414 num-=64; in sha1_block()
417 A=c->h0; in sha1_block()
418 B=c->h1; in sha1_block()
419 C=c->h2; in sha1_block()
420 D=c->h3; in sha1_block()
421 E=c->h4; in sha1_block()
428 void SHA1_Final(unsigned char *md, SHA_CTX *c) in SHA1_Final() argument
436 /* c->num should definitly have room for at least one more byte. */ in SHA1_Final()
437 p=c->data; in SHA1_Final()
438 j=c->num; in SHA1_Final()
448 if (c->num >= SHA_LAST_BLOCK) in SHA1_Final()
452 sha1_block(c,p,64); in SHA1_Final()
455 for (; i<(SHA_LBLOCK-2); i++) in SHA1_Final()
457 p[SHA_LBLOCK-2]=c->Nh; in SHA1_Final()
458 p[SHA_LBLOCK-1]=c->Nl; in SHA1_Final()
460 Endian_Reverse32(p[SHA_LBLOCK-2]); in SHA1_Final()
461 Endian_Reverse32(p[SHA_LBLOCK-1]); in SHA1_Final()
463 sha1_block(c,p,64); in SHA1_Final()
465 l=c->h0; nl2c(l,cp); in SHA1_Final()
466 l=c->h1; nl2c(l,cp); in SHA1_Final()
467 l=c->h2; nl2c(l,cp); in SHA1_Final()
468 l=c->h3; nl2c(l,cp); in SHA1_Final()
469 l=c->h4; nl2c(l,cp); in SHA1_Final()
472 explicit_bzero(&c, sizeof(c)); in SHA1_Final()