blob: d487f3810ef2874256736289041dfe496438d259 [file] [log] [blame]
Denys Vlasenko11d00962017-01-15 00:12:42 +01001/*
2 * Copyright (C) 2017 Denys Vlasenko
3 *
4 * Licensed under GPLv2, see file LICENSE in this source tree.
5 */
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +01006/* Interface glue between bbox code and minimally tweaked matrixssl
7 * code. All C files (matrixssl and bbox (ones which need TLS))
8 * include this file, and guaranteed to see a consistent API,
9 * defines, types, etc.
10 */
Denys Vlasenko11d00962017-01-15 00:12:42 +010011#include "libbb.h"
12
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010013
14/* Config tweaks */
15#define HAVE_NATIVE_INT64
Denys Vlasenko11d00962017-01-15 00:12:42 +010016#undef USE_1024_KEY_SPEED_OPTIMIZATIONS
17#undef USE_2048_KEY_SPEED_OPTIMIZATIONS
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010018#define USE_AES
19#undef USE_AES_CBC_EXTERNAL
20#undef USE_AES_CCM
21#undef USE_AES_GCM
22#undef USE_3DES
23#undef USE_ARC4
24#undef USE_IDEA
25#undef USE_RC2
26#undef USE_SEED
27/* pstm: multiprecision numbers */
28#undef DISABLE_PSTM
29#if defined(__GNUC__) && defined(__i386__)
Denys Vlasenko432f1ae2017-01-19 16:32:38 +010030 /* PSTM_X86 works correctly. +25 bytes. */
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010031# define PSTM_32BIT
32# define PSTM_X86
33#endif
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010034//#if defined(__GNUC__) && defined(__x86_64__)
Denys Vlasenko432f1ae2017-01-19 16:32:38 +010035// /* PSTM_X86_64 works correctly, but +782 bytes. */
36// /* Looks like most of the growth is because of PSTM_64BIT. */
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010037//# define PSTM_64BIT
38//# define PSTM_X86_64
39//#endif
40//#if SOME_COND #define PSTM_MIPS, #define PSTM_32BIT
41//#if SOME_COND #define PSTM_ARM, #define PSTM_32BIT
Denys Vlasenko11d00962017-01-15 00:12:42 +010042
43
44#define PS_SUCCESS 0
45#define PS_FAILURE -1
46#define PS_ARG_FAIL -6 /* Failure due to bad function param */
47#define PS_PLATFORM_FAIL -7 /* Failure as a result of system call error */
48#define PS_MEM_FAIL -8 /* Failure to allocate requested memory */
49#define PS_LIMIT_FAIL -9 /* Failure on sanity/limit tests */
50
51#define PS_TRUE 1
52#define PS_FALSE 0
53
54#if BB_BIG_ENDIAN
55# define ENDIAN_BIG 1
56# undef ENDIAN_LITTLE
57//#???? ENDIAN_32BITWORD
58// controls only STORE32L, which we don't use
59#else
60# define ENDIAN_LITTLE 1
61# undef ENDIAN_BIG
62#endif
63
64typedef uint64_t uint64;
65typedef int64_t int64;
66typedef uint32_t uint32;
67typedef int32_t int32;
68typedef uint16_t uint16;
69typedef int16_t int16;
70
Denys Vlasenko6b1b0042017-01-19 15:51:00 +010071//typedef char psPool_t;
Denys Vlasenko11d00962017-01-15 00:12:42 +010072
73//#ifdef PS_PUBKEY_OPTIMIZE_FOR_SMALLER_RAM
74#define PS_EXPTMOD_WINSIZE 3
75//#ifdef PS_PUBKEY_OPTIMIZE_FOR_FASTER_SPEED
76//#define PS_EXPTMOD_WINSIZE 5
77
78#define PUBKEY_TYPE 0x01
79#define PRIVKEY_TYPE 0x02
80
81void tls_get_random(void *buf, unsigned len);
82
83#define matrixCryptoGetPrngData(buf, len, userPtr) (tls_get_random(buf, len), PS_SUCCESS)
84
85#define psFree(p, pool) free(p)
Denys Vlasenko936e83e2017-01-16 04:25:01 +010086#define psTraceCrypto(...) bb_error_msg_and_die(__VA_ARGS__)
Denys Vlasenko11d00962017-01-15 00:12:42 +010087
88/* Secure zerofill */
89#define memset_s(A,B,C,D) memset((A),(C),(D))
90/* Constant time memory comparison */
91#define memcmpct(s1, s2, len) memcmp((s1), (s2), (len))
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010092#undef min
Denys Vlasenko11d00962017-01-15 00:12:42 +010093#define min(x, y) ((x) < (y) ? (x) : (y))
94
95
96#include "tls_pstm.h"
97#include "tls_rsa.h"
Denys Vlasenkob7e9ae62017-01-18 17:20:27 +010098#include "tls_symmetric.h"
99#include "tls_aes.h"