pike.git / src / post_modules / Nettle / hogweed.cmod

version» Context lines:

pike.git/src/post_modules/Nettle/hogweed.cmod:180:    push_bignum((MP_INT *)&key.p);    push_bignum((MP_INT *)&key.q);       rsa_private_key_clear(&key);    rsa_public_key_clear(&pub);       f_aggregate(4);    stack_pop_n_elems_keep_top(args); /* Remove bits, e and rnd. */   }    + /*! Unpads a message that has been padded according to +  *! RSAES-PKCS1-V1_5-ENCODE(message) in PKCS#1 v2.2. The padding +  *! method used on the original message must be provided in the +  *! @[type] parameter. All content dependent processing is done in +  *! constant time for the same padding type and @[data] length. +  */   PIKEFUN int rsa_unpad(string(0..255) data, int type)   {    int i, pad=0, nonpad=0, pos=0; -  +  unsigned char *str;       NO_WIDE_STRING(data);       /* Indata is smaller than minimum size, so we can exit immediately    without timing issue. 1 type + 8 padding + 1 delimiter + 1 value    = 11 bytes. */    if(data->len < 11 ) RETURN 0; -  +  str = data->str + data->len - 1;    -  for(i=data->len-1; i>0; i--) +  for(i=data->len-1; i>0; i--,str--)    { -  switch((unsigned char)data->str[i]) +  switch(*str)    {    case 0: pos=i; break;    case 0xff: pad=i; break;    default: nonpad=i; break;    }    }    -  if( data->str[0]==2 ) +  if( *str==2 )    {    nonpad=pos+1;    pad=1;    }    -  if( (pad==1) + (nonpad>pos) + (data->str[0]==type) + (pos>8) == 4 ) +  if( (pad==1) + (nonpad>pos) + (*str==type) + (pos>8) == 4 )    RETURN pos+1;    RETURN 0;   }      #ifdef dsa_params_init      /*! @class DH_Params    *!    *! Diffie-Hellman Parameters.    */