aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java
new file mode 100644
index 0000000000..4599ac0cba
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.util.sha1;
+
+import java.security.MessageDigest;
+
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.MutableObjectId;
+import org.eclipse.jgit.lib.ObjectId;
+
+/**
+ * SHA1 implementation using native implementation from JDK. It doesn't support
+ * collision detection but is faster than the pure Java implementation.
+ */
+class SHA1Native extends SHA1 {
+
+ private final MessageDigest md;
+
+ SHA1Native() {
+ md = Constants.newMessageDigest();
+ }
+
+ @Override
+ public void update(byte b) {
+ md.update(b);
+ }
+
+ @Override
+ public void update(byte[] in) {
+ md.update(in);
+ }
+
+ @Override
+ public void update(byte[] in, int p, int len) {
+ md.update(in, p, len);
+ }
+
+ @Override
+ public byte[] digest() throws Sha1CollisionException {
+ return md.digest();
+ }
+
+ @Override
+ public ObjectId toObjectId() throws Sha1CollisionException {
+ return ObjectId.fromRaw(md.digest());
+ }
+
+ @Override
+ public void digest(MutableObjectId id) throws Sha1CollisionException {
+ id.fromRaw(md.digest());
+ }
+
+ @Override
+ public SHA1 reset() {
+ md.reset();
+ return this;
+ }
+
+ @Override
+ public SHA1 setDetectCollision(boolean detect) {
+ return this;
+ }
+
+ @Override
+ public boolean hasCollision() {
+ return false;
+ }
+}