code: private static final int mula32(byte[] p, byte[] x, byte[] y, int t, int z) {
  		final int n = 31;
  		int w = 0;
  		int i = 0;
  		for (; i < t; i++) {
  			int zy = z * (y[i] & 0xFF);
  			w += mula_small(p, p, i, x, n, zy) +
  				(p[i+n] & 0xFF) + zy * (x[n] & 0xFF);
  			p[i+n] = (byte)w;
  			w >>= 8;
  		}
  		p[i+n] = (byte)(w + (p[i+n] & 0xFF));
  		return w >> 8;
  	}
docs: /* p += x * y * z  where z is a small integer
  x is size 32, y is size t, p is size 32+t
  y is allowed to overlap with p+32 if you don't care about the upper half