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. */   }    - /*! @decl int(0..) rsa_unpad(string(0..255) data, int type) -  *! -  *! 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 = (unsigned char*)data->str + data->len - 1; -  -  for(i=data->len-1; i>0; i--,str--) -  { -  switch(*str) -  { -  case 0: pos=i; break; -  case 0xff: pad=i; break; -  default: nonpad=i; break; -  } -  } -  -  if( type==2 ) -  { -  nonpad=pos+1; -  pad=1; -  } -  -  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.    */   PIKECLASS DH_Params   program_flags PROGRAM_CLEAR_STORAGE;   {    CVAR struct dsa_params params;