void gt_md5_encoder_finish(GtMD5Encoder *enc, unsigned char *output,
                           char *outstr)
{
  gt_assert(enc && output);
  if (enc->status != 2) {
    if (enc->len > 0) {
      digest(enc->wbuff, enc->d);
      enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1];
      enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3];
    }
    enc->d_old[0]=enc->d[0]; enc->d_old[1]=enc->d[1];
    enc->d_old[2]=enc->d[2]; enc->d_old[3]=enc->d[3];
    enc->status = converte(enc->wbuff, NULL, 0, enc->status);
    gt_assert(enc->status == 2);
  }
  put_length(enc->wbuff, enc->len);
  digest(enc->wbuff, enc->d);
  enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1];
  enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3];
  word32tobytes(enc->d, (char*) output);
  if (outstr) {
    snprintf(outstr, 33,
             "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
             output[0], output[1], output[2], output[3], output[4], output[5],
             output[6], output[7], output[8], output[9], output[10], output[11],
             output[12], output[13], output[14], output[15]);
  }
}
Beispiel #2
0
void Huff_Ccitt_2D_T6::write(const U_INT1 * vals)
{


    ElSwap(_cur,_prec);
    _a0 = -1;
    _coul = 0;
    _prec[_a0] = 0;
    _cur[_a0] = 0;

    memcpy(_cur,vals,_tx);

    while (_a0 != _tx)
    {
         calc_a1();
         calc_b1();
         calc_b2();
         if (_b2 < _a1)
         {
             put(_ht_pass);
             _a0 = _b2;
         }
         else
         {
             INT dif = _a1-_b1;
             if ((dif<=3) && (dif >=-3))
             {
                put(_hvert->_tab[dif+3]);
                _coul = ! _coul;
                _a0   = _a1;
             }
             else
             {
                calc_a2();
                put(_ht_horz);
                put_length(_a1-ElMax(_a0,0),_coul);
                put_length(_a2-_a1,!_coul);
                _a0 = _a2;
             }
         }
    }
}
Beispiel #3
0
void MPD_CCIT_T6::put_length_gray(INT l)
{
     if (l<=max_l_gr)
     {
        put(_hmpd->_tab[l]);
     }
     else
     {
         put(_ht_huf_bl);
         put_length(l-max_l_gr,0);
     }
}
Beispiel #4
0
static void md5_close (const char *message, size_t len, WORD32 d[4], size_t total) {
  int status = 0;
  long i = 0;
  while (status != 2) {
    WORD32 d_old[4];
    WORD32 wbuff[16];
    int numbytes = (len-i >= 64) ? 64 : len-i;
    /*salva os valores do vetor digest*/
    d_old[0]=d[0]; d_old[1]=d[1]; d_old[2]=d[2]; d_old[3]=d[3];
    status = converte(wbuff, message+i, numbytes, status);
    if (status == 2) put_length(wbuff, total);
    digest(wbuff, d);
    d[0]+=d_old[0]; d[1]+=d_old[1]; d[2]+=d_old[2]; d[3]+=d_old[3];
    i += numbytes;
  }
}
Beispiel #5
0
void MPD_CCIT_T6::write(const U_INT1 * vals)
{
     _line++;
     _vals = const_cast<U_INT1 *> (vals);

     _bin[-1] = 0;
     _bin[_tx] = 0;
     _bin[_tx+1] = 1;

     for (INT i=0; i<_tx ; i++)
        _bin[i] = (vals[i]!=_vmax) ;

     Huff_Ccitt_2D_T6::write(_bin);

     INT a0 = -1;
     for(;;)
     {
         a0 = end_pl_white(a0);

         if (a0 >= _tx)
         {
             return;
         }

         INT a1 = end_pl_gray(a0);
         INT a2 = end_pl_pure_black(a1);
         INT a3 = end_pl_gray(a2);

         while (_bin[a3])
         {
              put(1,1);
              put_plage_gray(a0,a1);
              put_length(a2-a1,0);
              a0 = a2;
              a1 = a3;
              a2 = end_pl_pure_black(a1);
              a3 = end_pl_gray(a2);
         }
         put(0,1);
         put_plage_gray(a0,a1);
         put_plage_gray(a2,a3);
         a0 = a3;
     }
}
Beispiel #6
0
void md5 (const char *message, long len, char *output) {
  WORD32 d[4];
  int status = 0;
  long i = 0;
  inic_digest(d);
  while (status != 2) {
    WORD32 d_old[4];
    WORD32 wbuff[16];
    int numbytes = (len-i >= 64) ? 64 : len-i;
    /*salva os valores do vetor digest*/
    d_old[0]=d[0]; d_old[1]=d[1]; d_old[2]=d[2]; d_old[3]=d[3];
    status = converte(wbuff, message+i, numbytes, status);
    if (status == 2) put_length(wbuff, len);
    digest(wbuff, d);
    d[0]+=d_old[0]; d[1]+=d_old[1]; d[2]+=d_old[2]; d[3]+=d_old[3];
    i += numbytes;
  }
  word32tobytes(d, output);
}
Beispiel #7
0
void Huff_Ccitt_1D_Codec::write(const U_INT1 * im,INT nb_tot)
{
     INT coul = 0;
     INT x0 = 0;

     while(x0 != nb_tot)
     {
        INT x1;
        for
        (
              x1=x0;
              x1<nb_tot && (im[x1] == coul);
              x1++
        )
              ;
        put_length(x1-x0,coul);
        coul = !coul;
        x0 = x1;
     }
     reset();
}