#include "lib.h" #include "utf.h" #include "polarssl/base64.h" // Memory void endian_memcpy(u8 *destination, u8 *source, u32 size, int endianness) { for (u32 i = 0; i < size; i++){ switch (endianness){ case(BE): destination[i] = source[i]; break; case(LE): destination[i] = source[((size-1)-i)]; break; } } } int CopyData(u8 **dest, u8 *source, u64 size) { if(!*dest){ *dest = malloc(size); if(!*dest) return -1; } memcpy(*dest,source,size); return 0; } void rndset(void *ptr, u64 num) { u8 *tmp = (u8*)ptr; for(u64 i = 0; i < num ; i++) tmp[i] = u8GetRand(); } void clrmem(void *ptr, u64 num) { memset(ptr,0,num); } // Misc u64 align(u64 value, u64 alignment) { if(value % alignment != 0) return value + alignment - value % alignment; else return value; } u64 min64(u64 a, u64 b) { if(a < b) return a; return b; } u64 max64(u64 a, u64 b) { if(a > b) return a; return b; } // Strings int append_filextention(char *output, u16 max_outlen, char *input, char extention[]) { if(output == NULL || input == NULL){ printf("[!] Memory Error\n"); return Fail; } memset(output,0,max_outlen); u16 extention_point = strlen(input)+1; for(int i = strlen(input)-1; i > 0; i--){ if(input[i] == '.'){ extention_point = i; break; } } if(extention_point+strlen(extention) >= max_outlen){ printf("[!] Input File Name Too Large for Output buffer\n"); return Fail; } memcpy(output,input,extention_point); sprintf(output,"%s%s",output,extention); return 0; } void memdump(FILE* fout, const char* prefix, const u8* data, u32 size) { u32 i; u32 prefixlen = strlen(prefix); u32 offs = 0; u32 line = 0; while(size) { u32 max = 32; if (max > size) max = size; if (line==0) fprintf(fout, "%s", prefix); else fprintf(fout, "%*s", prefixlen, ""); for(i=0; i