Esempio n. 1
0
BOOL integer_eq(Integer n, Integer m)
{
    if (FIXNUM_P(n) && FIXNUM_P(m))
        return fixnum_eq(n, m);
    if (BIGNUM_P(n) && BIGNUM_P(m))
        return bignum_eq(n, m);
    if (FIXNUM_P(n))
        return bignum_eq(fixnum2bignum(n), m);
    else
        return bignum_eq(n, fixnum2bignum(m));
}
Esempio n. 2
0
unsigned char *
generate_blocks(struct generator * g, unsigned int count, unsigned char * b)
{
    int out_off = 0;
    unsigned int n;

    if (bignum_eq(g->counter, 0)) return 0;

    for (n = 0; n < count; n++)
    {
        aes(g->key, g->counter, b + out_off);
        out_off += 16;
        increment_bignum(g->counter, 1);
    }
    return b;
}
Esempio n. 3
0
bignum* bignum_dumb_mul(bignum a, bignum b) {
    // Optimisation
    if(bignum_absgt(b, a))
        return bignum_dumb_mul(b, a);

    bignum* prod = bignum_fromstr("0");
    bignum* zero = bignum_fromstr("0");
    bignum* dec = bignum_fromstr("-1");

    char sign = a.sign != b.sign;

    bignum* b_copy = bignum_copy(&b);
    b_copy->sign = 0;
    bignum* add_result = NULL;
    bignum* prod_result = NULL;

    a.sign = 0;

    while(!bignum_eq(*b_copy, *zero)) {
        add_result = bignum_add(*b_copy, *dec);
        bignum_destoroyah(b_copy);
        b_copy = add_result;

        prod_result = bignum_add(*prod, a);
        bignum_destoroyah(prod);
        prod = prod_result;
    }

    bignum_destoroyah(b_copy);
    bignum_destoroyah(zero);
    bignum_destoroyah(dec);

    prod->sign = sign;

    return prod;
}