Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | /* * Copyright (C) 2017 Denys Vlasenko * * Licensed under GPLv2, see file LICENSE in this source tree. */ /* Interface glue between bbox code and minimally tweaked matrixssl * code. All C files (matrixssl and bbox (ones which need TLS)) * include this file, and guaranteed to see a consistent API, * defines, types, etc. */ #include "libbb.h" /* Config tweaks */ #define HAVE_NATIVE_INT64 #undef USE_1024_KEY_SPEED_OPTIMIZATIONS #undef USE_2048_KEY_SPEED_OPTIMIZATIONS #define USE_AES #undef USE_AES_CBC_EXTERNAL #undef USE_AES_CCM #undef USE_AES_GCM #undef USE_3DES #undef USE_ARC4 #undef USE_IDEA #undef USE_RC2 #undef USE_SEED /* pstm: multiprecision numbers */ #undef DISABLE_PSTM #if defined(__GNUC__) && defined(__i386__) /* PSTM_X86 works correctly. +25 bytes. */ # define PSTM_32BIT # define PSTM_X86 #endif //#if defined(__GNUC__) && defined(__x86_64__) // /* PSTM_X86_64 works correctly, but +782 bytes. */ // /* Looks like most of the growth is because of PSTM_64BIT. */ //# define PSTM_64BIT //# define PSTM_X86_64 //#endif //#if SOME_COND #define PSTM_MIPS, #define PSTM_32BIT //#if SOME_COND #define PSTM_ARM, #define PSTM_32BIT #define PS_SUCCESS 0 #define PS_FAILURE -1 #define PS_ARG_FAIL -6 /* Failure due to bad function param */ #define PS_PLATFORM_FAIL -7 /* Failure as a result of system call error */ #define PS_MEM_FAIL -8 /* Failure to allocate requested memory */ #define PS_LIMIT_FAIL -9 /* Failure on sanity/limit tests */ #define PS_TRUE 1 #define PS_FALSE 0 #if BB_BIG_ENDIAN # define ENDIAN_BIG 1 # undef ENDIAN_LITTLE //#???? ENDIAN_32BITWORD // controls only STORE32L, which we don't use #else # define ENDIAN_LITTLE 1 # undef ENDIAN_BIG #endif typedef uint64_t uint64; typedef int64_t int64; typedef uint32_t uint32; typedef int32_t int32; typedef uint16_t uint16; typedef int16_t int16; //typedef char psPool_t; //#ifdef PS_PUBKEY_OPTIMIZE_FOR_SMALLER_RAM #define PS_EXPTMOD_WINSIZE 3 //#ifdef PS_PUBKEY_OPTIMIZE_FOR_FASTER_SPEED //#define PS_EXPTMOD_WINSIZE 5 #define PUBKEY_TYPE 0x01 #define PRIVKEY_TYPE 0x02 #define AES_BLOCK_SIZE 16 void tls_get_random(void *buf, unsigned len) FAST_FUNC; void xorbuf(void* buf, const void* mask, unsigned count) FAST_FUNC; #define ALIGNED_long ALIGNED(sizeof(long)) void xorbuf_aligned_AES_BLOCK_SIZE(void* buf, const void* mask) FAST_FUNC; #define matrixCryptoGetPrngData(buf, len, userPtr) (tls_get_random(buf, len), PS_SUCCESS) #define psFree(p, pool) free(p) #define psTraceCrypto(msg) bb_simple_error_msg_and_die(msg) /* Secure zerofill */ #define memset_s(A,B,C,D) memset((A),(C),(D)) /* Constant time memory comparison */ #define memcmpct(s1, s2, len) memcmp((s1), (s2), (len)) #undef min #define min(x, y) ((x) < (y) ? (x) : (y)) #include "tls_pstm.h" #include "tls_aes.h" #include "tls_aesgcm.h" #include "tls_rsa.h" #define EC_CURVE_KEYSIZE 32 #define P256_KEYSIZE 32 #define CURVE25519_KEYSIZE 32 void curve_x25519_compute_pubkey_and_premaster( uint8_t *pubkey32, uint8_t *premaster32, const uint8_t *peerkey32) FAST_FUNC; void curve_P256_compute_pubkey_and_premaster( uint8_t *pubkey2x32, uint8_t *premaster32, const uint8_t *peerkey2x32) FAST_FUNC; void curve_P256_compute_pubkey_and_premaster_NEW( uint8_t *pubkey2x32, uint8_t *premaster32, const uint8_t *peerkey2x32) FAST_FUNC; |