MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h
2024-04-15 11:53:30 +02:00

171 lines
6.0 KiB
C

/**
* @file tls_client_recv.h
* @author Mike Scott
* @brief Process Input received from the Server
*
*/
// Process input received from Server
#ifndef TLS_CLIENT_RECV_H
#define TLS_CLIENT_RECV_H
#include "tls_sal.h"
#include "tls1_3.h"
#include "tls_sockets.h"
#include "tls_keys_calc.h"
#include "tls_client_send.h"
/** @brief Parse out an octad from a pointer into an octad
*
@param E the output octad copied out from the octad M
@param len the expected length of the output octad E
@param M the input octad
@param ptr a pointer into M, which advances after use
@return the actual length of E extracted, and an error flag
*/
extern ret parseoctad(octad *E,int len,octad *M,int &ptr);
/** @brief Parse out byte array from a pointer into an octad
*
@param e the output byte array copied out from the octad M
@param len the expected length of e
@param M the input octad
@param ptr a pointer into M, which advances after use
@return the actual length of e extracted, and an error flag
*/
extern ret parsebytes(char *e,int len,octad *M,int &ptr);
/** @brief Parse out an unsigned integer from a pointer into an octad
*
@param M the input octad
@param len the number of bytes in integer
@param ptr a pointer into M, which advances after use
@return the integer value, and an error flag
*/
extern ret parseInt(octad *M,int len,int &ptr);
/** @brief Return a pointer to an octad from a pointer into an octad
*
@param E a pointer to an octad contained within an octad M
@param len the expected length of the octad E
@param M the input octad
@param ptr a pointer into M, which advances after use
@return the actual length of E, and an error flag
*/
extern ret parseoctadptr(octad *E,int len,octad *M,int &ptr);
/** @brief Read a record from the Server, a fragment of a full protocol message
*
@param session the TLS session structure
@return a positive indication of the record type, or a negative error return
*/
extern int getServerRecord(TLS_session *session);
/** @brief Parse out an unsigned integer from a pointer into an octad, if necessary pulling in a new fragment
*
@param session the TLS session structure
@param len the number of bytes in integer
@return the unsigned integer, and an error flag
*/
extern ret parseIntorPull(TLS_session *session,int len);
/** @brief Parse out an octad from a pointer into an octad, if necessary pulling in a new fragment
*
@param session the TLS session structure
@param O the output octad
@param len the expected length of the output octad O
@return the actual length of O extracted, and an error flag
*/
extern ret parseoctadorPull(TLS_session *session,octad *O,int len);
/** @brief Parse out a byte array from a pointer into an octad, if necessary pulling in a new fragment
*
@param session the TLS session structure
@param o the output bytes
@param len the expected length of the output
@return the actual length of o extracted, and an error flag
*/
extern ret parsebytesorPull(TLS_session *session,char *o,int len);
/** @brief Return a pointer to an octad from a pointer into an octad, if necessary pulling in a new fragment
*
@param session the TLS session structure
@param O a pointer to an octad contained within an octad IO
@param len the expected length of the octad O
@return the actual length of O extracted, and an error flag
*/
extern ret parseoctadorPullptrX(TLS_session *session,octad *O,int len);
/** @brief Process response from server input
*
@param session the TLS1.3 session structure
@param r return value to be processed
@return true, if its a bad response requiring an abort
*/
extern bool badResponse(TLS_session *session,ret r);
/** @brief Identify type of incoming message
*
@param session the TLS session structure
@return negative error, zero for OK, or positive for message type
*/
extern ret seeWhatsNext(TLS_session *session);
/** @brief Receive and parse Server Encrypted Extensions
*
@param session the TLS session structure
@param enc_ext_expt ext structure containing server expectations
@param enc_ext_resp ext structure containing server responses
@return response structure
*/
extern ret getServerEncryptedExtensions(TLS_session *session,ee_status *enc_ext_expt,ee_status *enc_ext_resp);
/** @brief Get Server proof that he owns the Certificate, by receiving and verifying its signature on transcript hash
*
@param session the TLS session structure
@param SCVSIG the received signature on the transcript hash
@param sigalg the type of the received signature
@return response structure
*/
extern ret getServerCertVerify(TLS_session *session,octad *SCVSIG,int &sigalg);
/** @brief Get final handshake message from Server, a HMAC on the transcript hash
*
@param session the TLS session structure
@param HFIN an octad containing HMAC on transcript as calculated by Server
@return response structure
*/
extern ret getServerFinished(TLS_session *session,octad *HFIN);
/** @brief Receive and parse initial Server Hello
*
@param session the TLS session structure
@param kex key exchange data
@param CK an output Cookie
@param PK the key exchange public value supplied by the Server
@param pskid indicates if a pre-shared key was accepted, otherwise -1
@return response structure
*/
extern ret getServerHello(TLS_session *session,/*int &cipher,*/int &kex,octad *CK,octad *PK,int &pskid);
/** @brief Receive and check certificate chain
*
@param session the TLS session structure
@param PUBKEY the public key extracted from the Server certificate
@param SIG signature (supplied as workspace)
@return response structure
*/
extern ret getCheckServerCertificateChain(TLS_session *session,octad *PUBKEY,octad *SIG);
/** @brief process a Certificate Request
*
@param session the TLS session structure
@param context true if expecting a context
@return response structure
*/
extern ret getCertificateRequest(TLS_session *session,bool context);
#endif