Add a BigIntegerFingerprint class to create a fast non-cryptographcially secure fingerprinting scheme for
ActionExecutionValues.

PiperOrigin-RevId: 226360834
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
index 9e581f42..9221ebc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
@@ -24,6 +24,7 @@
 import com.google.devtools.build.lib.actions.FileArtifactValue;
 import com.google.devtools.build.lib.actions.cache.DigestUtils;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.util.BigIntegerFingerprint;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.Dirent.Type;
 import com.google.devtools.build.lib.vfs.Path;
@@ -31,6 +32,7 @@
 import com.google.devtools.build.lib.vfs.Symlinks;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.io.IOException;
+import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
@@ -53,6 +55,7 @@
 
   private final byte[] digest;
   private final Map<TreeFileArtifact, FileArtifactValue> childData;
+  private BigInteger valueFingerprint;
 
   @AutoCodec.VisibleForSerialization
   TreeArtifactValue(byte[] digest, Map<TreeFileArtifact, FileArtifactValue> childData) {
@@ -102,6 +105,16 @@
   }
 
   @Override
+  public BigInteger getValueFingerprint() {
+    if (valueFingerprint == null) {
+      BigIntegerFingerprint fp = new BigIntegerFingerprint();
+      fp.addBytes(digest);
+      valueFingerprint = fp.getFingerprint();
+    }
+    return valueFingerprint;
+  }
+
+  @Override
   public int hashCode() {
     return Arrays.hashCode(digest);
   }