LwIP with PPP & Ethernet integration

Dependents:   NetworkingCoreLib

This is the mbed port of the LwIP stack: http://savannah.nongnu.org/projects/lwip/

It includes contributed content from NXP's port for LPCxxxx devices: http://www.lpcware.com/content/project/lightweight-ip-lwip-networking-stack

Licence

LwIP is licenced under the BSD licence:

Copyright (c) 2001-2004 Swedish Institute of Computer Science. 
All rights reserved. 
Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met: 
1. Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution. 
3. The name of the author may not be used to endorse or promote products 
derived from this software without specific prior written permission. 
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGE.
Committer:
donatien
Date:
Fri May 25 08:56:35 2012 +0000
Revision:
2:1a87f74b8e3b
Parent:
0:8e01dca41002
Removed compilation of EMAC driver when using PPP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:8e01dca41002 1 /*
donatien 0:8e01dca41002 2 ***********************************************************************
donatien 0:8e01dca41002 3 ** md5.c -- the source code for MD5 routines **
donatien 0:8e01dca41002 4 ** RSA Data Security, Inc. MD5 Message-Digest Algorithm **
donatien 0:8e01dca41002 5 ** Created: 2/17/90 RLR **
donatien 0:8e01dca41002 6 ** Revised: 1/91 SRD,AJ,BSK,JT Reference C ver., 7/10 constant corr. **
donatien 0:8e01dca41002 7 ***********************************************************************
donatien 0:8e01dca41002 8 */
donatien 0:8e01dca41002 9
donatien 0:8e01dca41002 10 /*
donatien 0:8e01dca41002 11 ***********************************************************************
donatien 0:8e01dca41002 12 ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
donatien 0:8e01dca41002 13 ** **
donatien 0:8e01dca41002 14 ** License to copy and use this software is granted provided that **
donatien 0:8e01dca41002 15 ** it is identified as the "RSA Data Security, Inc. MD5 Message- **
donatien 0:8e01dca41002 16 ** Digest Algorithm" in all material mentioning or referencing this **
donatien 0:8e01dca41002 17 ** software or this function. **
donatien 0:8e01dca41002 18 ** **
donatien 0:8e01dca41002 19 ** License is also granted to make and use derivative works **
donatien 0:8e01dca41002 20 ** provided that such works are identified as "derived from the RSA **
donatien 0:8e01dca41002 21 ** Data Security, Inc. MD5 Message-Digest Algorithm" in all **
donatien 0:8e01dca41002 22 ** material mentioning or referencing the derived work. **
donatien 0:8e01dca41002 23 ** **
donatien 0:8e01dca41002 24 ** RSA Data Security, Inc. makes no representations concerning **
donatien 0:8e01dca41002 25 ** either the merchantability of this software or the suitability **
donatien 0:8e01dca41002 26 ** of this software for any particular purpose. It is provided "as **
donatien 0:8e01dca41002 27 ** is" without express or implied warranty of any kind. **
donatien 0:8e01dca41002 28 ** **
donatien 0:8e01dca41002 29 ** These notices must be retained in any copies of any part of this **
donatien 0:8e01dca41002 30 ** documentation and/or software. **
donatien 0:8e01dca41002 31 ***********************************************************************
donatien 0:8e01dca41002 32 */
donatien 0:8e01dca41002 33
donatien 0:8e01dca41002 34 #include "lwip/opt.h"
donatien 0:8e01dca41002 35
donatien 0:8e01dca41002 36 #if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */
donatien 0:8e01dca41002 37
donatien 0:8e01dca41002 38 #if CHAP_SUPPORT || MD5_SUPPORT
donatien 0:8e01dca41002 39
donatien 0:8e01dca41002 40 #include "ppp.h"
donatien 0:8e01dca41002 41 #include "pppdebug.h"
donatien 0:8e01dca41002 42
donatien 0:8e01dca41002 43 #include "md5.h"
donatien 0:8e01dca41002 44
donatien 0:8e01dca41002 45 #include <string.h>
donatien 0:8e01dca41002 46
donatien 0:8e01dca41002 47 /*
donatien 0:8e01dca41002 48 ***********************************************************************
donatien 0:8e01dca41002 49 ** Message-digest routines: **
donatien 0:8e01dca41002 50 ** To form the message digest for a message M **
donatien 0:8e01dca41002 51 ** (1) Initialize a context buffer mdContext using MD5Init **
donatien 0:8e01dca41002 52 ** (2) Call MD5Update on mdContext and M **
donatien 0:8e01dca41002 53 ** (3) Call MD5Final on mdContext **
donatien 0:8e01dca41002 54 ** The message digest is now in mdContext->digest[0...15] **
donatien 0:8e01dca41002 55 ***********************************************************************
donatien 0:8e01dca41002 56 */
donatien 0:8e01dca41002 57
donatien 0:8e01dca41002 58 /* forward declaration */
donatien 0:8e01dca41002 59 static void Transform (u32_t *buf, u32_t *in);
donatien 0:8e01dca41002 60
donatien 0:8e01dca41002 61 static unsigned char PADDING[64] = {
donatien 0:8e01dca41002 62 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
donatien 0:8e01dca41002 69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
donatien 0:8e01dca41002 70 };
donatien 0:8e01dca41002 71
donatien 0:8e01dca41002 72 /* F, G, H and I are basic MD5 functions */
donatien 0:8e01dca41002 73 #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
donatien 0:8e01dca41002 74 #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
donatien 0:8e01dca41002 75 #define H(x, y, z) ((x) ^ (y) ^ (z))
donatien 0:8e01dca41002 76 #define I(x, y, z) ((y) ^ ((x) | (~z)))
donatien 0:8e01dca41002 77
donatien 0:8e01dca41002 78 /* ROTATE_LEFT rotates x left n bits */
donatien 0:8e01dca41002 79 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
donatien 0:8e01dca41002 80
donatien 0:8e01dca41002 81 /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
donatien 0:8e01dca41002 82 /* Rotation is separate from addition to prevent recomputation */
donatien 0:8e01dca41002 83 #define FF(a, b, c, d, x, s, ac) \
donatien 0:8e01dca41002 84 {(a) += F ((b), (c), (d)) + (x) + (u32_t)(ac); \
donatien 0:8e01dca41002 85 (a) = ROTATE_LEFT ((a), (s)); \
donatien 0:8e01dca41002 86 (a) += (b); \
donatien 0:8e01dca41002 87 }
donatien 0:8e01dca41002 88 #define GG(a, b, c, d, x, s, ac) \
donatien 0:8e01dca41002 89 {(a) += G ((b), (c), (d)) + (x) + (u32_t)(ac); \
donatien 0:8e01dca41002 90 (a) = ROTATE_LEFT ((a), (s)); \
donatien 0:8e01dca41002 91 (a) += (b); \
donatien 0:8e01dca41002 92 }
donatien 0:8e01dca41002 93 #define HH(a, b, c, d, x, s, ac) \
donatien 0:8e01dca41002 94 {(a) += H ((b), (c), (d)) + (x) + (u32_t)(ac); \
donatien 0:8e01dca41002 95 (a) = ROTATE_LEFT ((a), (s)); \
donatien 0:8e01dca41002 96 (a) += (b); \
donatien 0:8e01dca41002 97 }
donatien 0:8e01dca41002 98 #define II(a, b, c, d, x, s, ac) \
donatien 0:8e01dca41002 99 {(a) += I ((b), (c), (d)) + (x) + (u32_t)(ac); \
donatien 0:8e01dca41002 100 (a) = ROTATE_LEFT ((a), (s)); \
donatien 0:8e01dca41002 101 (a) += (b); \
donatien 0:8e01dca41002 102 }
donatien 0:8e01dca41002 103
donatien 0:8e01dca41002 104 #ifdef __STDC__
donatien 0:8e01dca41002 105 #define UL(x) x##UL
donatien 0:8e01dca41002 106 #else
donatien 0:8e01dca41002 107 #ifdef WIN32
donatien 0:8e01dca41002 108 #define UL(x) x##UL
donatien 0:8e01dca41002 109 #else
donatien 0:8e01dca41002 110 #define UL(x) x
donatien 0:8e01dca41002 111 #endif
donatien 0:8e01dca41002 112 #endif
donatien 0:8e01dca41002 113
donatien 0:8e01dca41002 114 /* The routine MD5Init initializes the message-digest context
donatien 0:8e01dca41002 115 mdContext. All fields are set to zero.
donatien 0:8e01dca41002 116 */
donatien 0:8e01dca41002 117 void
donatien 0:8e01dca41002 118 MD5Init (MD5_CTX *mdContext)
donatien 0:8e01dca41002 119 {
donatien 0:8e01dca41002 120 mdContext->i[0] = mdContext->i[1] = (u32_t)0;
donatien 0:8e01dca41002 121
donatien 0:8e01dca41002 122 /* Load magic initialization constants. */
donatien 0:8e01dca41002 123 mdContext->buf[0] = (u32_t)0x67452301UL;
donatien 0:8e01dca41002 124 mdContext->buf[1] = (u32_t)0xefcdab89UL;
donatien 0:8e01dca41002 125 mdContext->buf[2] = (u32_t)0x98badcfeUL;
donatien 0:8e01dca41002 126 mdContext->buf[3] = (u32_t)0x10325476UL;
donatien 0:8e01dca41002 127 }
donatien 0:8e01dca41002 128
donatien 0:8e01dca41002 129 /* The routine MD5Update updates the message-digest context to
donatien 0:8e01dca41002 130 account for the presence of each of the characters inBuf[0..inLen-1]
donatien 0:8e01dca41002 131 in the message whose digest is being computed.
donatien 0:8e01dca41002 132 */
donatien 0:8e01dca41002 133 void
donatien 0:8e01dca41002 134 MD5Update(MD5_CTX *mdContext, unsigned char *inBuf, unsigned int inLen)
donatien 0:8e01dca41002 135 {
donatien 0:8e01dca41002 136 u32_t in[16];
donatien 0:8e01dca41002 137 int mdi;
donatien 0:8e01dca41002 138 unsigned int i, ii;
donatien 0:8e01dca41002 139
donatien 0:8e01dca41002 140 #if 0
donatien 0:8e01dca41002 141 PPPDEBUG(LOG_INFO, ("MD5Update: %u:%.*H\n", inLen, LWIP_MIN(inLen, 20) * 2, inBuf));
donatien 0:8e01dca41002 142 PPPDEBUG(LOG_INFO, ("MD5Update: %u:%s\n", inLen, inBuf));
donatien 0:8e01dca41002 143 #endif
donatien 0:8e01dca41002 144
donatien 0:8e01dca41002 145 /* compute number of bytes mod 64 */
donatien 0:8e01dca41002 146 mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
donatien 0:8e01dca41002 147
donatien 0:8e01dca41002 148 /* update number of bits */
donatien 0:8e01dca41002 149 if ((mdContext->i[0] + ((u32_t)inLen << 3)) < mdContext->i[0]) {
donatien 0:8e01dca41002 150 mdContext->i[1]++;
donatien 0:8e01dca41002 151 }
donatien 0:8e01dca41002 152 mdContext->i[0] += ((u32_t)inLen << 3);
donatien 0:8e01dca41002 153 mdContext->i[1] += ((u32_t)inLen >> 29);
donatien 0:8e01dca41002 154
donatien 0:8e01dca41002 155 while (inLen--) {
donatien 0:8e01dca41002 156 /* add new character to buffer, increment mdi */
donatien 0:8e01dca41002 157 mdContext->in[mdi++] = *inBuf++;
donatien 0:8e01dca41002 158
donatien 0:8e01dca41002 159 /* transform if necessary */
donatien 0:8e01dca41002 160 if (mdi == 0x40) {
donatien 0:8e01dca41002 161 for (i = 0, ii = 0; i < 16; i++, ii += 4) {
donatien 0:8e01dca41002 162 in[i] = (((u32_t)mdContext->in[ii+3]) << 24) |
donatien 0:8e01dca41002 163 (((u32_t)mdContext->in[ii+2]) << 16) |
donatien 0:8e01dca41002 164 (((u32_t)mdContext->in[ii+1]) << 8) |
donatien 0:8e01dca41002 165 ((u32_t)mdContext->in[ii]);
donatien 0:8e01dca41002 166 }
donatien 0:8e01dca41002 167 Transform (mdContext->buf, in);
donatien 0:8e01dca41002 168 mdi = 0;
donatien 0:8e01dca41002 169 }
donatien 0:8e01dca41002 170 }
donatien 0:8e01dca41002 171 }
donatien 0:8e01dca41002 172
donatien 0:8e01dca41002 173 /* The routine MD5Final terminates the message-digest computation and
donatien 0:8e01dca41002 174 ends with the desired message digest in mdContext->digest[0...15].
donatien 0:8e01dca41002 175 */
donatien 0:8e01dca41002 176 void
donatien 0:8e01dca41002 177 MD5Final (unsigned char hash[], MD5_CTX *mdContext)
donatien 0:8e01dca41002 178 {
donatien 0:8e01dca41002 179 u32_t in[16];
donatien 0:8e01dca41002 180 int mdi;
donatien 0:8e01dca41002 181 unsigned int i, ii;
donatien 0:8e01dca41002 182 unsigned int padLen;
donatien 0:8e01dca41002 183
donatien 0:8e01dca41002 184 /* save number of bits */
donatien 0:8e01dca41002 185 in[14] = mdContext->i[0];
donatien 0:8e01dca41002 186 in[15] = mdContext->i[1];
donatien 0:8e01dca41002 187
donatien 0:8e01dca41002 188 /* compute number of bytes mod 64 */
donatien 0:8e01dca41002 189 mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
donatien 0:8e01dca41002 190
donatien 0:8e01dca41002 191 /* pad out to 56 mod 64 */
donatien 0:8e01dca41002 192 padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
donatien 0:8e01dca41002 193 MD5Update (mdContext, PADDING, padLen);
donatien 0:8e01dca41002 194
donatien 0:8e01dca41002 195 /* append length in bits and transform */
donatien 0:8e01dca41002 196 for (i = 0, ii = 0; i < 14; i++, ii += 4) {
donatien 0:8e01dca41002 197 in[i] = (((u32_t)mdContext->in[ii+3]) << 24) |
donatien 0:8e01dca41002 198 (((u32_t)mdContext->in[ii+2]) << 16) |
donatien 0:8e01dca41002 199 (((u32_t)mdContext->in[ii+1]) << 8) |
donatien 0:8e01dca41002 200 ((u32_t)mdContext->in[ii]);
donatien 0:8e01dca41002 201 }
donatien 0:8e01dca41002 202 Transform (mdContext->buf, in);
donatien 0:8e01dca41002 203
donatien 0:8e01dca41002 204 /* store buffer in digest */
donatien 0:8e01dca41002 205 for (i = 0, ii = 0; i < 4; i++, ii += 4) {
donatien 0:8e01dca41002 206 mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
donatien 0:8e01dca41002 207 mdContext->digest[ii+1] =
donatien 0:8e01dca41002 208 (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
donatien 0:8e01dca41002 209 mdContext->digest[ii+2] =
donatien 0:8e01dca41002 210 (unsigned char)((mdContext->buf[i] >> 16) & 0xFF);
donatien 0:8e01dca41002 211 mdContext->digest[ii+3] =
donatien 0:8e01dca41002 212 (unsigned char)((mdContext->buf[i] >> 24) & 0xFF);
donatien 0:8e01dca41002 213 }
donatien 0:8e01dca41002 214 SMEMCPY(hash, mdContext->digest, 16);
donatien 0:8e01dca41002 215 }
donatien 0:8e01dca41002 216
donatien 0:8e01dca41002 217 /* Basic MD5 step. Transforms buf based on in.
donatien 0:8e01dca41002 218 */
donatien 0:8e01dca41002 219 static void
donatien 0:8e01dca41002 220 Transform (u32_t *buf, u32_t *in)
donatien 0:8e01dca41002 221 {
donatien 0:8e01dca41002 222 u32_t a = buf[0], b = buf[1], c = buf[2], d = buf[3];
donatien 0:8e01dca41002 223
donatien 0:8e01dca41002 224 /* Round 1 */
donatien 0:8e01dca41002 225 #define S11 7
donatien 0:8e01dca41002 226 #define S12 12
donatien 0:8e01dca41002 227 #define S13 17
donatien 0:8e01dca41002 228 #define S14 22
donatien 0:8e01dca41002 229 FF ( a, b, c, d, in[ 0], S11, UL(3614090360)); /* 1 */
donatien 0:8e01dca41002 230 FF ( d, a, b, c, in[ 1], S12, UL(3905402710)); /* 2 */
donatien 0:8e01dca41002 231 FF ( c, d, a, b, in[ 2], S13, UL( 606105819)); /* 3 */
donatien 0:8e01dca41002 232 FF ( b, c, d, a, in[ 3], S14, UL(3250441966)); /* 4 */
donatien 0:8e01dca41002 233 FF ( a, b, c, d, in[ 4], S11, UL(4118548399)); /* 5 */
donatien 0:8e01dca41002 234 FF ( d, a, b, c, in[ 5], S12, UL(1200080426)); /* 6 */
donatien 0:8e01dca41002 235 FF ( c, d, a, b, in[ 6], S13, UL(2821735955)); /* 7 */
donatien 0:8e01dca41002 236 FF ( b, c, d, a, in[ 7], S14, UL(4249261313)); /* 8 */
donatien 0:8e01dca41002 237 FF ( a, b, c, d, in[ 8], S11, UL(1770035416)); /* 9 */
donatien 0:8e01dca41002 238 FF ( d, a, b, c, in[ 9], S12, UL(2336552879)); /* 10 */
donatien 0:8e01dca41002 239 FF ( c, d, a, b, in[10], S13, UL(4294925233)); /* 11 */
donatien 0:8e01dca41002 240 FF ( b, c, d, a, in[11], S14, UL(2304563134)); /* 12 */
donatien 0:8e01dca41002 241 FF ( a, b, c, d, in[12], S11, UL(1804603682)); /* 13 */
donatien 0:8e01dca41002 242 FF ( d, a, b, c, in[13], S12, UL(4254626195)); /* 14 */
donatien 0:8e01dca41002 243 FF ( c, d, a, b, in[14], S13, UL(2792965006)); /* 15 */
donatien 0:8e01dca41002 244 FF ( b, c, d, a, in[15], S14, UL(1236535329)); /* 16 */
donatien 0:8e01dca41002 245
donatien 0:8e01dca41002 246 /* Round 2 */
donatien 0:8e01dca41002 247 #define S21 5
donatien 0:8e01dca41002 248 #define S22 9
donatien 0:8e01dca41002 249 #define S23 14
donatien 0:8e01dca41002 250 #define S24 20
donatien 0:8e01dca41002 251 GG ( a, b, c, d, in[ 1], S21, UL(4129170786)); /* 17 */
donatien 0:8e01dca41002 252 GG ( d, a, b, c, in[ 6], S22, UL(3225465664)); /* 18 */
donatien 0:8e01dca41002 253 GG ( c, d, a, b, in[11], S23, UL( 643717713)); /* 19 */
donatien 0:8e01dca41002 254 GG ( b, c, d, a, in[ 0], S24, UL(3921069994)); /* 20 */
donatien 0:8e01dca41002 255 GG ( a, b, c, d, in[ 5], S21, UL(3593408605)); /* 21 */
donatien 0:8e01dca41002 256 GG ( d, a, b, c, in[10], S22, UL( 38016083)); /* 22 */
donatien 0:8e01dca41002 257 GG ( c, d, a, b, in[15], S23, UL(3634488961)); /* 23 */
donatien 0:8e01dca41002 258 GG ( b, c, d, a, in[ 4], S24, UL(3889429448)); /* 24 */
donatien 0:8e01dca41002 259 GG ( a, b, c, d, in[ 9], S21, UL( 568446438)); /* 25 */
donatien 0:8e01dca41002 260 GG ( d, a, b, c, in[14], S22, UL(3275163606)); /* 26 */
donatien 0:8e01dca41002 261 GG ( c, d, a, b, in[ 3], S23, UL(4107603335)); /* 27 */
donatien 0:8e01dca41002 262 GG ( b, c, d, a, in[ 8], S24, UL(1163531501)); /* 28 */
donatien 0:8e01dca41002 263 GG ( a, b, c, d, in[13], S21, UL(2850285829)); /* 29 */
donatien 0:8e01dca41002 264 GG ( d, a, b, c, in[ 2], S22, UL(4243563512)); /* 30 */
donatien 0:8e01dca41002 265 GG ( c, d, a, b, in[ 7], S23, UL(1735328473)); /* 31 */
donatien 0:8e01dca41002 266 GG ( b, c, d, a, in[12], S24, UL(2368359562)); /* 32 */
donatien 0:8e01dca41002 267
donatien 0:8e01dca41002 268 /* Round 3 */
donatien 0:8e01dca41002 269 #define S31 4
donatien 0:8e01dca41002 270 #define S32 11
donatien 0:8e01dca41002 271 #define S33 16
donatien 0:8e01dca41002 272 #define S34 23
donatien 0:8e01dca41002 273 HH ( a, b, c, d, in[ 5], S31, UL(4294588738)); /* 33 */
donatien 0:8e01dca41002 274 HH ( d, a, b, c, in[ 8], S32, UL(2272392833)); /* 34 */
donatien 0:8e01dca41002 275 HH ( c, d, a, b, in[11], S33, UL(1839030562)); /* 35 */
donatien 0:8e01dca41002 276 HH ( b, c, d, a, in[14], S34, UL(4259657740)); /* 36 */
donatien 0:8e01dca41002 277 HH ( a, b, c, d, in[ 1], S31, UL(2763975236)); /* 37 */
donatien 0:8e01dca41002 278 HH ( d, a, b, c, in[ 4], S32, UL(1272893353)); /* 38 */
donatien 0:8e01dca41002 279 HH ( c, d, a, b, in[ 7], S33, UL(4139469664)); /* 39 */
donatien 0:8e01dca41002 280 HH ( b, c, d, a, in[10], S34, UL(3200236656)); /* 40 */
donatien 0:8e01dca41002 281 HH ( a, b, c, d, in[13], S31, UL( 681279174)); /* 41 */
donatien 0:8e01dca41002 282 HH ( d, a, b, c, in[ 0], S32, UL(3936430074)); /* 42 */
donatien 0:8e01dca41002 283 HH ( c, d, a, b, in[ 3], S33, UL(3572445317)); /* 43 */
donatien 0:8e01dca41002 284 HH ( b, c, d, a, in[ 6], S34, UL( 76029189)); /* 44 */
donatien 0:8e01dca41002 285 HH ( a, b, c, d, in[ 9], S31, UL(3654602809)); /* 45 */
donatien 0:8e01dca41002 286 HH ( d, a, b, c, in[12], S32, UL(3873151461)); /* 46 */
donatien 0:8e01dca41002 287 HH ( c, d, a, b, in[15], S33, UL( 530742520)); /* 47 */
donatien 0:8e01dca41002 288 HH ( b, c, d, a, in[ 2], S34, UL(3299628645)); /* 48 */
donatien 0:8e01dca41002 289
donatien 0:8e01dca41002 290 /* Round 4 */
donatien 0:8e01dca41002 291 #define S41 6
donatien 0:8e01dca41002 292 #define S42 10
donatien 0:8e01dca41002 293 #define S43 15
donatien 0:8e01dca41002 294 #define S44 21
donatien 0:8e01dca41002 295 II ( a, b, c, d, in[ 0], S41, UL(4096336452)); /* 49 */
donatien 0:8e01dca41002 296 II ( d, a, b, c, in[ 7], S42, UL(1126891415)); /* 50 */
donatien 0:8e01dca41002 297 II ( c, d, a, b, in[14], S43, UL(2878612391)); /* 51 */
donatien 0:8e01dca41002 298 II ( b, c, d, a, in[ 5], S44, UL(4237533241)); /* 52 */
donatien 0:8e01dca41002 299 II ( a, b, c, d, in[12], S41, UL(1700485571)); /* 53 */
donatien 0:8e01dca41002 300 II ( d, a, b, c, in[ 3], S42, UL(2399980690)); /* 54 */
donatien 0:8e01dca41002 301 II ( c, d, a, b, in[10], S43, UL(4293915773)); /* 55 */
donatien 0:8e01dca41002 302 II ( b, c, d, a, in[ 1], S44, UL(2240044497)); /* 56 */
donatien 0:8e01dca41002 303 II ( a, b, c, d, in[ 8], S41, UL(1873313359)); /* 57 */
donatien 0:8e01dca41002 304 II ( d, a, b, c, in[15], S42, UL(4264355552)); /* 58 */
donatien 0:8e01dca41002 305 II ( c, d, a, b, in[ 6], S43, UL(2734768916)); /* 59 */
donatien 0:8e01dca41002 306 II ( b, c, d, a, in[13], S44, UL(1309151649)); /* 60 */
donatien 0:8e01dca41002 307 II ( a, b, c, d, in[ 4], S41, UL(4149444226)); /* 61 */
donatien 0:8e01dca41002 308 II ( d, a, b, c, in[11], S42, UL(3174756917)); /* 62 */
donatien 0:8e01dca41002 309 II ( c, d, a, b, in[ 2], S43, UL( 718787259)); /* 63 */
donatien 0:8e01dca41002 310 II ( b, c, d, a, in[ 9], S44, UL(3951481745)); /* 64 */
donatien 0:8e01dca41002 311
donatien 0:8e01dca41002 312 buf[0] += a;
donatien 0:8e01dca41002 313 buf[1] += b;
donatien 0:8e01dca41002 314 buf[2] += c;
donatien 0:8e01dca41002 315 buf[3] += d;
donatien 0:8e01dca41002 316 }
donatien 0:8e01dca41002 317
donatien 0:8e01dca41002 318 #endif /* CHAP_SUPPORT || MD5_SUPPORT */
donatien 0:8e01dca41002 319
donatien 0:8e01dca41002 320 #endif /* PPP_SUPPORT */