forked from wolfSSL/wolfssl
add macpi huffman
This commit is contained in:
47
configure.ac
47
configure.ac
@ -1022,26 +1022,6 @@ fi
|
|||||||
AM_CONDITIONAL([USE_VALGRIND], [test "x$ENABLED_VALGRIND" = "xyes"])
|
AM_CONDITIONAL([USE_VALGRIND], [test "x$ENABLED_VALGRIND" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# microchip api
|
|
||||||
AC_ARG_ENABLE([mcapi],
|
|
||||||
[ --enable-mcapi Enable Microchip API (default: disabled)],
|
|
||||||
[ ENABLED_MCAPI=$enableval ],
|
|
||||||
[ ENABLED_MCAPI=no ]
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$ENABLED_MCAPI" = "yes"
|
|
||||||
then
|
|
||||||
AM_CFLAGS="$AM_CFLAGS -DHAVE_MCAPI"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$ENABLED_MCAPI" = "yes" && test "$ENABLED_SHA512" = "no"
|
|
||||||
then
|
|
||||||
AC_MSG_ERROR([please enable sha512 if enabling mcapi.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL([BUILD_MCAPI], [test "x$ENABLED_MCAPI" = "xyes"])
|
|
||||||
|
|
||||||
|
|
||||||
# Test certs, use internal cert functions for extra testing
|
# Test certs, use internal cert functions for extra testing
|
||||||
AC_ARG_ENABLE([testcert],
|
AC_ARG_ENABLE([testcert],
|
||||||
[ --enable-testcert Enable Test Cert (default: disabled)],
|
[ --enable-testcert Enable Test Cert (default: disabled)],
|
||||||
@ -1114,6 +1094,7 @@ AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$ENABLED_EXAMPLES" = "xyes"])
|
|||||||
|
|
||||||
|
|
||||||
# LIBZ
|
# LIBZ
|
||||||
|
ENABLED_LIBZ="no"
|
||||||
trylibzdir=""
|
trylibzdir=""
|
||||||
AC_ARG_WITH([libz],
|
AC_ARG_WITH([libz],
|
||||||
[ --with-libz=PATH PATH to libz install (default /usr/) ],
|
[ --with-libz=PATH PATH to libz install (default /usr/) ],
|
||||||
@ -1181,6 +1162,32 @@ AC_ARG_WITH([cavium],
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# microchip api
|
||||||
|
AC_ARG_ENABLE([mcapi],
|
||||||
|
[ --enable-mcapi Enable Microchip API (default: disabled)],
|
||||||
|
[ ENABLED_MCAPI=$enableval ],
|
||||||
|
[ ENABLED_MCAPI=no ]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$ENABLED_MCAPI" = "yes"
|
||||||
|
then
|
||||||
|
AM_CFLAGS="$AM_CFLAGS -DHAVE_MCAPI"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$ENABLED_MCAPI" = "yes" && test "$ENABLED_SHA512" = "no"
|
||||||
|
then
|
||||||
|
AC_MSG_ERROR([please enable sha512 if enabling mcapi.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$ENABLED_MCAPI" = "yes" && test "$ENABLED_LIBZ" = "no"
|
||||||
|
then
|
||||||
|
AC_MSG_ERROR([please use --with-libz if enabling mcapi.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([BUILD_MCAPI], [test "x$ENABLED_MCAPI" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# OPTIMIZE FLAGS
|
# OPTIMIZE FLAGS
|
||||||
if test "$GCC" = "yes"
|
if test "$GCC" = "yes"
|
||||||
then
|
then
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define COMPRESS_FIXED 4
|
#define COMPRESS_FIXED 1
|
||||||
|
|
||||||
|
|
||||||
CYASSL_API int Compress(byte*, word32, const byte*, word32, word32);
|
CYASSL_API int Compress(byte*, word32, const byte*, word32, word32);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include <cyassl/ctaocrypt/sha256.h>
|
#include <cyassl/ctaocrypt/sha256.h>
|
||||||
#include <cyassl/ctaocrypt/sha512.h>
|
#include <cyassl/ctaocrypt/sha512.h>
|
||||||
#include <cyassl/ctaocrypt/hmac.h>
|
#include <cyassl/ctaocrypt/hmac.h>
|
||||||
|
#include <cyassl/ctaocrypt/compress.h>
|
||||||
|
|
||||||
|
|
||||||
/* Initialize MD5 */
|
/* Initialize MD5 */
|
||||||
@ -224,3 +225,22 @@ int CRYPT_HMAC_Finalize(CRYPT_HMAC_CTX* hmac, unsigned char* digest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Huffman Compression, set flag to do static, otherwise dynamic */
|
||||||
|
/* return compressed size, otherwise < 0 for error */
|
||||||
|
int CRYPT_HUFFMAN_Compress(unsigned char* out, unsigned int outSz,
|
||||||
|
const unsigned char* in, unsigned int inSz,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
return Compress(out, outSz, in, inSz, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Huffman DeCompression, self determines type */
|
||||||
|
/* return decompressed size, otherwise < 0 for error */
|
||||||
|
int CRYPT_HUFFMAN_DeCompress(unsigned char* out, unsigned int outSz,
|
||||||
|
const unsigned char* in, unsigned int inSz)
|
||||||
|
{
|
||||||
|
return DeCompress(out, outSz, in, inSz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,6 +119,16 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Huffman */
|
||||||
|
int CRYPT_HUFFMAN_Compress(unsigned char*, unsigned int, const unsigned char*,
|
||||||
|
unsigned int, unsigned int);
|
||||||
|
int CRYPT_HUFFMAN_DeCompress(unsigned char*, unsigned int, const unsigned char*,
|
||||||
|
unsigned int);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
CRYPT_HUFFMAN_COMPRESS_STATIC = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
113
mcapi/test.c
113
mcapi/test.c
@ -33,6 +33,7 @@
|
|||||||
#include <cyassl/ctaocrypt/sha256.h>
|
#include <cyassl/ctaocrypt/sha256.h>
|
||||||
#include <cyassl/ctaocrypt/sha512.h>
|
#include <cyassl/ctaocrypt/sha512.h>
|
||||||
#include <cyassl/ctaocrypt/hmac.h>
|
#include <cyassl/ctaocrypt/hmac.h>
|
||||||
|
#include <cyassl/ctaocrypt/compress.h>
|
||||||
|
|
||||||
/* c stdlib headers */
|
/* c stdlib headers */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -48,6 +49,7 @@ static int check_sha256(void);
|
|||||||
static int check_sha384(void);
|
static int check_sha384(void);
|
||||||
static int check_sha512(void);
|
static int check_sha512(void);
|
||||||
static int check_hmac(void);
|
static int check_hmac(void);
|
||||||
|
static int check_compress(void);
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
@ -59,7 +61,7 @@ int main(int argc, char** argv)
|
|||||||
(void)argv;
|
(void)argv;
|
||||||
|
|
||||||
/* align key pointer */
|
/* align key pointer */
|
||||||
key = (byte*)malloc(128);
|
key = (byte*)XMALLOC(32, NULL, DYNAMIC_TYPE_KEY);
|
||||||
if (key == NULL) {
|
if (key == NULL) {
|
||||||
printf("mcapi key alloc failed\n");
|
printf("mcapi key alloc failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
@ -104,8 +106,16 @@ int main(int argc, char** argv)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = check_compress();
|
||||||
|
if (ret != 0) {
|
||||||
|
printf("mcapi check_comopress failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
XFREE(key, NULL, DYNAMIC_TYPE_KEY);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,3 +333,104 @@ static int check_hmac(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* check mcapi compress against internal */
|
||||||
|
static int check_compress(void)
|
||||||
|
{
|
||||||
|
const unsigned char text[] =
|
||||||
|
"Biodiesel cupidatat marfa, cliche aute put a bird on it incididunt elit\n"
|
||||||
|
"polaroid. Sunt tattooed bespoke reprehenderit. Sint twee organic id\n"
|
||||||
|
"marfa. Commodo veniam ad esse gastropub. 3 wolf moon sartorial vero,\n"
|
||||||
|
"plaid delectus biodiesel squid +1 vice. Post-ironic keffiyeh leggings\n"
|
||||||
|
"selfies cray fap hoodie, forage anim. Carles cupidatat shoreditch, VHS\n"
|
||||||
|
"small batch meggings kogi dolore food truck bespoke gastropub.\n"
|
||||||
|
"\n"
|
||||||
|
"Terry richardson adipisicing actually typewriter tumblr, twee whatever\n"
|
||||||
|
"four loko you probably haven't heard of them high life. Messenger bag\n"
|
||||||
|
"whatever tattooed deep v mlkshk. Brooklyn pinterest assumenda chillwave\n"
|
||||||
|
"et, banksy ullamco messenger bag umami pariatur direct trade forage.\n"
|
||||||
|
"Typewriter culpa try-hard, pariatur sint brooklyn meggings. Gentrify\n"
|
||||||
|
"food truck next level, tousled irony non semiotics PBR ethical anim cred\n"
|
||||||
|
"readymade. Mumblecore brunch lomo odd future, portland organic terry\n"
|
||||||
|
"four loko whatever street art yr farm-to-table.\n";
|
||||||
|
|
||||||
|
unsigned int inSz = sizeof(text);
|
||||||
|
unsigned int outSz;
|
||||||
|
unsigned char cBuffer[1024];
|
||||||
|
unsigned char dBuffer[1024];
|
||||||
|
|
||||||
|
int ret1, ret2;
|
||||||
|
|
||||||
|
/* dynamic */
|
||||||
|
ret1 = CRYPT_HUFFMAN_Compress(cBuffer, sizeof(cBuffer), text, inSz, 0);
|
||||||
|
ret2 = Compress(dBuffer, sizeof(dBuffer), text, inSz, 0);
|
||||||
|
|
||||||
|
if (ret1 != ret2 || ret1 < 0) {
|
||||||
|
printf("compress dynamic ret failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memcmp(cBuffer, dBuffer, ret1) != 0) {
|
||||||
|
printf("compress dynamic cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
outSz = ret1;
|
||||||
|
|
||||||
|
ret1 = CRYPT_HUFFMAN_DeCompress(dBuffer, sizeof(dBuffer), cBuffer, outSz);
|
||||||
|
|
||||||
|
if (memcmp(dBuffer, text, inSz) != 0) {
|
||||||
|
printf("mcapi decompress dynamic cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(dBuffer, 0, sizeof(dBuffer));
|
||||||
|
|
||||||
|
ret1 = DeCompress(dBuffer, sizeof(dBuffer), cBuffer, outSz);
|
||||||
|
|
||||||
|
if (memcmp(dBuffer, text, inSz) != 0) {
|
||||||
|
printf("decompress dynamic cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(cBuffer, 0, sizeof(cBuffer));
|
||||||
|
memset(dBuffer, 0, sizeof(dBuffer));
|
||||||
|
|
||||||
|
/* static */
|
||||||
|
ret1 = CRYPT_HUFFMAN_Compress(cBuffer, sizeof(cBuffer), text, inSz, 1);
|
||||||
|
ret2 = Compress(dBuffer, sizeof(dBuffer), text, inSz, 1);
|
||||||
|
|
||||||
|
if (ret1 != ret2 || ret1 < 0) {
|
||||||
|
printf("compress static ret failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memcmp(cBuffer, dBuffer, ret1) != 0) {
|
||||||
|
printf("compress static cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
outSz = ret1;
|
||||||
|
|
||||||
|
ret1 = CRYPT_HUFFMAN_DeCompress(dBuffer, sizeof(dBuffer), cBuffer, outSz);
|
||||||
|
|
||||||
|
if (memcmp(dBuffer, text, inSz) != 0) {
|
||||||
|
printf("mcapi decompress static cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(dBuffer, 0, sizeof(dBuffer));
|
||||||
|
|
||||||
|
ret1 = DeCompress(dBuffer, sizeof(dBuffer), cBuffer, outSz);
|
||||||
|
|
||||||
|
if (memcmp(dBuffer, text, inSz) != 0) {
|
||||||
|
printf("decompress static cmp failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("huffman mcapi test passed\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user