#ifndef _SSLUTILS_H_
#define _SSLUTILS_H_ 1
#include "SecureTransport.h"
#include "sslPriv.h"
#ifdef __cplusplus
extern "C" {
#endif
uint32_t SSLDecodeInt(
const uint8_t * p,
size_t length);
uint8_t *SSLEncodeInt(
uint8_t *p,
uint32_t value,
size_t length);
size_t SSLDecodeSize(
const uint8_t * p,
size_t length);
uint8_t *SSLEncodeSize(
uint8_t *p,
size_t value,
size_t length);
uint8_t* SSLEncodeUInt64(
uint8_t *p,
sslUint64 value);
void IncrementUInt64(
sslUint64 *v);
#if ENABLE_DTLS
void SSLDecodeUInt64(
const uint8_t *p,
size_t length,
sslUint64 *v);
#endif
static inline
int SSLHandshakeHeaderSize(SSLRecord *rec)
{
if(rec->protocolVersion==DTLS_Version_1_0)
return 12;
else
return 4;
}
uint8_t *SSLEncodeHandshakeHeader(
SSLContext *ctx,
SSLRecord *rec,
SSLHandshakeType type,
size_t msglen);
#ifdef USE_SSLCERTIFICATE
size_t SSLGetCertificateChainLength(
const SSLCertificate *c);
OSStatus sslDeleteCertificateChain(
SSLCertificate *certs,
SSLContext *ctx);
#endif
Boolean sslIsSessionActive(
const SSLContext *ctx);
OSStatus sslTime(
uint32_t *tim);
#if SSL_DEBUG
extern const char *protocolVersStr(
SSLProtocolVersion prot);
#endif
OSStatus sslIoRead(
SSLBuffer buf,
size_t *actualLength,
SSLContext *ctx);
OSStatus sslIoWrite(
SSLBuffer buf,
size_t *actualLength,
SSLContext *ctx);
OSStatus sslRand(
SSLContext *ctx,
SSLBuffer *buf);
OSStatus sslVerifyProtVersion(
SSLContext *ctx,
SSLProtocolVersion peerVersion,
SSLProtocolVersion *negVersion);
OSStatus sslGetMaxProtVersion(
SSLContext *ctx,
SSLProtocolVersion *version);
static inline bool sslVersionIsLikeTls12(SSLContext *ctx)
{
assert(ctx->negProtocolVersion!=SSL_Version_Undetermined);
return ctx->isDTLS ? ctx->negProtocolVersion > DTLS_Version_1_0 : ctx->negProtocolVersion >= TLS_Version_1_2;
}
#define SET_SSL_BUFFER(buf, d, l) do { (buf).data = (d); (buf).length = (l); } while (0)
#ifdef __cplusplus
}
#endif
#endif