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

    /* move up and truncate as required */
    y = MIN(a->used + x - 1, (int)(FP_SIZE-1));

    /* store new size */
    a->used = y + 1;

    /* move digits */
    for (; y >= x; y--) {
        a->dp[y] = a->dp[y-x];
    }

    /* zero lower digits */
    for (; y >= 0; y--) {
        a->dp[y] = 0;
    }

    /* clamp digits */
    fp_clamp(a);
}
void fp_lshd(fp_int *a, int x)
{
    int y;

     
    y = MIN(a->used + x - 1, (int)(FP_SIZE-1));

     
    a->used = y + 1;

     
    for (; y >= x; y--) {
        a->dp[y] = a->dp[y-x];
    }

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

     
    fp_clamp(a);
}