A simple library to support serving https.
Dependents: oldheating gps motorhome heating
tls/tls-connection.h@10:e269fd7b9500, 2019-09-24 (annotated)
- 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?
User | Revision | Line number | New 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); |