A simple library to support serving https.

Dependents:   oldheating gps motorhome heating

Committer:
andrewboyson
Date:
Thu Oct 10 07:38:13 2019 +0000
Revision:
17:93feb2a51d58
Parent:
14:03a0b8fd6ddc
Child:
19:f22327e8be7b
Defined a lot of lengths eg 20 -> SHA1_HASH_LENGTH

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 6:819c17738dc2 1 #include <stdbool.h>
andrewboyson 6:819c17738dc2 2 #include <stdint.h>
andrewboyson 6:819c17738dc2 3
andrewboyson 17:93feb2a51d58 4 #include "tls-defs.h"
andrewboyson 5:ee5489ee1117 5 #include "sha256.h"
andrewboyson 5:ee5489ee1117 6
andrewboyson 5:ee5489ee1117 7 #define DO_WAIT_CLIENT_HELLO 0
andrewboyson 14:03a0b8fd6ddc 8 #define DO_SEND_SERVER_HELLO_NEW 1
andrewboyson 14:03a0b8fd6ddc 9 #define DO_SEND_SERVER_HELLO_RESUME 2
andrewboyson 14:03a0b8fd6ddc 10 #define DO_WAIT_CLIENT_CHANGE 3
andrewboyson 14:03a0b8fd6ddc 11 #define DO_WAIT_DECRYPT_MASTER_SECRET 4
andrewboyson 14:03a0b8fd6ddc 12 #define DO_SEND_SERVER_CHANGE 5
andrewboyson 14:03a0b8fd6ddc 13 #define DO_APPLICATION 6
andrewboyson 14:03a0b8fd6ddc 14 #define DO_SEND_ALERT_ILLEGAL_PARAMETER 7
andrewboyson 14:03a0b8fd6ddc 15 #define DO_SEND_ALERT_INTERNAL_ERROR 8
andrewboyson 5:ee5489ee1117 16
andrewboyson 8:5e66a6b4b38c 17 #define TLS_DEFERRED_CONTENT_SIZE 100
andrewboyson 6:819c17738dc2 18
andrewboyson 5:ee5489ee1117 19 struct TlsConnection
andrewboyson 5:ee5489ee1117 20 {
andrewboyson 5:ee5489ee1117 21 int id; //An id of zero means the record is empty
andrewboyson 5:ee5489ee1117 22 uint32_t lastUsed;
andrewboyson 5:ee5489ee1117 23 int toDo;
andrewboyson 10:e269fd7b9500 24 uint32_t sessionId;
andrewboyson 14:03a0b8fd6ddc 25 bool resume;
andrewboyson 8:5e66a6b4b38c 26 struct Sha256State handshakeSha;
andrewboyson 6:819c17738dc2 27 bool clientEncrypted;
andrewboyson 6:819c17738dc2 28 bool serverEncrypted;
andrewboyson 17:93feb2a51d58 29 uint8_t clientRandom[TLS_LENGTH_RANDOM];
andrewboyson 17:93feb2a51d58 30 uint8_t serverRandom[TLS_LENGTH_RANDOM];
andrewboyson 8:5e66a6b4b38c 31 uint8_t clientHandshakeHash[SHA256_HASH_SIZE];
andrewboyson 8:5e66a6b4b38c 32 uint8_t deferredContent[TLS_DEFERRED_CONTENT_SIZE];
andrewboyson 8:5e66a6b4b38c 33 uint64_t clientSequence;
andrewboyson 8:5e66a6b4b38c 34 uint64_t serverSequence;
andrewboyson 10:e269fd7b9500 35 uint32_t clientPositionInStreamOffset;
andrewboyson 10:e269fd7b9500 36 uint32_t serverPositionInStreamOffset;
andrewboyson 6:819c17738dc2 37
andrewboyson 14:03a0b8fd6ddc 38 int slotPriKeyDecryption;
andrewboyson 17:93feb2a51d58 39 uint8_t clientMacKey [TLS_LENGTH_MAC_KEY];
andrewboyson 17:93feb2a51d58 40 uint8_t serverMacKey [TLS_LENGTH_MAC_KEY];
andrewboyson 17:93feb2a51d58 41 uint8_t clientWriteKey[TLS_LENGTH_CIPHER_KEY];
andrewboyson 17:93feb2a51d58 42 uint8_t serverWriteKey[TLS_LENGTH_CIPHER_KEY];
andrewboyson 5:ee5489ee1117 43 };
andrewboyson 5:ee5489ee1117 44
andrewboyson 8:5e66a6b4b38c 45 extern struct TlsConnection* TlsConnectionGetNext(void);
andrewboyson 8:5e66a6b4b38c 46
andrewboyson 10:e269fd7b9500 47 extern struct TlsConnection* TlsConnectionNew (int id); //Never fails so never returns NULL
andrewboyson 10:e269fd7b9500 48 extern struct TlsConnection* TlsConnectionOrNull(int id);
andrewboyson 10:e269fd7b9500 49 extern void TlsConnectionReset (int id);