sha_locl.h revision 392aa7cc7d2b122614c5393c3e357da07fd07af3
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/* crypto/sha/sha_locl.h */ 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * All rights reserved. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This package is an SSL implementation written 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * by Eric Young (eay@cryptsoft.com). 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The implementation was written so as to conform with Netscapes SSL. 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) * This library is free for commercial and non-commercial use as long as 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * the following conditions are aheared to. The following conditions 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * apply to all code found in this distribution, be it the RC4, RSA, 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * included with this distribution is covered by the same copyright terms 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * except that the holder is Tim Hudson (tjh@cryptsoft.com). 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * Copyright remains Eric Young's, and as such any Copyright notices in 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * the code are not to be removed. 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * If this package is used in a product, Eric Young should be given attribution 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * as the author of the parts of the library used. 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * This can be in the form of a textual message at program startup or 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * in documentation (online or textual) provided with the package. 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * 23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch * Redistribution and use in source and binary forms, with or without 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * modification, are permitted provided that the following conditions 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * are met: 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * 1. Redistributions of source code must retain the copyright 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) * 3. All advertising materials mentioning features or use of this software 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * must display the following acknowledgement: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * "This product includes cryptographic software written by 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Eric Young (eay@cryptsoft.com)" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The word 'cryptographic' can be left out if the rouines from the library 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * being used are not cryptographic related :-). 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 4. If you include any Windows specific code (or a derivative thereof) from 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the apps directory (application code) you must include an acknowledgement: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * SUCH DAMAGE. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The licence and distribution terms for any publically available version or 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * derivative of this code cannot be changed. i.e. this code cannot simply be 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * copied and put under another distribution licence 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * [including the GNU Public Licence.] 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <stdlib.h> 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string.h> 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <openssl/opensslconf.h> 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <openssl/sha.h> 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define DATA_ORDER_IS_BIG_ENDIAN 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define HASH_LONG SHA_LONG 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define HASH_CTX SHA_CTX 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define HASH_CBLOCK SHA_CBLOCK 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define HASH_MAKE_STRING(c,s) do { \ 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned long ll; \ 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ll=(c)->h0; HOST_l2c(ll,(s)); \ 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ll=(c)->h1; HOST_l2c(ll,(s)); \ 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ll=(c)->h2; HOST_l2c(ll,(s)); \ 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ll=(c)->h3; HOST_l2c(ll,(s)); \ 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ll=(c)->h4; HOST_l2c(ll,(s)); \ 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } while (0) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(SHA_0) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_UPDATE SHA_Update 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_TRANSFORM SHA_Transform 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_FINAL SHA_Final 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# define HASH_INIT SHA_Init 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# define HASH_BLOCK_DATA_ORDER sha_block_data_order 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define Xupdate(a,ix,ia,ib,ic,id) (ix=(a)=(ia^ib^ic^id)) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static void sha_block_data_order (SHA_CTX *c, const void *p,size_t num); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(SHA_1) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_UPDATE SHA1_Update 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_TRANSFORM SHA1_Transform 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_FINAL SHA1_Final 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_INIT SHA1_Init 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define HASH_BLOCK_DATA_ORDER sha1_block_data_order 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# if defined(__MWERKS__) && defined(__MC68K__) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Metrowerks for Motorola fails otherwise:-( <appro@fy.chalmers.se> */ 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define Xupdate(a,ix,ia,ib,ic,id) do { (a)=(ia^ib^ic^id); \ 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ix=(a)=ROTATE((a),1); \ 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } while (0) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# else 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define Xupdate(a,ix,ia,ib,ic,id) ( (a)=(ia^ib^ic^id), \ 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ix=(a)=ROTATE((a),1) \ 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# endif 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef SHA1_ASM 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void sha1_block_data_order (SHA_CTX *c, const void *p,size_t num); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# error "Either SHA_0 or SHA_1 must be defined." 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "md32_common.h" 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define INIT_DATA_h0 0x67452301UL 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define INIT_DATA_h1 0xefcdab89UL 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define INIT_DATA_h2 0x98badcfeUL 122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define INIT_DATA_h3 0x10325476UL 123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define INIT_DATA_h4 0xc3d2e1f0UL 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef SHA_0 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)fips_md_init(SHA) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)fips_md_init_ctx(SHA1, SHA) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memset (c,0,sizeof(*c)); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h0=INIT_DATA_h0; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h1=INIT_DATA_h1; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h2=INIT_DATA_h2; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h3=INIT_DATA_h3; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h4=INIT_DATA_h4; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 1; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define K_00_19 0x5a827999UL 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define K_20_39 0x6ed9eba1UL 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define K_40_59 0x8f1bbcdcUL 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define K_60_79 0xca62c1d6UL 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* As pointed out by Wei Dai <weidai@eskimo.com>, F() below can be 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * simplified to the code in F_00_19. Wei attributes these optimisations 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel. 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z))) 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * I've just become aware of another tweak to be made, again from Wei Dai, 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * in F_40_59, (x&a)|(y&a) -> (x|y)&a 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d)) 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define F_20_39(b,c,d) ((b) ^ (c) ^ (d)) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define F_40_59(b,c,d) (((b) & (c)) | (((b)|(c)) & (d))) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define F_60_79(b,c,d) F_20_39(b,c,d) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef OPENSSL_SMALL_FOOTPRINT 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_00_15(i,a,b,c,d,e,f,xi) \ 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \ 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (b)=ROTATE((b),30); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_16_19(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \ 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(f,xi,xa,xb,xc,xd); \ 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \ 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (b)=ROTATE((b),30); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_20_31(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \ 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(f,xi,xa,xb,xc,xd); \ 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \ 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (b)=ROTATE((b),30); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_32_39(i,a,b,c,d,e,f,xa,xb,xc,xd) \ 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(f,xa,xa,xb,xc,xd); \ 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \ 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (b)=ROTATE((b),30); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_40_59(i,a,b,c,d,e,f,xa,xb,xc,xd) \ 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(f,xa,xa,xb,xc,xd); \ 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \ 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (b)=ROTATE((b),30); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define BODY_60_79(i,a,b,c,d,e,f,xa,xb,xc,xd) \ 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Xupdate(f,xa,xa,xb,xc,xd); \ 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) (f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \ 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) (b)=ROTATE((b),30); 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifdef X 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#undef X 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef MD32_XARRAY 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Originally X was an array. As it's automatic it's natural 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * to expect RISC compiler to accomodate at least part of it in 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the register bank, isn't it? Unfortunately not all compilers 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * "find" this expectation reasonable:-( On order to make such 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * compilers generate better code I replace X[] with a bunch of 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * X0, X1, etc. See the function body below... 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <appro@fy.chalmers.se> 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# define X(i) XX##i 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * However! Some compilers (most notably HP C) get overwhelmed by 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * that many local variables so that we have to have the way to 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * fall down to the original behavior. 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# define X(i) XX[i] 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(SHA_1) || !defined(SHA1_ASM) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const unsigned char *data=p; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) register unsigned MD32_REG_T A,B,C,D,E,T,l; 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef MD32_XARRAY 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SHA_LONG XX[16]; 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A=c->h0; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) B=c->h1; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) C=c->h2; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) D=c->h3; 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) E=c->h4; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (;;) 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const union { long one; char little; } is_endian = {1}; 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!is_endian.little && sizeof(SHA_LONG)==4 && ((size_t)p%4)==0) 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) { 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const SHA_LONG *W=(const SHA_LONG *)data; 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) X( 0) = W[0]; X( 1) = W[ 1]; 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 0,A,B,C,D,E,T,X( 0)); X( 2) = W[ 2]; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 1,T,A,B,C,D,E,X( 1)); X( 3) = W[ 3]; 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 2,E,T,A,B,C,D,X( 2)); X( 4) = W[ 4]; 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 3,D,E,T,A,B,C,X( 3)); X( 5) = W[ 5]; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 4,C,D,E,T,A,B,X( 4)); X( 6) = W[ 6]; 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 5,B,C,D,E,T,A,X( 5)); X( 7) = W[ 7]; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 6,A,B,C,D,E,T,X( 6)); X( 8) = W[ 8]; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 7,T,A,B,C,D,E,X( 7)); X( 9) = W[ 9]; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 8,E,T,A,B,C,D,X( 8)); X(10) = W[10]; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 9,D,E,T,A,B,C,X( 9)); X(11) = W[11]; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(10,C,D,E,T,A,B,X(10)); X(12) = W[12]; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(11,B,C,D,E,T,A,X(11)); X(13) = W[13]; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(12,A,B,C,D,E,T,X(12)); X(14) = W[14]; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(13,T,A,B,C,D,E,X(13)); X(15) = W[15]; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(14,E,T,A,B,C,D,X(14)); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(15,D,E,T,A,B,C,X(15)); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data += SHA_CBLOCK; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 0,A,B,C,D,E,T,X( 0)); HOST_c2l(data,l); X( 2)=l; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 1,T,A,B,C,D,E,X( 1)); HOST_c2l(data,l); X( 3)=l; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 2,E,T,A,B,C,D,X( 2)); HOST_c2l(data,l); X( 4)=l; 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 3,D,E,T,A,B,C,X( 3)); HOST_c2l(data,l); X( 5)=l; 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 4,C,D,E,T,A,B,X( 4)); HOST_c2l(data,l); X( 6)=l; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 5,B,C,D,E,T,A,X( 5)); HOST_c2l(data,l); X( 7)=l; 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 6,A,B,C,D,E,T,X( 6)); HOST_c2l(data,l); X( 8)=l; 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 7,T,A,B,C,D,E,X( 7)); HOST_c2l(data,l); X( 9)=l; 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 8,E,T,A,B,C,D,X( 8)); HOST_c2l(data,l); X(10)=l; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15( 9,D,E,T,A,B,C,X( 9)); HOST_c2l(data,l); X(11)=l; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(10,C,D,E,T,A,B,X(10)); HOST_c2l(data,l); X(12)=l; 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(11,B,C,D,E,T,A,X(11)); HOST_c2l(data,l); X(13)=l; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(12,A,B,C,D,E,T,X(12)); HOST_c2l(data,l); X(14)=l; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(13,T,A,B,C,D,E,X(13)); HOST_c2l(data,l); X(15)=l; 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(14,E,T,A,B,C,D,X(14)); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_00_15(15,D,E,T,A,B,C,X(15)); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13)); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14)); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15)); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0)); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1)); 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2)); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3)); 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4)); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5)); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6)); 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7)); 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8)); 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9)); 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10)); 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11)); 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12)); 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13)); 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14)); 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15)); 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0)); 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1)); 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2)); 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3)); 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4)); 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5)); 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6)); 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7)); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8)); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9)); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10)); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11)); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12)); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13)); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14)); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15)); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0)); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1)); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2)); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3)); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4)); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5)); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6)); 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7)); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8)); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9)); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10)); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11)); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12)); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13)); 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14)); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15)); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0)); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1)); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2)); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3)); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4)); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5)); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6)); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7)); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8)); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9)); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10)); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11)); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12)); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h0=(c->h0+E)&0xffffffffL; 3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) c->h1=(c->h1+T)&0xffffffffL; 3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) c->h2=(c->h2+A)&0xffffffffL; 3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) c->h3=(c->h3+B)&0xffffffffL; 3513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) c->h4=(c->h4+C)&0xffffffffL; 3523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (--num == 0) break; 3543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) A=c->h0; 3563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) B=c->h1; 3573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) C=c->h2; 3583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) D=c->h3; 3593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) E=c->h4; 3603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 3643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 365a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#else /* OPENSSL_SMALL_FOOTPRINT */ 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_00_15(xi) do { \ 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T=E+K_00_19+F_00_19(B,C,D); \ 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) E=D, D=C, C=ROTATE(B,30), B=A; \ 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A=ROTATE(A,5)+T+xi; } while(0) 371a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 372a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define BODY_16_19(xa,xb,xc,xd) do { \ 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(T,xa,xa,xb,xc,xd); \ 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T+=E+K_00_19+F_00_19(B,C,D); \ 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) E=D, D=C, C=ROTATE(B,30), B=A; \ 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A=ROTATE(A,5)+T; } while(0) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_20_39(xa,xb,xc,xd) do { \ 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(T,xa,xa,xb,xc,xd); \ 3803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) T+=E+K_20_39+F_20_39(B,C,D); \ 381a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) E=D, D=C, C=ROTATE(B,30), B=A; \ 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A=ROTATE(A,5)+T; } while(0) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_40_59(xa,xb,xc,xd) do { \ 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(T,xa,xa,xb,xc,xd); \ 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T+=E+K_40_59+F_40_59(B,C,D); \ 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) E=D, D=C, C=ROTATE(B,30), B=A; \ 388a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) A=ROTATE(A,5)+T; } while(0) 389a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BODY_60_79(xa,xb,xc,xd) do { \ 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Xupdate(T,xa,xa,xb,xc,xd); \ 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T=E+K_60_79+F_60_79(B,C,D); \ 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) E=D, D=C, C=ROTATE(B,30), B=A; \ 394a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) A=ROTATE(A,5)+T+xa; } while(0) 395a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 396a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if !defined(SHA_1) || !defined(SHA1_ASM) 397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num) 398a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 399a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const unsigned char *data=p; 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch register unsigned MD32_REG_T A,B,C,D,E,T,l; 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int i; 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SHA_LONG X[16]; 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch A=c->h0; 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch B=c->h1; 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch C=c->h2; 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch D=c->h3; 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch E=c->h4; 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 410a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (;;) 411a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 412a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (i=0;i<16;i++) 413a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { HOST_c2l(data,l); X[i]=l; BODY_00_15(X[i]); } 414a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (i=0;i<4;i++) 415a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { BODY_16_19(X[i], X[i+2], X[i+8], X[(i+13)&15]); } 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (;i<24;i++) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { BODY_20_39(X[i&15], X[(i+2)&15], X[(i+8)&15],X[(i+13)&15]); } 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (i=0;i<20;i++) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { BODY_40_59(X[(i+8)&15],X[(i+10)&15],X[i&15], X[(i+5)&15]); } 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (i=4;i<24;i++) 421a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { BODY_60_79(X[(i+8)&15],X[(i+10)&15],X[i&15], X[(i+5)&15]); } 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h0=(c->h0+A)&0xffffffffL; 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h1=(c->h1+B)&0xffffffffL; 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h2=(c->h2+C)&0xffffffffL; 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h3=(c->h3+D)&0xffffffffL; 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c->h4=(c->h4+E)&0xffffffffL; 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (--num == 0) break; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A=c->h0; 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) B=c->h1; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) C=c->h2; 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) D=c->h3; 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) E=c->h4; 436a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 442a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)