static void do_cipher(char* pw, int operation) { long ebuflen; unsigned char buf[U_BUFLEN]; unsigned char ebuf[U_BUFLEN + 8]; U_INTERNAL_TRACE("do_cipher(%s,%p)", pw, operation) # ifdef __MINGW32__ (void) setmode(1, O_BINARY); # endif while (true) { int readlen = read(STDIN_FILENO, buf, sizeof(buf)); if (readlen <= 0) { if (readlen == 0) break; else { perror("read"); exit(1); } } if (operation == U_ENCRYPT) ebuflen = u_base64_encode( buf, readlen, ebuf); else ebuflen = u_base64_decode((const char* restrict)buf, readlen, ebuf); write(STDOUT_FILENO, ebuf, ebuflen); } }
static void init_headers(void) { U_INTERNAL_TRACE("init_headers()") /* packing file header */ /* magic number */ file_header[0] = 0x50; file_header[1] = 0x4b; file_header[2] = 0x03; file_header[3] = 0x04; /* version number */ file_header[4] = 10; file_header[5] = 0; /* bit flag (normal deflation)*/ file_header[6] = 0x00; file_header[7] = 0x00; /* do_compression method (deflation) */ file_header[8] = 0; file_header[9] = 0; /* last mod file time (MS-DOS format) */ file_header[10] = 0; file_header[11] = 0; /* last mod file date (MS-DOS format) */ file_header[12] = 0; file_header[13] = 0; /* CRC 32 */ file_header[14] = 0; file_header[15] = 0; file_header[16] = 0; file_header[17] = 0; /* compressed size */ file_header[18] = 0; file_header[19] = 0; file_header[20] = 0; file_header[21] = 0; /* uncompressed size */ file_header[22] = 0; file_header[23] = 0; file_header[24] = 0; file_header[25] = 0; /* filename length */ file_header[26] = 0; file_header[27] = 0; /* extra field length */ file_header[28] = 0; file_header[29] = 0; /* Initialize the compression DS */ PACK_UB4(data_descriptor, 0, 0x08074b50); }
void UObjectIO::input(char* t, uint32_t tlen) { U_INTERNAL_TRACE("UObjectIO::input(%s,%u)", t, tlen) #ifdef HAVE_OLD_IOSTREAM is = new istrstream(t, tlen); #else static char place[sizeof(istrstream)]; is = new(place) istrstream(t, tlen); #endif }
void UObjectIO::init(char* t, uint32_t sz) { U_INTERNAL_TRACE("UObjectIO::init(%p,%u)", t, sz) buffer_output = t; buffer_output_sz = sz; #ifdef HAVE_OLD_IOSTREAM os = new ostrstream(buffer_output, buffer_output_sz); #else static char place[sizeof(ostrstream)]; os = (ostrstream*) new(place) ostrstream(buffer_output, buffer_output_sz); #endif }
int main(int argc, char** argv) { u_init_ulib(argv); U_INTERNAL_TRACE("main(%d,%p)", argc, argv) U_INTERNAL_PRINT("argv[0] = %s\nargv[1] = %s", argv[0], argv[1]) if (argc == 2) u_do_cipher(argv[1], U_ENCRYPT); else if (argc == 3 && memcmp(argv[1], U_CONSTANT_TO_PARAM("-d")) == 0) u_do_cipher(argv[2], U_DECRYPT); else { fprintf(stderr, "%s", usage); exit(1); } return 0; }
static void u_do_cipher(char* pw, int operation) { long ebuflen; static unsigned char buf[U_BUFLEN]; static unsigned char ebuf[U_BUFLEN + EVP_MAX_BLOCK_LENGTH]; U_INTERNAL_TRACE("u_do_cipher(%s,%d)", pw, operation) u_des3_key((const char*)pw); # ifdef __MINGW32__ (void) setmode(1, O_BINARY); # endif while (true) { int readlen = read(STDIN_FILENO, buf, sizeof(buf)); U_INTERNAL_PRINT("readlen = %d", readlen) if (readlen <= 0) { if (!readlen) break; else { perror("read"); exit(1); } } U_INTERNAL_PRINT("buf = %.*s", readlen, buf) if (operation == U_ENCRYPT) ebuflen = u_des3_encode(buf, readlen, ebuf); else ebuflen = u_des3_decode(buf, readlen, ebuf); if (ebuflen) write(STDOUT_FILENO, ebuf, ebuflen); } }
void UObjectIO::output() { U_INTERNAL_TRACE("UObjectIO::output()") U_INTERNAL_ASSERT_POINTER(os) buffer_output_len = os->pcount(); U_INTERNAL_PRINT("os->pcount() = %d", buffer_output_len) U_INTERNAL_ASSERT_MINOR(buffer_output_len, buffer_output_sz) buffer_output[buffer_output_len] = '\0'; U_INTERNAL_PRINT("buffer_output = %.*s", U_min(buffer_output_len,128), buffer_output) #ifdef DEBUG_DEBUG off_t pos = os->rdbuf()->pubseekpos(0, U_openmode); #else (void) os->rdbuf()->pubseekpos(0, U_openmode); #endif U_INTERNAL_PRINT("pos = %ld, os->pcount() = %d", pos, os->pcount()) }
static int create_central_header(int fd) { zipentry* ze; int dir_size; int start_offset; ub1 header[46]; ub1 end_header[22]; int total_in = 0, total_out = 22; U_INTERNAL_TRACE("create_central_header(%d)", fd) /* magic number */ header[0] = 'P'; header[1] = 'K'; header[2] = 1; header[3] = 2; /* version made by */ header[4] = 20; header[5] = 0; /* version needed to extract */ header[6] = 10; header[7] = 0; /* bit flag */ header[8] = 0; header[9] = 0; /* compression method */ header[10] = 0; header[11] = 0; /* file mod time */ header[12] = 0; header[13] = 0; /* file mod date */ header[14] = 0; header[15] = 0; /* crc 32 */ header[16] = 0; header[17] = 0; header[18] = 0; header[19] = 0; /* compressed size */ header[20] = 0; header[21] = 0; header[22] = 0; header[23] = 0; /* uncompressed size */ header[24] = 0; header[25] = 0; header[26] = 0; header[27] = 0; /* filename length */ header[28] = 0; header[29] = 0; /* extra field length */ header[30] = 0; header[31] = 0; /* file comment length */ header[32] = 0; header[33] = 0; /* disk number start */ header[34] = 0; header[35] = 0; /* internal file attribs */ header[36] = 0; header[37] = 0; /* external file attribs */ header[38] = 0; header[39] = 0; header[40] = 0; header[41] = 0; /* relative offset of local header */ header[42] = 0; header[43] = 0; header[44] = 0; header[45] = 0; start_offset = lseek(fd, 0, SEEK_CUR); for (ze = ziptail; ze != 0; ze = ze->next_entry) { total_in += ze->usize; total_out += ze->csize + 76 + u__strlen(ze->filename, __PRETTY_FUNCTION__) * 2; if (ze->compressed) { PACK_UB2(header, CEN_COMP, 8); } else { PACK_UB2(header, CEN_COMP, 0); } PACK_UB2(header, CEN_MODTIME, ze->mod_time); PACK_UB2(header, CEN_MODDATE, ze->mod_date); PACK_UB4(header, CEN_CRC, ze->crc); PACK_UB4(header, CEN_CSIZE, ze->csize); PACK_UB4(header, CEN_USIZE, ze->usize); PACK_UB2(header, CEN_FNLEN, u__strlen(ze->filename, __PRETTY_FUNCTION__)); PACK_UB4(header, CEN_OFFSET, ze->offset); (void) write(fd, header, 46); (void) write(fd, ze->filename, u__strlen(ze->filename, __PRETTY_FUNCTION__)); } dir_size = lseek(fd, 0, SEEK_CUR) - start_offset; /* signature for ZIP end of central directory record */ end_header[0] = 0x50; end_header[1] = 0x4b; end_header[2] = 0x05; end_header[3] = 0x06; /* number of this disk */ end_header[4] = 0; end_header[5] = 0; /* number of disk w/ start of central header */ end_header[6] = 0; end_header[7] = 0; /* total number of entries in central dir on this disk*/ PACK_UB2(end_header, 8, number_of_entries); /* total number of entries in central dir*/ PACK_UB2(end_header, 10, number_of_entries); /* size of central dir. */ PACK_UB4(end_header, 12, dir_size); /* offset of start of central dir */ PACK_UB4(end_header, 16, start_offset); /* zipfile comment length */ end_header[20] = 0; end_header[21] = 0; (void) write(fd, end_header, 22); U_INTERNAL_TRACE("Total:\n------\n(in = %d) (out = %d) (%s %d%%)", total_in, total_out, "deflated", (int)(total_in ? ((1 - (total_out / (float)total_in)) * 100) : 0)) return 0; }