wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Thu Apr 28 00:56:55 2016 +0000
Revision:
3:6f956bdb3073
wolfSSL 3.9.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 3:6f956bdb3073 1 /* des.h
wolfSSL 3:6f956bdb3073 2 *
wolfSSL 3:6f956bdb3073 3 * Copyright (C) 2006-2016 wolfSSL Inc.
wolfSSL 3:6f956bdb3073 4 *
wolfSSL 3:6f956bdb3073 5 * This file is part of wolfSSL.
wolfSSL 3:6f956bdb3073 6 *
wolfSSL 3:6f956bdb3073 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 3:6f956bdb3073 8 * it under the terms of the GNU General Public License as published by
wolfSSL 3:6f956bdb3073 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 3:6f956bdb3073 10 * (at your option) any later version.
wolfSSL 3:6f956bdb3073 11 *
wolfSSL 3:6f956bdb3073 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 3:6f956bdb3073 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 3:6f956bdb3073 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 3:6f956bdb3073 15 * GNU General Public License for more details.
wolfSSL 3:6f956bdb3073 16 *
wolfSSL 3:6f956bdb3073 17 * You should have received a copy of the GNU General Public License
wolfSSL 3:6f956bdb3073 18 * along with this program; if not, write to the Free Software
wolfSSL 3:6f956bdb3073 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 3:6f956bdb3073 20 */
wolfSSL 3:6f956bdb3073 21
wolfSSL 3:6f956bdb3073 22
wolfSSL 3:6f956bdb3073 23
wolfSSL 3:6f956bdb3073 24 /* des.h defines mini des openssl compatibility layer
wolfSSL 3:6f956bdb3073 25 *
wolfSSL 3:6f956bdb3073 26 */
wolfSSL 3:6f956bdb3073 27
wolfSSL 3:6f956bdb3073 28
wolfSSL 3:6f956bdb3073 29 #ifndef WOLFSSL_DES_H_
wolfSSL 3:6f956bdb3073 30 #define WOLFSSL_DES_H_
wolfSSL 3:6f956bdb3073 31
wolfSSL 3:6f956bdb3073 32 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 3:6f956bdb3073 33
wolfSSL 3:6f956bdb3073 34 #ifndef NO_DES3
wolfSSL 3:6f956bdb3073 35
wolfSSL 3:6f956bdb3073 36 #ifdef WOLFSSL_PREFIX
wolfSSL 3:6f956bdb3073 37 #include "prefix_des.h"
wolfSSL 3:6f956bdb3073 38 #endif
wolfSSL 3:6f956bdb3073 39
wolfSSL 3:6f956bdb3073 40
wolfSSL 3:6f956bdb3073 41 #ifdef __cplusplus
wolfSSL 3:6f956bdb3073 42 extern "C" {
wolfSSL 3:6f956bdb3073 43 #endif
wolfSSL 3:6f956bdb3073 44
wolfSSL 3:6f956bdb3073 45 typedef unsigned char WOLFSSL_DES_cblock[8];
wolfSSL 3:6f956bdb3073 46 typedef /* const */ WOLFSSL_DES_cblock WOLFSSL_const_DES_cblock;
wolfSSL 3:6f956bdb3073 47 typedef WOLFSSL_DES_cblock WOLFSSL_DES_key_schedule;
wolfSSL 3:6f956bdb3073 48
wolfSSL 3:6f956bdb3073 49
wolfSSL 3:6f956bdb3073 50 enum {
wolfSSL 3:6f956bdb3073 51 DES_ENCRYPT = 1,
wolfSSL 3:6f956bdb3073 52 DES_DECRYPT = 0
wolfSSL 3:6f956bdb3073 53 };
wolfSSL 3:6f956bdb3073 54
wolfSSL 3:6f956bdb3073 55
wolfSSL 3:6f956bdb3073 56 WOLFSSL_API void wolfSSL_DES_set_key_unchecked(WOLFSSL_const_DES_cblock*,
wolfSSL 3:6f956bdb3073 57 WOLFSSL_DES_key_schedule*);
wolfSSL 3:6f956bdb3073 58 WOLFSSL_API int wolfSSL_DES_key_sched(WOLFSSL_const_DES_cblock* key,
wolfSSL 3:6f956bdb3073 59 WOLFSSL_DES_key_schedule* schedule);
wolfSSL 3:6f956bdb3073 60 WOLFSSL_API void wolfSSL_DES_cbc_encrypt(const unsigned char* input,
wolfSSL 3:6f956bdb3073 61 unsigned char* output, long length,
wolfSSL 3:6f956bdb3073 62 WOLFSSL_DES_key_schedule* schedule, WOLFSSL_DES_cblock* ivec,
wolfSSL 3:6f956bdb3073 63 int enc);
wolfSSL 3:6f956bdb3073 64 WOLFSSL_API void wolfSSL_DES_ncbc_encrypt(const unsigned char* input,
wolfSSL 3:6f956bdb3073 65 unsigned char* output, long length,
wolfSSL 3:6f956bdb3073 66 WOLFSSL_DES_key_schedule* schedule,
wolfSSL 3:6f956bdb3073 67 WOLFSSL_DES_cblock* ivec, int enc);
wolfSSL 3:6f956bdb3073 68
wolfSSL 3:6f956bdb3073 69 WOLFSSL_API void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock*);
wolfSSL 3:6f956bdb3073 70 WOLFSSL_API void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock*, WOLFSSL_DES_cblock*,
wolfSSL 3:6f956bdb3073 71 WOLFSSL_DES_key_schedule*, int);
wolfSSL 3:6f956bdb3073 72
wolfSSL 3:6f956bdb3073 73
wolfSSL 3:6f956bdb3073 74 typedef WOLFSSL_DES_cblock DES_cblock;
wolfSSL 3:6f956bdb3073 75 typedef WOLFSSL_const_DES_cblock const_DES_cblock;
wolfSSL 3:6f956bdb3073 76 typedef WOLFSSL_DES_key_schedule DES_key_schedule;
wolfSSL 3:6f956bdb3073 77
wolfSSL 3:6f956bdb3073 78 #define DES_set_key_unchecked wolfSSL_DES_set_key_unchecked
wolfSSL 3:6f956bdb3073 79 #define DES_key_sched wolfSSL_DES_key_sched
wolfSSL 3:6f956bdb3073 80 #define DES_cbc_encrypt wolfSSL_DES_cbc_encrypt
wolfSSL 3:6f956bdb3073 81 #define DES_ncbc_encrypt wolfSSL_DES_ncbc_encrypt
wolfSSL 3:6f956bdb3073 82 #define DES_set_odd_parity wolfSSL_DES_set_odd_parity
wolfSSL 3:6f956bdb3073 83 #define DES_ecb_encrypt wolfSSL_DES_ecb_encrypt
wolfSSL 3:6f956bdb3073 84 #define DES_ede3_cbc_encrypt(input, output, sz, ks1, ks2, ks3, ivec, enc) \
wolfSSL 3:6f956bdb3073 85 do { \
wolfSSL 3:6f956bdb3073 86 Des3 des; \
wolfSSL 3:6f956bdb3073 87 byte key[24];/* EDE uses 24 size key */ \
wolfSSL 3:6f956bdb3073 88 memcpy(key, (ks1), DES_BLOCK_SIZE); \
wolfSSL 3:6f956bdb3073 89 memcpy(&key[DES_BLOCK_SIZE], (ks2), DES_BLOCK_SIZE); \
wolfSSL 3:6f956bdb3073 90 memcpy(&key[DES_BLOCK_SIZE * 2], (ks3), DES_BLOCK_SIZE); \
wolfSSL 3:6f956bdb3073 91 if (enc) { \
wolfSSL 3:6f956bdb3073 92 wc_Des3_SetKey(&des, key, (const byte*)(ivec), DES_ENCRYPTION); \
wolfSSL 3:6f956bdb3073 93 wc_Des3_CbcEncrypt(&des, (output), (input), (sz)); \
wolfSSL 3:6f956bdb3073 94 } \
wolfSSL 3:6f956bdb3073 95 else { \
wolfSSL 3:6f956bdb3073 96 wc_Des3_SetKey(&des, key, (const byte*)(ivec), DES_ENCRYPTION); \
wolfSSL 3:6f956bdb3073 97 wc_Des3_CbcDecrypt(&des, (output), (input), (sz)); \
wolfSSL 3:6f956bdb3073 98 } \
wolfSSL 3:6f956bdb3073 99 } while(0)
wolfSSL 3:6f956bdb3073 100
wolfSSL 3:6f956bdb3073 101 #ifdef __cplusplus
wolfSSL 3:6f956bdb3073 102 } /* extern "C" */
wolfSSL 3:6f956bdb3073 103 #endif
wolfSSL 3:6f956bdb3073 104
wolfSSL 3:6f956bdb3073 105 #endif /* NO_DES3 */
wolfSSL 3:6f956bdb3073 106
wolfSSL 3:6f956bdb3073 107 #endif /* WOLFSSL_DES_H_ */
wolfSSL 3:6f956bdb3073 108