Skip to content

Commit 85493d1

Browse files
committed
Update legacy (and old JDK) X509SignatureUtil
1 parent b949a8f commit 85493d1

File tree

5 files changed

+106
-99
lines changed

5 files changed

+106
-99
lines changed

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import org.bouncycastle.asn1.ASN1Encodable;
1717
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
18-
import org.bouncycastle.asn1.ASN1Sequence;
1918
import org.bouncycastle.asn1.DERNull;
2019
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
2120
import org.bouncycastle.asn1.pkcs.RSASSAPSSparams;

prov/src/main/java/org/bouncycastle/jce/provider/X509SignatureUtil.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
import java.security.spec.PSSParameterSpec;
1111

1212
import org.bouncycastle.asn1.ASN1Encodable;
13-
import org.bouncycastle.asn1.ASN1Null;
1413
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
15-
import org.bouncycastle.asn1.ASN1Sequence;
1614
import org.bouncycastle.asn1.DERNull;
1715
import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
1816
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
@@ -25,17 +23,19 @@
2523

2624
class X509SignatureUtil
2725
{
28-
private static final ASN1Null derNull = DERNull.INSTANCE;
29-
30-
static void setSignatureParameters(
31-
Signature signature,
32-
ASN1Encodable params)
26+
private static boolean isAbsentOrEmptyParameters(ASN1Encodable parameters)
27+
{
28+
return parameters == null || DERNull.INSTANCE.equals(parameters);
29+
}
30+
31+
static void setSignatureParameters(Signature signature, ASN1Encodable params)
3332
throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
3433
{
35-
if (params != null && !derNull.equals(params))
34+
if (!isAbsentOrEmptyParameters(params))
3635
{
37-
AlgorithmParameters sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), signature.getProvider());
38-
36+
String sigAlgName = signature.getAlgorithm();
37+
AlgorithmParameters sigParams = AlgorithmParameters.getInstance(sigAlgName, signature.getProvider());
38+
3939
try
4040
{
4141
sigParams.init(params.toASN1Primitive().getEncoded());
@@ -44,8 +44,8 @@ static void setSignatureParameters(
4444
{
4545
throw new SignatureException("IOException decoding parameters: " + e.getMessage());
4646
}
47-
48-
if (signature.getAlgorithm().endsWith("MGF1"))
47+
48+
if (sigAlgName.endsWith("MGF1"))
4949
{
5050
try
5151
{
@@ -58,31 +58,31 @@ static void setSignatureParameters(
5858
}
5959
}
6060
}
61-
62-
static String getSignatureName(
63-
AlgorithmIdentifier sigAlgId)
61+
62+
static String getSignatureName(AlgorithmIdentifier sigAlgId)
6463
{
64+
ASN1ObjectIdentifier sigAlgOid = sigAlgId.getAlgorithm();
6565
ASN1Encodable params = sigAlgId.getParameters();
66-
67-
if (params != null && !derNull.equals(params))
66+
67+
if (!isAbsentOrEmptyParameters(params))
6868
{
69-
if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
69+
if (PKCSObjectIdentifiers.id_RSASSA_PSS.equals(sigAlgOid))
7070
{
7171
RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
72-
72+
7373
return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1";
7474
}
75-
if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
75+
if (X9ObjectIdentifiers.ecdsa_with_SHA2.equals(sigAlgOid))
7676
{
7777
AlgorithmIdentifier ecDsaParams = AlgorithmIdentifier.getInstance(params);
7878

7979
return getDigestAlgName(ecDsaParams.getAlgorithm()) + "withECDSA";
8080
}
8181
}
8282

83-
return sigAlgId.getAlgorithm().getId();
83+
return sigAlgOid.getId();
8484
}
85-
85+
8686
/**
8787
* Return the digest algorithm using one of the standard JCA string
8888
* representations rather the the algorithm identifier (if possible).

prov/src/main/jdk1.1/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.bouncycastle.asn1.ASN1Encodable;
1818
import org.bouncycastle.asn1.ASN1Null;
1919
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
20-
import org.bouncycastle.asn1.ASN1Sequence;
2120
import org.bouncycastle.asn1.DERNull;
2221
import org.bouncycastle.internal.asn1.edec.EdECObjectIdentifiers;
2322
import org.bouncycastle.internal.asn1.oiw.OIWObjectIdentifiers;
@@ -29,7 +28,6 @@
2928
import org.bouncycastle.jce.provider.BouncyCastleProvider;
3029
import org.bouncycastle.util.Strings;
3130

32-
3331
class X509SignatureUtil
3432
{
3533
private static final Map<ASN1ObjectIdentifier, String> algNames = new HashMap<ASN1ObjectIdentifier, String>();
@@ -42,29 +40,32 @@ class X509SignatureUtil
4240
algNames.put(X9ObjectIdentifiers.id_dsa_with_sha1, "SHA1withDSA");
4341
}
4442

45-
private static final ASN1Null derNull = DERNull.INSTANCE;
43+
private static boolean isAbsentOrEmptyParameters(ASN1Encodable parameters)
44+
{
45+
return parameters == null || DERNull.INSTANCE.equals(parameters);
46+
}
4647

47-
static void setSignatureParameters(
48-
Signature signature,
49-
ASN1Encodable params)
48+
static void setSignatureParameters(Signature signature, ASN1Encodable params)
5049
throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
5150
{
52-
if (params != null && !derNull.equals(params))
51+
if (!isAbsentOrEmptyParameters(params))
5352
{
53+
String sigAlgName = signature.getAlgorithm();
5454

55-
AlgorithmParameters sigParams;
55+
String sigParamsAlg;
56+
if (sigAlgName.indexOf("MGF1") > 0)
57+
{
58+
sigParamsAlg = "PSS";
59+
}
60+
else
61+
{
62+
sigParamsAlg = Strings.toUpperCase(sigAlgName);
63+
}
5664

5765
try
5866
{
59-
if (signature.getAlgorithm().indexOf("MGF1") > 0)
60-
{
61-
sigParams = AlgorithmParameters.getInstance("PSS");
62-
}
63-
else
64-
{
65-
sigParams = AlgorithmParameters.getInstance(Strings.toUpperCase(signature.getAlgorithm()));
66-
}
67-
67+
AlgorithmParameters sigParams = AlgorithmParameters.getInstance(sigParamsAlg);
68+
6869
sigParams.init(params.toASN1Primitive().getEncoded());
6970
}
7071
catch (IOException e)
@@ -73,38 +74,38 @@ static void setSignatureParameters(
7374
}
7475
}
7576
}
76-
77-
static String getSignatureName(
78-
AlgorithmIdentifier sigAlgId)
77+
78+
static String getSignatureName(AlgorithmIdentifier sigAlgId)
7979
{
80+
ASN1ObjectIdentifier sigAlgOid = sigAlgId.getAlgorithm();
8081
ASN1Encodable params = sigAlgId.getParameters();
81-
82-
if (params != null && !derNull.equals(params))
82+
83+
if (!isAbsentOrEmptyParameters(params))
8384
{
84-
if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
85+
if (PKCSObjectIdentifiers.id_RSASSA_PSS.equals(sigAlgOid))
8586
{
8687
RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
87-
88+
8889
return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "WITHRSAANDMGF1";
8990
}
90-
if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
91+
if (X9ObjectIdentifiers.ecdsa_with_SHA2.equals(sigAlgOid))
9192
{
92-
ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params);
93-
94-
return getDigestAlgName((ASN1ObjectIdentifier)ecDsaParams.getObjectAt(0)) + "WITHECDSA";
93+
AlgorithmIdentifier ecDsaParams = AlgorithmIdentifier.getInstance(params);
94+
95+
return getDigestAlgName(ecDsaParams.getAlgorithm()) + "WITHECDSA";
9596
}
9697
}
9798

9899
// deal with the "weird" ones.
99-
String algName = (String)algNames.get(sigAlgId.getAlgorithm());
100+
String algName = (String)algNames.get(sigAlgOid);
100101
if (algName != null)
101102
{
102103
return algName;
103104
}
104105

105-
return findAlgName(sigAlgId.getAlgorithm());
106+
return findAlgName(sigAlgOid);
106107
}
107-
108+
108109
/**
109110
* Return the digest algorithm using one of the standard JCA string
110111
* representations rather the the algorithm identifier (if possible).
@@ -155,7 +156,7 @@ private static String findAlgName(ASN1ObjectIdentifier algOid)
155156

156157
private static String lookupAlg(Provider prov, ASN1ObjectIdentifier algOid)
157158
{
158-
String algName = prov.getProperty("Alg.Alias.Signature." + algOid);
159+
String algName = prov.getProperty("Alg.Alias.Signature." + algOid);
159160

160161
if (algName != null)
161162
{

prov/src/main/jdk1.3/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.bouncycastle.asn1.ASN1Encodable;
1818
import org.bouncycastle.asn1.ASN1Null;
1919
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
20-
import org.bouncycastle.asn1.ASN1Sequence;
2120
import org.bouncycastle.asn1.DERNull;
2221
import org.bouncycastle.internal.asn1.edec.EdECObjectIdentifiers;
2322
import org.bouncycastle.internal.asn1.oiw.OIWObjectIdentifiers;
@@ -40,22 +39,23 @@ class X509SignatureUtil
4039
algNames.put(X9ObjectIdentifiers.id_dsa_with_sha1, "SHA1withDSA");
4140
}
4241

43-
private static final ASN1Null derNull = DERNull.INSTANCE;
42+
private static boolean isAbsentOrEmptyParameters(ASN1Encodable parameters)
43+
{
44+
return parameters == null || DERNull.INSTANCE.equals(parameters);
45+
}
4446

45-
static void setSignatureParameters(
46-
Signature signature,
47-
ASN1Encodable params)
47+
static void setSignatureParameters(Signature signature, ASN1Encodable params)
4848
throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
4949
{
50-
if (params != null && !derNull.equals(params))
50+
if (!isAbsentOrEmptyParameters(params))
5151
{
52-
53-
AlgorithmParameters sigParams;
52+
String sigAlgName = signature.getAlgorithm();
5453

5554
try
5655
{
57-
sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), signature.getProvider().getName());
58-
56+
AlgorithmParameters sigParams = AlgorithmParameters.getInstance(sigAlgName,
57+
signature.getProvider().getName());
58+
5959
sigParams.init(params.toASN1Primitive().getEncoded());
6060
}
6161
catch (NoSuchProviderException e)
@@ -66,8 +66,8 @@ static void setSignatureParameters(
6666
{
6767
throw new SignatureException("IOException decoding parameters: " + e.getMessage());
6868
}
69-
70-
if (signature.getAlgorithm().endsWith("MGF1"))
69+
70+
if (sigAlgName.endsWith("MGF1"))
7171
{
7272
try
7373
{
@@ -80,38 +80,38 @@ static void setSignatureParameters(
8080
}
8181
}
8282
}
83-
84-
static String getSignatureName(
85-
AlgorithmIdentifier sigAlgId)
83+
84+
static String getSignatureName(AlgorithmIdentifier sigAlgId)
8685
{
86+
ASN1ObjectIdentifier sigAlgOid = sigAlgId.getAlgorithm();
8787
ASN1Encodable params = sigAlgId.getParameters();
88-
89-
if (params != null && !derNull.equals(params))
88+
89+
if (!isAbsentOrEmptyParameters(params))
9090
{
91-
if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
91+
if (PKCSObjectIdentifiers.id_RSASSA_PSS.equals(sigAlgOid))
9292
{
9393
RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
94-
94+
9595
return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1";
9696
}
97-
if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
97+
if (X9ObjectIdentifiers.ecdsa_with_SHA2.equals(sigAlgOid))
9898
{
99-
ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params);
100-
101-
return getDigestAlgName((ASN1ObjectIdentifier)ecDsaParams.getObjectAt(0)) + "withECDSA";
99+
AlgorithmIdentifier ecDsaParams = AlgorithmIdentifier.getInstance(params);
100+
101+
return getDigestAlgName(ecDsaParams.getAlgorithm()) + "withECDSA";
102102
}
103103
}
104104

105105
// deal with the "weird" ones.
106-
String algName = (String)algNames.get(sigAlgId.getAlgorithm());
106+
String algName = (String)algNames.get(sigAlgOid);
107107
if (algName != null)
108108
{
109109
return algName;
110110
}
111111

112-
return findAlgName(sigAlgId.getAlgorithm());
112+
return findAlgName(sigAlgOid);
113113
}
114-
114+
115115
/**
116116
* Return the digest algorithm using one of the standard JCA string
117117
* representations rather the the algorithm identifier (if possible).
@@ -162,7 +162,7 @@ private static String findAlgName(ASN1ObjectIdentifier algOid)
162162

163163
private static String lookupAlg(Provider prov, ASN1ObjectIdentifier algOid)
164164
{
165-
String algName = prov.getProperty("Alg.Alias.Signature." + algOid);
165+
String algName = prov.getProperty("Alg.Alias.Signature." + algOid);
166166

167167
if (algName != null)
168168
{

0 commit comments

Comments
 (0)