Skip to content

Commit d95afbf

Browse files
committed
updated BufferingContentSigner to use ExtendedContentSigner
1 parent 053d87b commit d95afbf

File tree

3 files changed

+35
-14
lines changed

3 files changed

+35
-14
lines changed

pkix/src/main/java/org/bouncycastle/cms/SignerInfoGeneratorBuilder.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,21 +147,25 @@ private SignerInfoGenerator createGenerator(ContentSigner contentSigner, SignerI
147147
}
148148
else
149149
{
150+
AlgorithmIdentifier digestAlgorithmIdentifier = null;
151+
150152
if (contentSigner instanceof ExtendedContentSigner)
151153
{
152-
digester = digestProvider.get(((ExtendedContentSigner)contentSigner).getDigestAlgorithmIdentifier());
154+
digestAlgorithmIdentifier = ((ExtendedContentSigner)contentSigner).getDigestAlgorithmIdentifier();
155+
}
156+
157+
if (digestAlgorithmIdentifier == null)
158+
{
159+
digestAlgorithmIdentifier = digAlgFinder.find(contentSigner.getAlgorithmIdentifier());
160+
}
161+
162+
if (digestAlgorithmIdentifier != null)
163+
{
164+
digester = digestProvider.get(digestAlgorithmIdentifier);
153165
}
154166
else
155167
{
156-
AlgorithmIdentifier digAlg = digAlgFinder.find(contentSigner.getAlgorithmIdentifier());
157-
if (digAlg != null)
158-
{
159-
digester = digestProvider.get(digAlg);
160-
}
161-
else
162-
{
163-
throw new OperatorCreationException("no digest algorithm specified for signature algorithm");
164-
}
168+
throw new OperatorCreationException("no digest algorithm specified for signature algorithm");
165169
}
166170
}
167171

pkix/src/main/java/org/bouncycastle/operator/BufferingContentSigner.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* block when ready for signing.
1111
*/
1212
public class BufferingContentSigner
13-
implements ContentSigner
13+
implements ExtendedContentSigner
1414
{
1515
private final ContentSigner contentSigner;
1616
private final OutputStream output;
@@ -67,4 +67,21 @@ public byte[] getSignature()
6767
{
6868
return contentSigner.getSignature();
6969
}
70+
71+
72+
/**
73+
* Return the algorithm identifier describing the digest
74+
* algorithm used by this signature algorithm, if known.
75+
*
76+
* @return algorithm oid and parameters, null otherwise.
77+
*/
78+
public AlgorithmIdentifier getDigestAlgorithmIdentifier()
79+
{
80+
if (contentSigner instanceof ExtendedContentSigner)
81+
{
82+
return ((ExtendedContentSigner)contentSigner).getDigestAlgorithmIdentifier();
83+
}
84+
85+
return null;
86+
}
7087
}

pkix/src/main/java/org/bouncycastle/operator/ExtendedContentSigner.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ public interface ExtendedContentSigner
99
extends ContentSigner
1010
{
1111
/**
12-
* Return the algorithm identifier describing the signature
13-
* algorithm and parameters this signer generates.
12+
* Return the algorithm identifier describing the digest algorithm used by
13+
* this signature algorithm and parameters this signer generates.
1414
*
15-
* @return algorithm oid and parameters.
15+
* @return algorithm oid and parameters, null if unknown.
1616
*/
1717
AlgorithmIdentifier getDigestAlgorithmIdentifier();
1818
}

0 commit comments

Comments
 (0)