Example #1
0
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);
      }
}
Example #2
0
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);
}
Example #3
0
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
}
Example #4
0
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
}
Example #5
0
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;
}
Example #6
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);
      }
}
Example #7
0
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())
}
Example #8
0
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;
}