| | |
| | | //test decoding and decompression |
| | | char *test_data = ts_decompress((unsigned char *)return_value, nbase1+nbase2, data_len); |
| | | free(test_data); |
| | | fprintf(stderr,"WAS HERE!\n"); |
| | | return return_value; |
| | | } |
| | | |
| | |
| | | if(header==NULL) fprintf(stderr, "Error decoding header\n"); |
| | | fprintf(stderr,"Header=%d, %d, %d, %d\n", header[0],header[1], header[2], header[3]); |
| | | unsigned char *decoded_data=base64_decode((const char *)&compressed_data[encoded_header_len], data_len-encoded_header_len, &nbase1); |
| | | if(decoded_data==NULL) fprintf(stderr, "Error decoding compressed data\n"); |
| | | unsigned char *return_value=(unsigned char *)malloc(result_len*sizeof(char)); |
| | | uncompress(return_value, (unsigned long *)&result_len, decoded_data, header[3]); |
| | | // fprintf(stderr,"RESULT_LEN=%d\n",result_len); |
| | | free(decoded_data); |
| | | free(header); |
| | | return (char *)return_value; |
| | |
| | | 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', |
| | | 'w', 'x', 'y', 'z', '0', '1', '2', '3', |
| | | '4', '5', '6', '7', '8', '9', '+', '/'}; |
| | | static char *decoding_table = NULL; |
| | | static int mod_table[] = {0, 2, 1}; |
| | | |
| | | |
| | |
| | | |
| | | unsigned char *base64_decode(const char *data, size_t input_length, size_t *output_length) { |
| | | int i,j; |
| | | if (decoding_table == NULL) build_decoding_table(); |
| | | char *decoding_table = build_decoding_table(); |
| | | |
| | | if (input_length % 4 != 0) return NULL; |
| | | |
| | |
| | | if (j < *output_length) decoded_data[j++] = (triple >> 1 * 8) & 0xFF; |
| | | if (j < *output_length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF; |
| | | } |
| | | if(decoding_table !=NULL) free(decoding_table); |
| | | free(decoding_table); |
| | | return decoded_data; |
| | | } |
| | | |
| | | |
| | | void build_decoding_table() { |
| | | |
| | | decoding_table = malloc(256); |
| | | char *build_decoding_table() { |
| | | char *decoding_table = malloc(256); |
| | | int i; |
| | | for (i = 0; i < 64; i++) |
| | | decoding_table[(unsigned char) encoding_table[i]] = i; |
| | | return decoding_table; |
| | | } |
| | | |
| | | |
| | | void base64_cleanup() { |
| | | free(decoding_table); |
| | | } |
| | | |
| | | |
| | | |