diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java')
-rw-r--r-- | bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java index 9f160334a..5e4e2303b 100644 --- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java +++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/ChecksumProducer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2018 IBM Corporation and others. + * Copyright (c) 2009, 2019 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -17,6 +17,9 @@ package org.eclipse.equinox.internal.p2.repository.helpers; import java.io.*; import java.security.*; +import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; +import org.eclipse.equinox.internal.p2.repository.Activator; +import org.eclipse.osgi.util.NLS; /** * Calculates a checksum using {@link java.security.MessageDigest} @@ -34,8 +37,8 @@ public class ChecksumProducer { // bug #509401 - still here to not break x-friends like in bug #507193 public static String computeMD5(File file) throws IOException { try { - return produce(file, "MD5"); //$NON-NLS-1$ - } catch (NoSuchAlgorithmException e) { + return produce(file, "MD5", null); //$NON-NLS-1$ + } catch (NoSuchAlgorithmException | NoSuchProviderException e) { return null; } } @@ -43,20 +46,34 @@ public class ChecksumProducer { /** * @param file should not be <code>null</code> * @param algorithm {@link java.security.MessageDigest#getInstance(String)} + * @param providerName {@link Provider#getName()} * @return checksum of the file * @throws IOException * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @see {@link java.security.MessageDigest#getInstance(String, Provider)} */ - public static String produce(File file, String algorithm) throws IOException, NoSuchAlgorithmException { - MessageDigest messageDigest = MessageDigest.getInstance(algorithm); + public static String produce(File file, String algorithm, String providerName) throws IOException, NoSuchAlgorithmException, NoSuchProviderException { + MessageDigest messageDigest = getMessageDigest(algorithm, providerName); try (InputStream fis = new DigestInputStream(new BufferedInputStream(new FileInputStream(file)), messageDigest)) { byte[] buffer = new byte[BUFFER_SIZE]; while (fis.read(buffer) != -1) { // consume stream to update digest } + byte[] digest = messageDigest.digest(); + return ChecksumHelper.toHexString(digest); } - byte[] digest = messageDigest.digest(); - return ChecksumHelper.toHexString(digest); + } + + public static MessageDigest getMessageDigest(String algorithm, String providerName) throws NoSuchAlgorithmException, NoSuchProviderException { + if (providerName == null) + return MessageDigest.getInstance(algorithm); + + Provider provider = ServiceHelper.getService(Activator.getContext(), Provider.class, "(providerName=" + providerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ + if (provider == null) + throw new NoSuchProviderException(NLS.bind(Messages.noSuchProvider, providerName)); + + return MessageDigest.getInstance(algorithm, provider); } } |