A simple library to support serving https.

Dependents:   oldheating gps motorhome heating

tls/tls-connection.h

Committer:
andrewboyson
Date:
2019-09-01
Revision:
6:819c17738dc2
Parent:
5:ee5489ee1117
Child:
7:94ef5824c3c0

File content as of revision 6:819c17738dc2:

#include <stdbool.h>
#include <stdint.h>

#include "sha256.h"

#define DO_WAIT_CLIENT_HELLO                0
#define DO_SEND_SERVER_HELLO                1
#define DO_WAIT_CLIENT_CHANGE               2
#define DO_WAIT_DECRYPT_MASTER_SECRET       3
#define DO_SEND_SERVER_CHANGE               4
#define DO_APPLICATION                      5
#define DO_SEND_ALERT_ILLEGAL_PARAMETER     6
#define DO_SEND_ALERT_INTERNAL_ERROR        7

#define TLS_RANDOM_SIZE 32
#define TLS_VERIFY_SIZE 64

#define TLS_KEY_SIZE_MAC    20
#define TLS_KEY_SIZE_WRITE  16

struct TlsConnection
{
    int                id; //An id of zero means the record is empty
    uint32_t           lastUsed;
    int                toDo;
    int                session;
    struct Sha256State handshakeHash;
    bool               clientEncrypted;
    bool               serverEncrypted;
    uint8_t            clientRandom[TLS_RANDOM_SIZE];
    uint8_t            serverRandom[TLS_RANDOM_SIZE];
    uint8_t            clientVerify[TLS_VERIFY_SIZE];
    
    uint8_t             clientMacKey  [TLS_KEY_SIZE_MAC   ];
    uint8_t             serverMacKey  [TLS_KEY_SIZE_MAC   ];
    uint8_t             clientWriteKey[TLS_KEY_SIZE_WRITE ];
    uint8_t             serverWriteKey[TLS_KEY_SIZE_WRITE ];    
};

extern struct TlsConnection* TlsConnectionNew   (int connectionId); //Never fails so never returns NULL
extern struct TlsConnection* TlsConnectionOrNull(int connectionId);
extern void                  TlsConnectionReset (int connectionId);