Bob Bob - 8 months ago 68
Java Question

Leading zero in BigInteger multiplication

I use simple function to multiply big integers. Sometimes one more leading zero byte is included to output. Why is it happened and how I can prevent it?

PS: a and b are already less than mod

private byte[] multiply(final byte[] a, final byte[] b, final BigInteger mod) {
BigInteger M1 = new BigInteger(1, a);
BigInteger M2 = new BigInteger(1, b);

BigInteger out = M1.multiply(M2).mod(mod);

res = out.toByteArray();


The extra zero byte is added if the (positive) value has a first byte that is from 128 to 255.

This byte is needed so that the resulting byte are has at least one sign bit (


returns a byte array with only one byte (5).


returns a byte array with only two bytes (0 and 128 in unsigned representation). This is to distinguish the result from


which returns also a byte array with two bytes (255, 128 in unsigned representation)