A library for setting up Secure Socket Layer (SSL) connections and verifying remote hosts using certificates. Contains only the source files for mbed platform implementation of the library.

Dependents:   HTTPClient-SSL HTTPClient-SSL HTTPClient-SSL HTTPClient-SSL

Committer:
Mike Fiore
Date:
Mon Mar 23 16:51:07 2015 -0500
Revision:
6:cf58d49e1a86
Parent:
0:b86d15c6ba29
fix whitespace in sha512.c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vanger 0:b86d15c6ba29 1 /* md2.c
Vanger 0:b86d15c6ba29 2 *
Vanger 0:b86d15c6ba29 3 * Copyright (C) 2006-2014 wolfSSL Inc.
Vanger 0:b86d15c6ba29 4 *
Vanger 0:b86d15c6ba29 5 * This file is part of CyaSSL.
Vanger 0:b86d15c6ba29 6 *
Vanger 0:b86d15c6ba29 7 * CyaSSL is free software; you can redistribute it and/or modify
Vanger 0:b86d15c6ba29 8 * it under the terms of the GNU General Public License as published by
Vanger 0:b86d15c6ba29 9 * the Free Software Foundation; either version 2 of the License, or
Vanger 0:b86d15c6ba29 10 * (at your option) any later version.
Vanger 0:b86d15c6ba29 11 *
Vanger 0:b86d15c6ba29 12 * CyaSSL is distributed in the hope that it will be useful,
Vanger 0:b86d15c6ba29 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Vanger 0:b86d15c6ba29 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Vanger 0:b86d15c6ba29 15 * GNU General Public License for more details.
Vanger 0:b86d15c6ba29 16 *
Vanger 0:b86d15c6ba29 17 * You should have received a copy of the GNU General Public License
Vanger 0:b86d15c6ba29 18 * along with this program; if not, write to the Free Software
Vanger 0:b86d15c6ba29 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Vanger 0:b86d15c6ba29 20 */
Vanger 0:b86d15c6ba29 21
Vanger 0:b86d15c6ba29 22
Vanger 0:b86d15c6ba29 23 #ifdef HAVE_CONFIG_H
Vanger 0:b86d15c6ba29 24 #include <config.h>
Vanger 0:b86d15c6ba29 25 #endif
Vanger 0:b86d15c6ba29 26
Vanger 0:b86d15c6ba29 27 #include <cyassl/ctaocrypt/settings.h>
Vanger 0:b86d15c6ba29 28
Vanger 0:b86d15c6ba29 29 #ifdef CYASSL_MD2
Vanger 0:b86d15c6ba29 30
Vanger 0:b86d15c6ba29 31 #include <cyassl/ctaocrypt/md2.h>
Vanger 0:b86d15c6ba29 32 #include <cyassl/ctaocrypt/error-crypt.h>
Vanger 0:b86d15c6ba29 33
Vanger 0:b86d15c6ba29 34 #ifdef NO_INLINE
Vanger 0:b86d15c6ba29 35 #include <cyassl/ctaocrypt/misc.h>
Vanger 0:b86d15c6ba29 36 #else
Vanger 0:b86d15c6ba29 37 #include <ctaocrypt/src/misc.c>
Vanger 0:b86d15c6ba29 38 #endif
Vanger 0:b86d15c6ba29 39
Vanger 0:b86d15c6ba29 40
Vanger 0:b86d15c6ba29 41 void InitMd2(Md2* md2)
Vanger 0:b86d15c6ba29 42 {
Vanger 0:b86d15c6ba29 43 XMEMSET(md2->X, 0, MD2_X_SIZE);
Vanger 0:b86d15c6ba29 44 XMEMSET(md2->C, 0, MD2_BLOCK_SIZE);
Vanger 0:b86d15c6ba29 45 XMEMSET(md2->buffer, 0, MD2_BLOCK_SIZE);
Vanger 0:b86d15c6ba29 46 md2->count = 0;
Vanger 0:b86d15c6ba29 47 }
Vanger 0:b86d15c6ba29 48
Vanger 0:b86d15c6ba29 49
Vanger 0:b86d15c6ba29 50 void Md2Update(Md2* md2, const byte* data, word32 len)
Vanger 0:b86d15c6ba29 51 {
Vanger 0:b86d15c6ba29 52 static const byte S[256] =
Vanger 0:b86d15c6ba29 53 {
Vanger 0:b86d15c6ba29 54 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
Vanger 0:b86d15c6ba29 55 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
Vanger 0:b86d15c6ba29 56 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
Vanger 0:b86d15c6ba29 57 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
Vanger 0:b86d15c6ba29 58 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
Vanger 0:b86d15c6ba29 59 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
Vanger 0:b86d15c6ba29 60 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
Vanger 0:b86d15c6ba29 61 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
Vanger 0:b86d15c6ba29 62 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
Vanger 0:b86d15c6ba29 63 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
Vanger 0:b86d15c6ba29 64 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
Vanger 0:b86d15c6ba29 65 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
Vanger 0:b86d15c6ba29 66 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
Vanger 0:b86d15c6ba29 67 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
Vanger 0:b86d15c6ba29 68 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
Vanger 0:b86d15c6ba29 69 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
Vanger 0:b86d15c6ba29 70 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
Vanger 0:b86d15c6ba29 71 31, 26, 219, 153, 141, 51, 159, 17, 131, 20
Vanger 0:b86d15c6ba29 72 };
Vanger 0:b86d15c6ba29 73
Vanger 0:b86d15c6ba29 74 while (len) {
Vanger 0:b86d15c6ba29 75 word32 L = (MD2_PAD_SIZE - md2->count) < len ?
Vanger 0:b86d15c6ba29 76 (MD2_PAD_SIZE - md2->count) : len;
Vanger 0:b86d15c6ba29 77 XMEMCPY(md2->buffer + md2->count, data, L);
Vanger 0:b86d15c6ba29 78 md2->count += L;
Vanger 0:b86d15c6ba29 79 data += L;
Vanger 0:b86d15c6ba29 80 len -= L;
Vanger 0:b86d15c6ba29 81
Vanger 0:b86d15c6ba29 82 if (md2->count == MD2_PAD_SIZE) {
Vanger 0:b86d15c6ba29 83 int i;
Vanger 0:b86d15c6ba29 84 byte t;
Vanger 0:b86d15c6ba29 85
Vanger 0:b86d15c6ba29 86 md2->count = 0;
Vanger 0:b86d15c6ba29 87 XMEMCPY(md2->X + MD2_PAD_SIZE, md2->buffer, MD2_PAD_SIZE);
Vanger 0:b86d15c6ba29 88 t = md2->C[15];
Vanger 0:b86d15c6ba29 89
Vanger 0:b86d15c6ba29 90 for(i = 0; i < MD2_PAD_SIZE; i++) {
Vanger 0:b86d15c6ba29 91 md2->X[32 + i] = md2->X[MD2_PAD_SIZE + i] ^ md2->X[i];
Vanger 0:b86d15c6ba29 92 t = md2->C[i] ^= S[md2->buffer[i] ^ t];
Vanger 0:b86d15c6ba29 93 }
Vanger 0:b86d15c6ba29 94
Vanger 0:b86d15c6ba29 95 t=0;
Vanger 0:b86d15c6ba29 96 for(i = 0; i < 18; i++) {
Vanger 0:b86d15c6ba29 97 int j;
Vanger 0:b86d15c6ba29 98 for(j = 0; j < MD2_X_SIZE; j += 8) {
Vanger 0:b86d15c6ba29 99 t = md2->X[j+0] ^= S[t];
Vanger 0:b86d15c6ba29 100 t = md2->X[j+1] ^= S[t];
Vanger 0:b86d15c6ba29 101 t = md2->X[j+2] ^= S[t];
Vanger 0:b86d15c6ba29 102 t = md2->X[j+3] ^= S[t];
Vanger 0:b86d15c6ba29 103 t = md2->X[j+4] ^= S[t];
Vanger 0:b86d15c6ba29 104 t = md2->X[j+5] ^= S[t];
Vanger 0:b86d15c6ba29 105 t = md2->X[j+6] ^= S[t];
Vanger 0:b86d15c6ba29 106 t = md2->X[j+7] ^= S[t];
Vanger 0:b86d15c6ba29 107 }
Vanger 0:b86d15c6ba29 108 t = (t + i) & 0xFF;
Vanger 0:b86d15c6ba29 109 }
Vanger 0:b86d15c6ba29 110 }
Vanger 0:b86d15c6ba29 111 }
Vanger 0:b86d15c6ba29 112 }
Vanger 0:b86d15c6ba29 113
Vanger 0:b86d15c6ba29 114
Vanger 0:b86d15c6ba29 115 void Md2Final(Md2* md2, byte* hash)
Vanger 0:b86d15c6ba29 116 {
Vanger 0:b86d15c6ba29 117 byte padding[MD2_BLOCK_SIZE];
Vanger 0:b86d15c6ba29 118 word32 padLen = MD2_PAD_SIZE - md2->count;
Vanger 0:b86d15c6ba29 119 word32 i;
Vanger 0:b86d15c6ba29 120
Vanger 0:b86d15c6ba29 121 for (i = 0; i < padLen; i++)
Vanger 0:b86d15c6ba29 122 padding[i] = (byte)padLen;
Vanger 0:b86d15c6ba29 123
Vanger 0:b86d15c6ba29 124 Md2Update(md2, padding, padLen);
Vanger 0:b86d15c6ba29 125 Md2Update(md2, md2->C, MD2_BLOCK_SIZE);
Vanger 0:b86d15c6ba29 126
Vanger 0:b86d15c6ba29 127 XMEMCPY(hash, md2->X, MD2_DIGEST_SIZE);
Vanger 0:b86d15c6ba29 128
Vanger 0:b86d15c6ba29 129 InitMd2(md2);
Vanger 0:b86d15c6ba29 130 }
Vanger 0:b86d15c6ba29 131
Vanger 0:b86d15c6ba29 132
Vanger 0:b86d15c6ba29 133 int Md2Hash(const byte* data, word32 len, byte* hash)
Vanger 0:b86d15c6ba29 134 {
Vanger 0:b86d15c6ba29 135 #ifdef CYASSL_SMALL_STACK
Vanger 0:b86d15c6ba29 136 Md2* md2;
Vanger 0:b86d15c6ba29 137 #else
Vanger 0:b86d15c6ba29 138 Md2 md2[1];
Vanger 0:b86d15c6ba29 139 #endif
Vanger 0:b86d15c6ba29 140
Vanger 0:b86d15c6ba29 141 #ifdef CYASSL_SMALL_STACK
Vanger 0:b86d15c6ba29 142 md2 = (Md2*)XMALLOC(sizeof(Md2), NULL, DYNAMIC_TYPE_TMP_BUFFER);
Vanger 0:b86d15c6ba29 143 if (md2 == NULL)
Vanger 0:b86d15c6ba29 144 return MEMORY_E;
Vanger 0:b86d15c6ba29 145 #endif
Vanger 0:b86d15c6ba29 146
Vanger 0:b86d15c6ba29 147 InitMd2(md2);
Vanger 0:b86d15c6ba29 148 Md2Update(md2, data, len);
Vanger 0:b86d15c6ba29 149 Md2Final(md2, hash);
Vanger 0:b86d15c6ba29 150
Vanger 0:b86d15c6ba29 151 #ifdef CYASSL_SMALL_STACK
Vanger 0:b86d15c6ba29 152 XFREE(md2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
Vanger 0:b86d15c6ba29 153 #endif
Vanger 0:b86d15c6ba29 154
Vanger 0:b86d15c6ba29 155 return 0;
Vanger 0:b86d15c6ba29 156 }
Vanger 0:b86d15c6ba29 157
Vanger 0:b86d15c6ba29 158
Vanger 0:b86d15c6ba29 159 #endif /* CYASSL_MD2 */