int gf_irreduciblep(mp *f)
{
- unsigned long m = mp_bits(f) - 1;
+ unsigned long m;
mp *u = MP_TWO;
mp *v = MP_NEW;
- m /= 2;
+ if (MP_ZEROP(f))
+ return (0);
+ else if (MP_LEN(f) == 1) {
+ if (f->v[0] < 2) return (0);
+ if (f->v[0] < 4) return (1);
+ }
+ m = (mp_bits(f) - 1)/2;
while (m) {
u = gf_sqr(u, u);
gf_div(0, &u, u, f);