| package org.bouncycastle.asn1.test; |
| |
| import org.bouncycastle.asn1.x509.GeneralName; |
| import org.bouncycastle.asn1.x509.GeneralNames; |
| import org.bouncycastle.asn1.x509.GeneralNamesBuilder; |
| import org.bouncycastle.util.Arrays; |
| import org.bouncycastle.util.encoders.Hex; |
| import org.bouncycastle.util.test.SimpleTest; |
| |
| public class GeneralNameTest |
| extends SimpleTest |
| { |
| private static final byte[] ipv4 = Hex.decode("87040a090800"); |
| private static final byte[] ipv4WithMask1 = Hex.decode("87080a090800ffffff00"); |
| private static final byte[] ipv4WithMask2 = Hex.decode("87080a090800ffff8000"); |
| private static final byte[] ipv4WithMask3 = Hex.decode("87080a090800ffffc000"); |
| |
| private static final byte[] ipv6a = Hex.decode("871020010db885a308d313198a2e03707334"); |
| private static final byte[] ipv6b = Hex.decode("871020010db885a3000013198a2e03707334"); |
| private static final byte[] ipv6c = Hex.decode("871000000000000000000000000000000001"); |
| private static final byte[] ipv6d = Hex.decode("871020010db885a3000000008a2e03707334"); |
| private static final byte[] ipv6e = Hex.decode("871020010db885a3000000008a2e0a090800"); |
| private static final byte[] ipv6f = Hex.decode("872020010db885a3000000008a2e0a090800ffffffffffff00000000000000000000"); |
| private static final byte[] ipv6g = Hex.decode("872020010db885a3000000008a2e0a090800ffffffffffffffffffffffffffffffff"); |
| private static final byte[] ipv6h = Hex.decode("872020010db885a300000000000000000000ffffffffffff00000000000000000000"); |
| private static final byte[] ipv6i = Hex.decode("872020010db885a300000000000000000000fffffffffffe00000000000000000000"); |
| private static final byte[] ipv6j = Hex.decode("872020010db885a300000000000000000000ffffffffffff80000000000000000000"); |
| |
| public String getName() |
| { |
| return "GeneralName"; |
| } |
| |
| public void performTest() |
| throws Exception |
| { |
| GeneralName nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4)) |
| { |
| fail("ipv4 encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/255.255.255.0"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask1)) |
| { |
| fail("ipv4 with netmask 1 encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/24"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask1)) |
| { |
| fail("ipv4 with netmask 2 encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/255.255.128.0"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask2)) |
| { |
| fail("ipv4 with netmask 3a encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/17"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask2)) |
| { |
| fail("ipv4 with netmask 3b encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/255.255.192.0"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask3)) |
| { |
| fail("ipv4 with netmask 3a encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "10.9.8.0/18"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv4WithMask3)) |
| { |
| fail("ipv4 with netmask 3b encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3:08d3:1319:8a2e:0370:7334"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6a)) |
| { |
| fail("ipv6 with netmask encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::1319:8a2e:0370:7334"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6b)) |
| { |
| fail("ipv6b encoding failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "::1"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6c)) |
| { |
| fail("ipv6c failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::8a2e:0370:7334"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6d)) |
| { |
| fail("ipv6d failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::8a2e:10.9.8.0"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6e)) |
| { |
| fail("ipv6e failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::8a2e:10.9.8.0/ffff:ffff:ffff::0000"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6f)) |
| { |
| fail("ipv6f failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::8a2e:10.9.8.0/128"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6g)) |
| { |
| fail("ipv6g failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/48"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6h)) |
| { |
| fail("ipv6h failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/47"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6i)) |
| { |
| fail("ipv6i failed"); |
| } |
| |
| nm = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/49"); |
| if (!Arrays.areEqual(nm.getEncoded(), ipv6j)) |
| { |
| fail("ipv6j failed"); |
| } |
| |
| GeneralNamesBuilder genNamesBuilder = new GeneralNamesBuilder(); |
| |
| GeneralName name1 = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::8a2e:0370:7334"); |
| |
| genNamesBuilder.addName(name1); |
| |
| if (!genNamesBuilder.build().equals(new GeneralNames(name1))) |
| { |
| fail("single build failed"); |
| } |
| |
| GeneralName nm1 = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/48"); |
| GeneralName nm2 = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/47"); |
| GeneralName nm3 = new GeneralName(GeneralName.iPAddress, "2001:0db8:85a3::/49"); |
| |
| genNamesBuilder = new GeneralNamesBuilder(); |
| |
| genNamesBuilder.addName(name1); |
| |
| genNamesBuilder.addNames(new GeneralNames(new GeneralName[]{nm1, nm2})); |
| |
| genNamesBuilder.addName(nm3); |
| |
| if (!genNamesBuilder.build().equals(new GeneralNames(new GeneralName[] { name1, nm1, nm2, nm3 }))) |
| { |
| fail("multi build failed"); |
| } |
| } |
| |
| public static void main( |
| String[] args) |
| { |
| runTest(new GeneralNameTest()); |
| } |
| } |