Hi,
Looks good.
Seems, for u0, u1, v0, v1 you do not need to use BigInteger type, just use primitive int (unsigned?) or long (you may extract 63 bits in this case).