aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/util/Fingerprint.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/util/Fingerprint.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/Fingerprint.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/util/Fingerprint.java b/src/main/java/com/google/devtools/build/lib/util/Fingerprint.java
index c2119eeccb..ddb71b4aaf 100644
--- a/src/main/java/com/google/devtools/build/lib/util/Fingerprint.java
+++ b/src/main/java/com/google/devtools/build/lib/util/Fingerprint.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.protobuf.CodedOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.security.DigestException;
import java.security.DigestOutputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -73,6 +74,26 @@ public final class Fingerprint {
return md5.digest();
}
+ /**
+ * Completes the hash computation by doing final operations and resets the underlying state,
+ * allowing this instance to be used again.
+ *
+ * <p>Instead of returning a digest, this method writes the digest straight into the supplied byte
+ * array, at the given offset.
+ *
+ * @see java.security.MessageDigest#digest()
+ */
+ public void digestAndReset(byte[] buf, int offset, int len) {
+ try {
+ codedOut.flush();
+ md5.digest(buf, offset, len);
+ } catch (IOException e) {
+ throw new IllegalStateException("failed to flush", e);
+ } catch (DigestException e) {
+ throw new IllegalStateException("failed to digest", e);
+ }
+ }
+
/** Same as {@link #digestAndReset()}, except returns the digest in hex string form. */
public String hexDigestAndReset() {
return hexDigest(digestAndReset());