#include "sslUtils.h"
#include "sslTypes.h"
#include "sslDebug.h"
#include <AssertMacros.h>
#ifndef NDEBUG
void SSLDump(const unsigned char *data, unsigned long len)
{
unsigned long i;
for(i=0;i<len;i++)
{
if((i&0xf)==0) printf("%04lx :",i);
printf(" %02x", data[i]);
if((i&0xf)==0xf) printf("\n");
}
printf("\n");
}
#endif
unsigned int
SSLDecodeInt(const uint8_t *p, size_t length)
{
unsigned int val = 0;
check(length > 0 && length <= 4); while (length--)
val = (val << 8) | *p++;
return val;
}
uint8_t *
SSLEncodeInt(uint8_t *p, size_t value, size_t length)
{
unsigned char *retVal = p + length;
check(length > 0 && length <= 4); while (length--)
{ p[length] = (uint8_t)value;
value >>= 8;
}
return retVal;
}
size_t
SSLDecodeSize(const uint8_t *p, size_t length)
{
unsigned int val = 0;
check(length > 0 && length <= 4); while (length--)
val = (val << 8) | *p++;
return val;
}
uint8_t *
SSLEncodeSize(uint8_t *p, size_t value, size_t length)
{
unsigned char *retVal = p + length;
check(length > 0 && length <= 4); while (length--)
{ p[length] = (uint8_t)value;
value >>= 8;
}
return retVal;
}
uint8_t *
SSLEncodeUInt64(uint8_t *p, uint64_t value)
{
p = SSLEncodeInt(p, (value>>32)&0xffffffff, 4);
return SSLEncodeInt(p, value&0xffffffff, 4);
}
void
IncrementUInt64(sslUint64 *v)
{
(*v)++;
}
void
SSLDecodeUInt64(const uint8_t *p, size_t length, uint64_t *v)
{
check(length > 0 && length <= 8);
if(length<=4) {
*v=SSLDecodeInt(p, length);
} else {
*v=((uint64_t)SSLDecodeInt(p, length-4))<<32 | SSLDecodeInt(p+length-4, 4);
}
}
#if SSL_DEBUG
const char *protocolVersStr(SSLProtocolVersion prot)
{
switch(prot) {
case SSL_Version_Undetermined: return "SSL_Version_Undetermined";
case SSL_Version_2_0: return "SSL_Version_2_0";
case SSL_Version_3_0: return "SSL_Version_3_0";
case TLS_Version_1_0: return "TLS_Version_1_0";
case TLS_Version_1_1: return "TLS_Version_1_1";
case TLS_Version_1_2: return "TLS_Version_1_2";
default: sslErrorLog("protocolVersStr: bad prot\n"); return "BAD PROTOCOL";
}
return NULL;
}
#endif