From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- cryptopp/base16.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 cryptopp/base16.cpp (limited to 'cryptopp/base16.cpp') diff --git a/cryptopp/base16.cpp b/cryptopp/base16.cpp new file mode 100644 index 0000000..b8c813e --- /dev/null +++ b/cryptopp/base16.cpp @@ -0,0 +1,64 @@ +#include "commonheaders.h" + + +char *base16encode(const char *inBuffer, int count) { + + char *outBuffer = (char *) malloc(count*2+1); + char *outBufferPtr = outBuffer; + BYTE *inBufferPtr = (BYTE *) inBuffer; + + while(count){ + *outBufferPtr++ = encode16(((*inBufferPtr)>>4)&0x0F); + *outBufferPtr++ = encode16((*inBufferPtr++)&0x0F); + count--; + } + *outBufferPtr = '\0'; + + return outBuffer; +} + + +char *base16decode(const char *inBuffer, int *count) { + + char *outBuffer = (char *) malloc(*count); + BYTE *outBufferPtr = (BYTE *) outBuffer; + bool big_endian = false; + + if(*inBuffer == '0' && *(inBuffer+1) == 'x') { + inBuffer += *count; + big_endian = true; + *count -= 2; + } + while(*count>1){ + BYTE c0,c1; + if(big_endian) { + c1 = decode16(*--inBuffer); + c0 = decode16(*--inBuffer); + } + else { + c0 = decode16(*inBuffer++); + c1 = decode16(*inBuffer++); + } + if((c0 | c1) == BERR) { + free(outBuffer); + *count = 0; + return(NULL); + } + *outBufferPtr++ = (c0<<4) | c1; + *count -= 2; + } + *outBufferPtr = '\0'; + *count = (int)(outBufferPtr-(BYTE *)outBuffer); + + return outBuffer; +} + + +char *base16decode(const char *inBuffer) { + + int count = (int)strlen(inBuffer); + return base16decode(inBuffer, &count); +} + + +// EOF -- cgit v1.2.3