📄 x509nametest.java
字号:
// getValues test // Vector v1 = name1.getValues(X509Name.O); if (v1.size() != 1 || !v1.elementAt(0).equals("The Legion of the Bouncy Castle")) { fail("O test failed"); } Vector v2 = name1.getValues(X509Name.L); if (v2.size() != 1 || !v2.elementAt(0).equals("Melbourne")) { fail("L test failed"); } // // general subjects test // for (int i = 0; i != subjects.length; i++) { X509Name name = new X509Name(subjects[i]); bOut = new ByteArrayOutputStream(); aOut = new ASN1OutputStream(bOut); aOut.writeObject(name); aIn = new ASN1InputStream(new ByteArrayInputStream(bOut.toByteArray())); name = X509Name.getInstance(aIn.readObject()); if (!name.toString().equals(subjects[i])) { fail("failed regeneration test " + i); } } // // sort test // X509Name unsorted = new X509Name("SN=BBB + CN=AA"); if (!fromBytes(unsorted.getEncoded()).toString().equals("CN=AA+SN=BBB")) { fail("failed sort test 1"); } unsorted = new X509Name("CN=AA + SN=BBB"); if (!fromBytes(unsorted.getEncoded()).toString().equals("CN=AA+SN=BBB")) { fail("failed sort test 2"); } unsorted = new X509Name("SN=B + CN=AA"); if (!fromBytes(unsorted.getEncoded()).toString().equals("SN=B+CN=AA")) { fail("failed sort test 3"); } unsorted = new X509Name("CN=AA + SN=B"); if (!fromBytes(unsorted.getEncoded()).toString().equals("SN=B+CN=AA")) { fail("failed sort test 4"); } // // equality tests // equalityTest(new X509Name("CN=The Legion"), new X509Name("CN=The Legion")); equalityTest(new X509Name("CN= The Legion"), new X509Name("CN=The Legion")); equalityTest(new X509Name("CN=The Legion "), new X509Name("CN=The Legion")); equalityTest(new X509Name("CN= The Legion "), new X509Name("CN=The Legion")); equalityTest(new X509Name("CN= the legion "), new X509Name("CN=The Legion")); // // inequality to sequences // name1 = new X509Name("CN=The Legion"); if (name1.equals(new DERSequence())) { fail("inequality test with sequence"); } if (name1.equals(new DERSequence(new DERSet()))) { fail("inequality test with sequence and set"); } ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new DERObjectIdentifier("1.1")); v.add(new DERObjectIdentifier("1.1")); if (name1.equals(new DERSequence(new DERSet(new DERSet(v))))) { fail("inequality test with sequence and bad set"); } if (name1.equals(new DERSequence(new DERSet(new DERSet(v))), true)) { fail("inequality test with sequence and bad set"); } if (name1.equals(new DERSequence(new DERSet(new DERSequence())))) { fail("inequality test with sequence and short sequence"); } if (name1.equals(new DERSequence(new DERSet(new DERSequence())), true)) { fail("inequality test with sequence and short sequence"); } v = new ASN1EncodableVector(); v.add(new DERObjectIdentifier("1.1")); v.add(new DERSequence()); if (name1.equals(new DERSequence(new DERSet(new DERSequence(v))))) { fail("inequality test with sequence and bad sequence"); } if (name1.equals(null)) { fail("inequality test with null"); } if (name1.equals(null, true)) { fail("inequality test with null"); } // // this is contrived but it checks sorting of sets with equal elements // unsorted = new X509Name("CN=AA + CN=AA + CN=AA"); // // tagging test - only works if CHOICE implemented // /* ASN1TaggedObject tag = new DERTaggedObject(false, 1, new X509Name("CN=AA")); if (!tag.isExplicit()) { fail("failed to explicitly tag CHOICE object"); } X509Name name = X509Name.getInstance(tag, false); if (!name.equals(new X509Name("CN=AA"))) { fail("failed to recover tagged name"); } */ DERUTF8String testString = new DERUTF8String("The Legion of the Bouncy Castle"); byte[] encodedBytes = testString.getEncoded(); byte[] hexEncodedBytes = Hex.encode(encodedBytes); String hexEncodedString = "#" + new String(hexEncodedBytes); DERUTF8String converted = (DERUTF8String) new X509DefaultEntryConverter().getConvertedValue( X509Name.L , hexEncodedString); if (!converted.equals(testString)) { fail("failed X509DefaultEntryConverter test"); } // // try a weird value // } private boolean compareVectors(Vector a, Vector b) // for compatibility with early JDKs { if (a.size() != b.size()) { return false; } for (int i = 0; i != a.size(); i++) { if (!a.elementAt(i).equals(b.elementAt(i))) { return false; } } return true; } private void compositeTest() throws IOException { // // composite test // byte[] enc = Hex.decode("305e310b300906035504061302415531283026060355040a0c1f546865204c6567696f6e206f662074686520426f756e637920436173746c653125301006035504070c094d656c626f75726e653011060355040b0c0a4173636f742056616c65"); ASN1InputStream aIn = new ASN1InputStream(new ByteArrayInputStream(enc)); X509Name n = X509Name.getInstance(aIn.readObject()); if (!n.toString().equals("C=AU,O=The Legion of the Bouncy Castle,L=Melbourne+OU=Ascot Vale")) { fail("Failed composite to string test got: " + n.toString()); } if (!n.toString(true, X509Name.DefaultSymbols).equals("L=Melbourne+OU=Ascot Vale,O=The Legion of the Bouncy Castle,C=AU")) { fail("Failed composite to string test got: " + n.toString(true, X509Name.DefaultSymbols)); } n = new X509Name(true, "L=Melbourne+OU=Ascot Vale,O=The Legion of the Bouncy Castle,C=AU"); if (!n.toString().equals("C=AU,O=The Legion of the Bouncy Castle,L=Melbourne+OU=Ascot Vale")) { fail("Failed composite to string reversal test got: " + n.toString()); } n = new X509Name("C=AU, O=The Legion of the Bouncy Castle, L=Melbourne + OU=Ascot Vale"); ByteArrayOutputStream bOut = new ByteArrayOutputStream(); ASN1OutputStream aOut = new ASN1OutputStream(bOut); aOut.writeObject(n); byte[] enc2 = bOut.toByteArray(); if (!Arrays.areEqual(enc, enc2)) { fail("Failed composite string to encoding test"); } } private void equalityTest(X509Name x509Name, X509Name x509Name1) { if (!x509Name.equals(x509Name1)) { fail("equality test failed for " + x509Name + " : " + x509Name1); } if (!x509Name.equals(x509Name1, true)) { fail("equality test failed for " + x509Name + " : " + x509Name1); } } public static void main( String[] args) { runTest(new X509NameTest()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -