code: private static void mult(int[] src, int srcLen, int v0, int v1, int[] dst) {
          long v = v0 & LONG_MASK;
          long carry = 0;
          for (int j = 0; j < srcLen; j++) {
              long product = v * (src[j] & LONG_MASK) + carry;
              dst[j] = (int) product;
              carry = product >>> 32;
          }
          dst[srcLen] = (int) carry;
          v = v1 & LONG_MASK;
          carry = 0;
          for (int j = 0; j < srcLen; j++) {
              long product = (dst[j + 1] & LONG_MASK) + v * (src[j] & LONG_MASK) + carry;
              dst[j + 1] = (int) product;
              carry = product >>> 32;
          }
          dst[srcLen + 1] = (int) carry;
      }
docs: /*@
  @ requires src != dst;
  @ requires src.length >= srcLen && dst.length >= srcLen + 2;
  @ assignable dst[0 .. srcLen + 1];
  @ ensures AP(dst, srcLen + 2) == \old(AP(src, srcLen) * (UNSIGNED(v0) + (UNSIGNED(v1) << 32)));
  @