Skip to content

Commit 09baab6

Browse files
committed
added fallback tests for digest creation in PGP JCA layer
1 parent a8f7e0a commit 09baab6

File tree

4 files changed

+85
-1
lines changed

4 files changed

+85
-1
lines changed

pg/src/main/java/org/bouncycastle/openpgp/operator/jcajce/OperatorHelper.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ MessageDigest createDigest(int algorithm)
4848
}
4949
catch (NoSuchAlgorithmException e)
5050
{
51-
if (algorithm >= HashAlgorithmTags.SHA256 && algorithm <= HashAlgorithmTags.SHA224)
51+
if (algorithm == HashAlgorithmTags.SHA1
52+
|| (algorithm >= HashAlgorithmTags.SHA256 && algorithm <= HashAlgorithmTags.SHA224))
5253
{
5354
dig = helper.createMessageDigest("SHA-" + digestName.substring(3));
5455
}

pg/src/test/java/org/bouncycastle/openpgp/test/OperatorJcajceTest.java

+37
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,20 @@ public void operation()
207207
public void testJcaPGPDigestCalculatorProviderBuilder()
208208
throws Exception
209209
{
210+
211+
PGPDigestCalculatorProvider digCalcBldr = new JcaPGPDigestCalculatorProviderBuilder().setProvider(new NonDashProvider()).build();
212+
testDigestCalc(digCalcBldr.get(HashAlgorithmTags.SHA256), Hex.decode("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"));
213+
214+
PGPDigestCalculatorProvider digCalcBldr2 = new JcaPGPDigestCalculatorProviderBuilder().setProvider(new DashProvider()).build();
215+
testDigestCalc(digCalcBldr2.get(HashAlgorithmTags.SHA256), Hex.decode("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"));
216+
217+
PGPDigestCalculatorProvider digCalcBldr3 = new JcaPGPDigestCalculatorProviderBuilder().setProvider(new NonDashProvider()).build();
218+
testDigestCalc(digCalcBldr3.get(HashAlgorithmTags.SHA1), Hex.decode("a9993e364706816aba3e25717850c26c9cd0d89d"));
219+
220+
PGPDigestCalculatorProvider digCalcBldr4 = new JcaPGPDigestCalculatorProviderBuilder().setProvider(new DashProvider()).build();
221+
testDigestCalc(digCalcBldr4.get(HashAlgorithmTags.SHA1), Hex.decode("a9993e364706816aba3e25717850c26c9cd0d89d"));
222+
223+
210224
final PGPDigestCalculatorProvider provider = new JcaPGPDigestCalculatorProviderBuilder().setProvider(new NullProvider()).build();
211225
testException("exception on setup: ", "PGPException", new TestExceptionOperation()
212226
{
@@ -310,4 +324,27 @@ private class NullProvider
310324
super("NULL", 0.0, "Null Provider");
311325
}
312326
}
327+
328+
private class NonDashProvider
329+
extends Provider
330+
{
331+
NonDashProvider()
332+
{
333+
super("NonDash", 0.0, "NonDash Provider");
334+
putService(new Provider.Service(this, "MessageDigest", "SHA256", "org.bouncycastle.openpgp.test.SHA256", null, null));
335+
putService(new Provider.Service(this, "MessageDigest", "SHA1", "org.bouncycastle.openpgp.test.SHA1", null, null));
336+
}
337+
}
338+
339+
private class DashProvider
340+
extends Provider
341+
{
342+
DashProvider()
343+
{
344+
super("Dash", 0.0, "Dash Provider");
345+
putService(new Service(this, "MessageDigest", "SHA-256", "org.bouncycastle.openpgp.test.SHA256", null, null));
346+
putService(new Service(this, "MessageDigest", "SHA-1", "org.bouncycastle.openpgp.test.SHA1", null, null));
347+
}
348+
}
349+
313350
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.bouncycastle.openpgp.test;
2+
3+
import org.bouncycastle.crypto.digests.SHA1Digest;
4+
import org.bouncycastle.jcajce.provider.digest.BCMessageDigest;
5+
6+
public class SHA1
7+
extends BCMessageDigest
8+
implements Cloneable
9+
{
10+
public SHA1()
11+
{
12+
super(new SHA1Digest());
13+
}
14+
15+
public Object clone()
16+
throws CloneNotSupportedException
17+
{
18+
SHA1 d = (SHA1)super.clone();
19+
d.digest = new SHA1Digest((SHA1Digest)digest);
20+
21+
return d;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.bouncycastle.openpgp.test;
2+
3+
import org.bouncycastle.crypto.digests.SHA256Digest;
4+
import org.bouncycastle.jcajce.provider.digest.BCMessageDigest;
5+
6+
public class SHA256
7+
extends BCMessageDigest
8+
implements Cloneable
9+
{
10+
public SHA256()
11+
{
12+
super(SHA256Digest.newInstance());
13+
}
14+
15+
public Object clone()
16+
throws CloneNotSupportedException
17+
{
18+
SHA256 d = (SHA256)super.clone();
19+
d.digest = SHA256Digest.newInstance(digest);
20+
21+
return d;
22+
}
23+
}

0 commit comments

Comments
 (0)