Нашёл ошибку в ncmp.c Должно быть if (!BNUM_SIGNEQ(a, b)) if (((a->val > 0) && (b->val > 0)) && ((a->val[0] != 0x0) || (b->val[0] != 0x0))) return BNUM_POSITIVE(a) ? 1: -1; иначе не проходит проверку на 0, -0. надеюсь ничего не напутал