summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/md32_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/md32_common.h')
-rw-r--r--src/lib/libcrypto/md32_common.h105
1 files changed, 50 insertions, 55 deletions
diff --git a/src/lib/libcrypto/md32_common.h b/src/lib/libcrypto/md32_common.h
index bb7381952a..bfb610e802 100644
--- a/src/lib/libcrypto/md32_common.h
+++ b/src/lib/libcrypto/md32_common.h
@@ -148,7 +148,7 @@
148# if defined(__POWERPC__) 148# if defined(__POWERPC__)
149# define ROTATE(a,n) __rlwinm(a,n,0,31) 149# define ROTATE(a,n) __rlwinm(a,n,0,31)
150# elif defined(__MC68K__) 150# elif defined(__MC68K__)
151 /* Motorola specific tweak. <appro@fy.chalmers.se> */ 151/* Motorola specific tweak. <appro@fy.chalmers.se> */
152# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) 152# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
153# else 153# else
154# define ROTATE(a,n) __rol(a,n) 154# define ROTATE(a,n) __rol(a,n)
@@ -252,7 +252,7 @@
252#endif 252#endif
253#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) 253#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
254# ifndef B_ENDIAN 254# ifndef B_ENDIAN
255 /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ 255/* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
256# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) 256# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
257# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) 257# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
258# endif 258# endif
@@ -279,108 +279,103 @@
279 * Time for some action:-) 279 * Time for some action:-)
280 */ 280 */
281 281
282int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len) 282int
283 { 283HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len)
284 const unsigned char *data=data_; 284{
285 const unsigned char *data = data_;
285 unsigned char *p; 286 unsigned char *p;
286 HASH_LONG l; 287 HASH_LONG l;
287 size_t n; 288 size_t n;
288 289
289 if (len==0) return 1; 290 if (len == 0)
291 return 1;
290 292
291 l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL; 293 l = (c->Nl + (((HASH_LONG)len) << 3))&0xffffffffUL;
292 /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to 294 /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
293 * Wei Dai <weidai@eskimo.com> for pointing it out. */ 295 * Wei Dai <weidai@eskimo.com> for pointing it out. */
294 if (l < c->Nl) /* overflow */ 296 if (l < c->Nl) /* overflow */
295 c->Nh++; 297 c->Nh++;
296 c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ 298 c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */
297 c->Nl=l; 299 c->Nl = l;
298 300
299 n = c->num; 301 n = c->num;
300 if (n != 0) 302 if (n != 0) {
301 { 303 p = (unsigned char *)c->data;
302 p=(unsigned char *)c->data; 304
303 305 if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) {
304 if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK) 306 memcpy (p + n, data, HASH_CBLOCK - n);
305 { 307 HASH_BLOCK_DATA_ORDER (c, p, 1);
306 memcpy (p+n,data,HASH_CBLOCK-n); 308 n = HASH_CBLOCK - n;
307 HASH_BLOCK_DATA_ORDER (c,p,1); 309 data += n;
308 n = HASH_CBLOCK-n; 310 len -= n;
309 data += n;
310 len -= n;
311 c->num = 0; 311 c->num = 0;
312 memset (p,0,HASH_CBLOCK); /* keep it zeroed */ 312 memset (p,0,HASH_CBLOCK); /* keep it zeroed */
313 } 313 } else {
314 else 314 memcpy (p + n, data, len);
315 {
316 memcpy (p+n,data,len);
317 c->num += (unsigned int)len; 315 c->num += (unsigned int)len;
318 return 1; 316 return 1;
319 }
320 } 317 }
318 }
321 319
322 n = len/HASH_CBLOCK; 320 n = len/HASH_CBLOCK;
323 if (n > 0) 321 if (n > 0) {
324 { 322 HASH_BLOCK_DATA_ORDER (c, data, n);
325 HASH_BLOCK_DATA_ORDER (c,data,n);
326 n *= HASH_CBLOCK; 323 n *= HASH_CBLOCK;
327 data += n; 324 data += n;
328 len -= n; 325 len -= n;
329 } 326 }
330 327
331 if (len != 0) 328 if (len != 0) {
332 {
333 p = (unsigned char *)c->data; 329 p = (unsigned char *)c->data;
334 c->num = (unsigned int)len; 330 c->num = (unsigned int)len;
335 memcpy (p,data,len); 331 memcpy (p, data, len);
336 }
337 return 1;
338 } 332 }
333 return 1;
334}
339 335
340 336
341void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) 337void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
342 { 338{
343 HASH_BLOCK_DATA_ORDER (c,data,1); 339 HASH_BLOCK_DATA_ORDER (c, data, 1);
344 } 340}
345 341
346 342
347int HASH_FINAL (unsigned char *md, HASH_CTX *c) 343int HASH_FINAL (unsigned char *md, HASH_CTX *c)
348 { 344{
349 unsigned char *p = (unsigned char *)c->data; 345 unsigned char *p = (unsigned char *)c->data;
350 size_t n = c->num; 346 size_t n = c->num;
351 347
352 p[n] = 0x80; /* there is always room for one */ 348 p[n] = 0x80; /* there is always room for one */
353 n++; 349 n++;
354 350
355 if (n > (HASH_CBLOCK-8)) 351 if (n > (HASH_CBLOCK - 8)) {
356 { 352 memset (p + n, 0, HASH_CBLOCK - n);
357 memset (p+n,0,HASH_CBLOCK-n); 353 n = 0;
358 n=0; 354 HASH_BLOCK_DATA_ORDER (c, p, 1);
359 HASH_BLOCK_DATA_ORDER (c,p,1); 355 }
360 } 356 memset (p + n, 0, HASH_CBLOCK - 8 - n);
361 memset (p+n,0,HASH_CBLOCK-8-n);
362 357
363 p += HASH_CBLOCK-8; 358 p += HASH_CBLOCK - 8;
364#if defined(DATA_ORDER_IS_BIG_ENDIAN) 359#if defined(DATA_ORDER_IS_BIG_ENDIAN)
365 (void)HOST_l2c(c->Nh,p); 360 (void)HOST_l2c(c->Nh, p);
366 (void)HOST_l2c(c->Nl,p); 361 (void)HOST_l2c(c->Nl, p);
367#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) 362#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
368 (void)HOST_l2c(c->Nl,p); 363 (void)HOST_l2c(c->Nl, p);
369 (void)HOST_l2c(c->Nh,p); 364 (void)HOST_l2c(c->Nh, p);
370#endif 365#endif
371 p -= HASH_CBLOCK; 366 p -= HASH_CBLOCK;
372 HASH_BLOCK_DATA_ORDER (c,p,1); 367 HASH_BLOCK_DATA_ORDER (c, p, 1);
373 c->num=0; 368 c->num = 0;
374 memset (p,0,HASH_CBLOCK); 369 memset (p, 0, HASH_CBLOCK);
375 370
376#ifndef HASH_MAKE_STRING 371#ifndef HASH_MAKE_STRING
377#error "HASH_MAKE_STRING must be defined!" 372#error "HASH_MAKE_STRING must be defined!"
378#else 373#else
379 HASH_MAKE_STRING(c,md); 374 HASH_MAKE_STRING(c, md);
380#endif 375#endif
381 376
382 return 1; 377 return 1;
383 } 378}
384 379
385#ifndef MD32_REG_T 380#ifndef MD32_REG_T
386#if defined(__alpha) || defined(__sparcv9) || defined(__mips) 381#if defined(__alpha) || defined(__sparcv9) || defined(__mips)