void fp_rshd(fp_int *a, int x)
{
  int y;

  /* too many digits just zero and return */
  if (x >= a->used) {
     fp_zero(a);
     return;
  }

   /* shift */
   for (y = 0; y < a->used - x; y++) {
      a->dp[y] = a->dp[y+x];
   }

   /* zero rest */
   for (; y < a->used; y++) {
      a->dp[y] = 0;
   }

   /* decrement count */
   a->used -= x;
   fp_clamp(a);
}
void fp_rshd(fp_int *a, int x)
{
  int y;

   
  if (x >= a->used) {
     fp_zero(a);
     return;
  }

    
   for (y = 0; y < a->used - x; y++) {
      a->dp[y] = a->dp[y+x];
   }

    
   for (; y < a->used; y++) {
      a->dp[y] = 0;
   }

    
   a->used -= x;
   fp_clamp(a);
}