code: private static void mult(int[] s1, int s1Len, int[] s2, int s2Len, int[] dst) {
          for (int i = 0; i < s1Len; i++) {
              long v = s1[i] & LONG_MASK;
              long p = 0L;
              for (int j = 0; j < s2Len; j++) {
                  p += (dst[i + j] & LONG_MASK) + v * (s2[j] & LONG_MASK);
                  dst[i + j] = (int) p;
                  p >>>= 32;
              }
              dst[i + s2Len] = (int) p;
          }
      }
docs: /*@
  @ requires s1 != dst && s2 != dst;
  @ requires s1.length >= s1Len && s2.length >= s2Len && dst.length >= s1Len + s2Len;
  @ assignable dst[0 .. s1Len + s2Len - 1];
  @ ensures AP(dst, s1Len + s2Len) == \old(AP(s1, s1Len) * AP(s2, s2Len));
  @