summaryrefslogtreecommitdiffstats
path: root/luni/src/main/java/java/security/MessageDigest.java
diff options
context:
space:
mode:
Diffstat (limited to 'luni/src/main/java/java/security/MessageDigest.java')
-rw-r--r--luni/src/main/java/java/security/MessageDigest.java27
1 files changed, 8 insertions, 19 deletions
diff --git a/luni/src/main/java/java/security/MessageDigest.java b/luni/src/main/java/java/security/MessageDigest.java
index 658b41f..1d37a90 100644
--- a/luni/src/main/java/java/security/MessageDigest.java
+++ b/luni/src/main/java/java/security/MessageDigest.java
@@ -132,7 +132,8 @@ public abstract class MessageDigest extends MessageDigestSpi {
/**
* Returns a new instance of {@code MessageDigest} that utilizes the
- * specified algorithm from the specified provider.
+ * specified algorithm from the specified provider. The
+ * {@code provider} supplied does not have to be registered.
*
* @param algorithm
* the name of the algorithm to use
@@ -302,12 +303,12 @@ public abstract class MessageDigest extends MessageDigestSpi {
if (digesta.length != digestb.length) {
return false;
}
+ // Perform a constant time comparison to avoid timing attacks.
+ int v = 0;
for (int i = 0; i < digesta.length; i++) {
- if (digesta[i] != digestb[i]) {
- return false;
- }
+ v |= (digesta[i] ^ digestb[i]);
}
- return true;
+ return v == 0;
}
/**
@@ -351,14 +352,6 @@ public abstract class MessageDigest extends MessageDigestSpi {
}
}
- @Override
- public Object clone() throws CloneNotSupportedException {
- if (this instanceof Cloneable) {
- return super.clone();
- }
- throw new CloneNotSupportedException();
- }
-
/**
* Updates this {@code MessageDigest} using the given {@code input}.
*
@@ -420,12 +413,8 @@ public abstract class MessageDigest extends MessageDigestSpi {
// Returns a clone if the spiImpl is cloneable
@Override
public Object clone() throws CloneNotSupportedException {
- if (spiImpl instanceof Cloneable) {
- MessageDigestSpi spi = (MessageDigestSpi) spiImpl.clone();
- return new MessageDigestImpl(spi, getProvider(), getAlgorithm());
- }
-
- throw new CloneNotSupportedException();
+ MessageDigestSpi spi = (MessageDigestSpi) spiImpl.clone();
+ return new MessageDigestImpl(spi, getProvider(), getAlgorithm());
}
}
}