A simple library to support serving https.

Dependents:   oldheating gps motorhome heating

Committer:
andrewboyson
Date:
Tue Sep 24 18:11:02 2019 +0000
Revision:
10:e269fd7b9500
Parent:
8:5e66a6b4b38c
Child:
14:03a0b8fd6ddc
Got padlock and some application data through. Now need to use China remainder theorem to speed up decryption and things up and the session id to avoid having to do the decryption.

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