Skip to content

Commit d6a0dcb

Browse files
committed
minor reformating.
1 parent 401932a commit d6a0dcb

File tree

6 files changed

+147
-2
lines changed

6 files changed

+147
-2
lines changed

pg/src/main/java/org/bouncycastle/bcpg/SignatureSubpacketInputStream.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
1414
import org.bouncycastle.bcpg.sig.KeyFlags;
1515
import org.bouncycastle.bcpg.sig.NotationData;
16+
import org.bouncycastle.bcpg.sig.PolicyURI;
1617
import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
1718
import org.bouncycastle.bcpg.sig.PrimaryUserID;
1819
import org.bouncycastle.bcpg.sig.RegularExpression;
@@ -35,7 +36,7 @@ public class SignatureSubpacketInputStream
3536
implements SignatureSubpacketTags
3637
{
3738
private final InputStream in;
38-
private final int limit;
39+
private final int limit;
3940

4041
public SignatureSubpacketInputStream(
4142
InputStream in)
@@ -45,7 +46,7 @@ public SignatureSubpacketInputStream(
4546

4647
public SignatureSubpacketInputStream(
4748
InputStream in,
48-
int limit)
49+
int limit)
4950
{
5051
this.in = in;
5152
this.limit = limit;
@@ -167,6 +168,8 @@ else if (l == 255)
167168
return new PreferredAlgorithms(type, isCritical, isLongLength, data);
168169
case KEY_FLAGS:
169170
return new KeyFlags(isCritical, isLongLength, data);
171+
case POLICY_URL:
172+
return new PolicyURI(isCritical, isLongLength, data);
170173
case PRIMARY_USER_ID:
171174
return new PrimaryUserID(isCritical, isLongLength, data);
172175
case SIGNER_USER_ID:
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.bouncycastle.bcpg.sig;
2+
3+
import org.bouncycastle.bcpg.SignatureSubpacket;
4+
import org.bouncycastle.bcpg.SignatureSubpacketTags;
5+
import org.bouncycastle.util.Arrays;
6+
import org.bouncycastle.util.Strings;
7+
8+
public class PolicyURI
9+
extends SignatureSubpacket
10+
{
11+
public PolicyURI(boolean critical, boolean isLongLength, byte[] data)
12+
{
13+
super(SignatureSubpacketTags.POLICY_URL, critical, isLongLength, data);
14+
}
15+
16+
public PolicyURI(boolean critical, String uri)
17+
{
18+
this(critical, false, Strings.toUTF8ByteArray(uri));
19+
}
20+
21+
public String getURI()
22+
{
23+
return Strings.fromUTF8ByteArray(data);
24+
}
25+
26+
public byte[] getRawURI()
27+
{
28+
return Arrays.clone(data);
29+
}
30+
}

pg/src/main/java/org/bouncycastle/openpgp/PGPSignatureSubpacketGenerator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
1717
import org.bouncycastle.bcpg.sig.KeyFlags;
1818
import org.bouncycastle.bcpg.sig.NotationData;
19+
import org.bouncycastle.bcpg.sig.PolicyURI;
1920
import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
2021
import org.bouncycastle.bcpg.sig.PrimaryUserID;
2122
import org.bouncycastle.bcpg.sig.Revocable;
@@ -192,6 +193,11 @@ public void setPreferredAEADAlgorithms(boolean isCritical, int[] algorithms)
192193
algorithms));
193194
}
194195

196+
public void addPolicyURI(boolean isCritical, String policyUri)
197+
{
198+
packets.add(new PolicyURI(isCritical, policyUri));
199+
}
200+
195201
/**
196202
* Set this keys key flags.
197203
* See {@link PGPKeyFlags}.

pg/src/main/java/org/bouncycastle/openpgp/PGPSignatureSubpacketVector.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
1717
import org.bouncycastle.bcpg.sig.KeyFlags;
1818
import org.bouncycastle.bcpg.sig.NotationData;
19+
import org.bouncycastle.bcpg.sig.PolicyURI;
1920
import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
2021
import org.bouncycastle.bcpg.sig.PrimaryUserID;
2122
import org.bouncycastle.bcpg.sig.RegularExpression;
@@ -407,6 +408,28 @@ public boolean isExportable()
407408
return exportable == null || exportable.isExportable();
408409
}
409410

411+
public PolicyURI getPolicyURI()
412+
{
413+
SignatureSubpacket p = getSubpacket(SignatureSubpacketTags.POLICY_URL);
414+
if (p == null)
415+
{
416+
return null;
417+
}
418+
return new PolicyURI(p.isCritical(), p.isLongLength(), p.getData());
419+
}
420+
421+
public PolicyURI[] getPolicyURIs()
422+
{
423+
SignatureSubpacket[] subpackets = getSubpackets(SignatureSubpacketTags.POLICY_URL);
424+
PolicyURI[] policyURIS = new PolicyURI[subpackets.length];
425+
for (int i = 0; i < subpackets.length; i++)
426+
{
427+
SignatureSubpacket p = subpackets[i];
428+
policyURIS[i] = new PolicyURI(p.isCritical(), p.isLongLength(), p.getData());
429+
}
430+
return policyURIS;
431+
}
432+
410433
public RegularExpression getRegularExpression()
411434
{
412435
SignatureSubpacket p = getSubpacket(SignatureSubpacketTags.REG_EXP);
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package org.bouncycastle.openpgp.test;
2+
3+
import java.io.ByteArrayInputStream;
4+
import java.io.ByteArrayOutputStream;
5+
import java.io.IOException;
6+
7+
import org.bouncycastle.bcpg.ArmoredInputStream;
8+
import org.bouncycastle.bcpg.sig.PolicyURI;
9+
import org.bouncycastle.openpgp.PGPObjectFactory;
10+
import org.bouncycastle.openpgp.PGPSignature;
11+
import org.bouncycastle.openpgp.PGPSignatureList;
12+
import org.bouncycastle.openpgp.bc.BcPGPObjectFactory;
13+
import org.bouncycastle.util.Strings;
14+
import org.bouncycastle.util.test.SimpleTest;
15+
16+
public class PolicyURITest
17+
extends SimpleTest
18+
{
19+
20+
public static void main(String[] args)
21+
{
22+
runTest(new PolicyURITest());
23+
}
24+
25+
@Override
26+
public String getName()
27+
{
28+
return "PolicyURITest";
29+
}
30+
31+
@Override
32+
public void performTest()
33+
throws Exception
34+
{
35+
testGetURI();
36+
testParsingFromSignature();
37+
}
38+
39+
public void testGetURI()
40+
{
41+
PolicyURI policyURI = new PolicyURI(true, "https://bouncycastle.org/policy/alice.txt");
42+
isTrue(policyURI.isCritical());
43+
isEquals("https://bouncycastle.org/policy/alice.txt", policyURI.getURI());
44+
45+
policyURI = new PolicyURI(false, "https://bouncycastle.org/policy/bob.txt");
46+
isTrue(!policyURI.isCritical());
47+
isEquals("https://bouncycastle.org/policy/bob.txt", policyURI.getURI());
48+
}
49+
50+
public void testParsingFromSignature()
51+
throws IOException
52+
{
53+
String signatureWithPolicyUri = "-----BEGIN PGP SIGNATURE-----\n" +
54+
"\n" +
55+
"iKQEHxYKAFYFAmIRIAgJEDXXpSQjWzWvFiEEVSc3S9X9kRTsyfjqNdelJCNbNa8u\n" +
56+
"Gmh0dHBzOi8vZXhhbXBsZS5vcmcvfmFsaWNlL3NpZ25pbmctcG9saWN5LnR4dAAA\n" +
57+
"NnwBAImA2KdiS/7kLWoQpwc+A6N2PtAvLxG0gkZmGzYgRWvGAP9g4GLAA/GQ0plr\n" +
58+
"Xn7uLnOG49S1fFA9P+R1Dd8Qoa4+Dg==\n" +
59+
"=OPUu\n" +
60+
"-----END PGP SIGNATURE-----\n";
61+
62+
ByteArrayInputStream byteIn = new ByteArrayInputStream(Strings.toByteArray(signatureWithPolicyUri));
63+
ArmoredInputStream armorIn = new ArmoredInputStream(byteIn);
64+
PGPObjectFactory objectFactory = new BcPGPObjectFactory(armorIn);
65+
66+
PGPSignatureList signatures = (PGPSignatureList)objectFactory.nextObject();
67+
PGPSignature signature = signatures.get(0);
68+
69+
PolicyURI policyURI = signature.getHashedSubPackets().getPolicyURI();
70+
isEquals("https://example.org/~alice/signing-policy.txt", policyURI.getURI());
71+
72+
PolicyURI other = new PolicyURI(false, "https://example.org/~alice/signing-policy.txt");
73+
74+
ByteArrayOutputStream first = new ByteArrayOutputStream();
75+
policyURI.encode(first);
76+
77+
ByteArrayOutputStream second = new ByteArrayOutputStream();
78+
other.encode(second);
79+
80+
areEqual(first.toByteArray(), second.toByteArray());
81+
}
82+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class RegressionTest
4444
new PGPSessionKeyTest(),
4545
new PGPCanonicalizedDataGeneratorTest(),
4646
new RegexTest(),
47+
new PolicyURITest(),
4748
new ArmoredOutputStreamUTF8Test()
4849
};
4950

0 commit comments

Comments
 (0)