code: public static int equalsConstantTime(byte[] bytes1, int startPos1, byte[] bytes2, int startPos2, int length) {
          return !hasUnsafe() || !unalignedAccess() ?
                    ConstantTimeUtils.equalsConstantTime(bytes1, startPos1, bytes2, startPos2, length) :
                    PlatformDependent0.equalsConstantTime(bytes1, startPos1, bytes2, startPos2, length);
      }
docs: Compare two {@code byte} arrays for equality without leaking timing information.
  For performance reasons no bounds checking on the parameters is performed.
  <p>
  The {@code int} return type is intentional and is designed to allow cascading of constant time operations:
  <pre>
  byte[] s1 = new {1, 2, 3};
  byte[] s2 = new {1, 2, 3};
  byte[] s3 = new {1, 2, 3};
  byte[] s4 = new {4, 5, 6};
  boolean equals = (equalsConstantTime(s1, 0, s2, 0, s1.length) &
  equalsConstantTime(s3, 0, s4, 0, s3.length)) != 0;
  </pre>
  @param bytes1 the first byte array.
  @param startPos1 the position (inclusive) to start comparing in {@code bytes1}.
  @param bytes2 the second byte array.
  @param startPos2 the position (inclusive) to start comparing in {@code bytes2}.
  @param length the amount of bytes to compare. This is assumed to be validated as not going out of bounds
  by the caller.
  @return {@code 0} if not equal. {@code 1} if equal.