Skip to content

Commit 175151c

Browse files
committed
Refactoring in cms
1 parent 1375abc commit 175151c

5 files changed

Lines changed: 57 additions & 23 deletions

File tree

core/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static SubjectPublicKeyInfo getInstance(
2929
ASN1TaggedObject obj,
3030
boolean explicit)
3131
{
32-
return getInstance(ASN1Sequence.getInstance(obj, explicit));
32+
return new SubjectPublicKeyInfo(ASN1Sequence.getInstance(obj, explicit));
3333
}
3434

3535
public static SubjectPublicKeyInfo getInstance(
@@ -47,6 +47,14 @@ else if (obj != null)
4747
return null;
4848
}
4949

50+
public SubjectPublicKeyInfo(
51+
AlgorithmIdentifier algId,
52+
ASN1BitString publicKey)
53+
{
54+
this.keyData = publicKey;
55+
this.algId = algId;
56+
}
57+
5058
public SubjectPublicKeyInfo(
5159
AlgorithmIdentifier algId,
5260
ASN1Encodable publicKey)

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,7 @@ private SubjectPublicKeyInfo getSenderPublicKeyInfo(AlgorithmIdentifier recKeyAl
131131
private SubjectPublicKeyInfo getPublicKeyInfoFromOriginatorPublicKey(AlgorithmIdentifier recKeyAlgId,
132132
OriginatorPublicKey originatorPublicKey)
133133
{
134-
SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(
135-
recKeyAlgId,
136-
originatorPublicKey.getPublicKey().getBytes());
137-
138-
return pubInfo;
134+
return new SubjectPublicKeyInfo(recKeyAlgId, originatorPublicKey.getPublicKeyData());
139135
}
140136

141137
private SubjectPublicKeyInfo getPublicKeyInfoFromOriginatorId(OriginatorId origID)

pkix/src/main/java/org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ private SecretKey calculateAgreedWrapKey(AlgorithmIdentifier keyEncAlg, Algorith
145145
MQVuserKeyingMaterial ukm = MQVuserKeyingMaterial.getInstance(userKeyingMaterial.getOctets());
146146

147147
SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(
148-
getPrivateKeyAlgorithmIdentifier(),
149-
ukm.getEphemeralPublicKey().getPublicKey().getBytes());
148+
getPrivateKeyAlgorithmIdentifier(),
149+
ukm.getEphemeralPublicKey().getPublicKeyData());
150150

151151
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubInfo.getEncoded());
152152
KeyFactory fact = helper.createKeyFactory(keyEncAlg.getAlgorithm());

util/src/main/java/org/bouncycastle/asn1/cms/OriginatorIdentifierOrKey.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,30 +102,35 @@ public static OriginatorIdentifierOrKey getInstance(
102102
* @param o the object we want converted.
103103
* @exception IllegalArgumentException if the object cannot be converted.
104104
*/
105-
public static OriginatorIdentifierOrKey getInstance(
106-
Object o)
105+
public static OriginatorIdentifierOrKey getInstance(Object o)
107106
{
108107
if (o == null || o instanceof OriginatorIdentifierOrKey)
109108
{
110109
return (OriginatorIdentifierOrKey)o;
111110
}
112111

113-
if (o instanceof IssuerAndSerialNumber || o instanceof ASN1Sequence)
112+
if (o instanceof IssuerAndSerialNumber)
113+
{
114+
return new OriginatorIdentifierOrKey((IssuerAndSerialNumber)o);
115+
}
116+
117+
if (o instanceof ASN1Sequence)
114118
{
115119
return new OriginatorIdentifierOrKey(IssuerAndSerialNumber.getInstance(o));
116120
}
117121

118122
if (o instanceof ASN1TaggedObject)
119123
{
120-
ASN1TaggedObject tagged = ASN1TaggedObject.getInstance(o, BERTags.CONTEXT_SPECIFIC);
124+
ASN1TaggedObject taggedObject = (ASN1TaggedObject)o;
121125

122-
if (tagged.getTagNo() == 0)
126+
if (taggedObject.hasContextTag(0))
123127
{
124-
return new OriginatorIdentifierOrKey(SubjectKeyIdentifier.getInstance(tagged, false));
128+
return new OriginatorIdentifierOrKey(SubjectKeyIdentifier.getInstance(taggedObject, false));
125129
}
126-
else if (tagged.getTagNo() == 1)
130+
131+
if (taggedObject.hasContextTag(1))
127132
{
128-
return new OriginatorIdentifierOrKey(OriginatorPublicKey.getInstance(tagged, false));
133+
return new OriginatorIdentifierOrKey(OriginatorPublicKey.getInstance(taggedObject, false));
129134
}
130135
}
131136

@@ -149,19 +154,27 @@ public IssuerAndSerialNumber getIssuerAndSerialNumber()
149154

150155
public SubjectKeyIdentifier getSubjectKeyIdentifier()
151156
{
152-
if (id instanceof ASN1TaggedObject && ((ASN1TaggedObject)id).getTagNo() == 0)
157+
if (id instanceof ASN1TaggedObject)
153158
{
154-
return SubjectKeyIdentifier.getInstance((ASN1TaggedObject)id, false);
159+
ASN1TaggedObject taggedObject = (ASN1TaggedObject)id;
160+
if (taggedObject.hasContextTag(0))
161+
{
162+
return SubjectKeyIdentifier.getInstance(taggedObject, false);
163+
}
155164
}
156165

157166
return null;
158167
}
159168

160169
public OriginatorPublicKey getOriginatorKey()
161170
{
162-
if (id instanceof ASN1TaggedObject && ((ASN1TaggedObject)id).getTagNo() == 1)
171+
if (id instanceof ASN1TaggedObject)
163172
{
164-
return OriginatorPublicKey.getInstance((ASN1TaggedObject)id, false);
173+
ASN1TaggedObject taggedObject = (ASN1TaggedObject)id;
174+
if (taggedObject.hasContextTag(1))
175+
{
176+
return OriginatorPublicKey.getInstance(taggedObject, false);
177+
}
165178
}
166179

167180
return null;

util/src/main/java/org/bouncycastle/asn1/cms/OriginatorPublicKey.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.bouncycastle.asn1.cms;
22

3+
import org.bouncycastle.asn1.ASN1BitString;
34
import org.bouncycastle.asn1.ASN1EncodableVector;
45
import org.bouncycastle.asn1.ASN1Object;
56
import org.bouncycastle.asn1.ASN1Primitive;
@@ -24,8 +25,8 @@ public class OriginatorPublicKey
2425
extends ASN1Object
2526
{
2627
private AlgorithmIdentifier algorithm;
27-
private DERBitString publicKey;
28-
28+
private ASN1BitString publicKey;
29+
2930
public OriginatorPublicKey(
3031
AlgorithmIdentifier algorithm,
3132
byte[] publicKey)
@@ -34,6 +35,14 @@ public OriginatorPublicKey(
3435
this.publicKey = new DERBitString(publicKey);
3536
}
3637

38+
public OriginatorPublicKey(
39+
AlgorithmIdentifier algorithm,
40+
ASN1BitString publicKey)
41+
{
42+
this.algorithm = algorithm;
43+
this.publicKey = publicKey;
44+
}
45+
3746
private OriginatorPublicKey(
3847
ASN1Sequence seq)
3948
{
@@ -54,7 +63,7 @@ public static OriginatorPublicKey getInstance(
5463
ASN1TaggedObject obj,
5564
boolean explicit)
5665
{
57-
return getInstance(ASN1Sequence.getInstance(obj, explicit));
66+
return new OriginatorPublicKey(ASN1Sequence.getInstance(obj, explicit));
5867
}
5968

6069
/**
@@ -91,7 +100,15 @@ public AlgorithmIdentifier getAlgorithm()
91100
return algorithm;
92101
}
93102

103+
/**
104+
* @deprecated Use {@link #getPublicKeyData()} instead.
105+
*/
94106
public DERBitString getPublicKey()
107+
{
108+
return DERBitString.convert(publicKey);
109+
}
110+
111+
public ASN1BitString getPublicKeyData()
95112
{
96113
return publicKey;
97114
}

0 commit comments

Comments
 (0)