private static boolean matchStringType(ASN1Encodable atvValue, StringType stringType) { boolean correctStringType = true; switch (stringType) { case bmpString: correctStringType = (atvValue instanceof DERBMPString); break; case printableString: correctStringType = (atvValue instanceof DERPrintableString); break; case teletexString: correctStringType = (atvValue instanceof DERT61String); break; case utf8String: correctStringType = (atvValue instanceof DERUTF8String); break; case ia5String: correctStringType = (atvValue instanceof DERIA5String); break; default: throw new RuntimeException("should not reach here, unknown StringType " + stringType); } // end switch return correctStringType; }
public static DirectoryString getInstance(Object o) { if (o == null || o instanceof DirectoryString) { return (DirectoryString)o; } if (o instanceof DERT61String) { return new DirectoryString((DERT61String)o); } if (o instanceof DERPrintableString) { return new DirectoryString((DERPrintableString)o); } if (o instanceof DERUniversalString) { return new DirectoryString((DERUniversalString)o); } if (o instanceof DERUTF8String) { return new DirectoryString((DERUTF8String)o); } if (o instanceof DERBMPString) { return new DirectoryString((DERBMPString)o); } throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName()); }
private String dumpString(ASN1String asn1String) { StringBuilder sb = new StringBuilder(); sb.append(indentSequence.toString(indentLevel)); if (asn1String instanceof DERBMPString) { sb.append("BMP STRING="); } else if (asn1String instanceof DERGeneralString) { sb.append("GENERAL STRING="); } else if (asn1String instanceof DERIA5String) { sb.append("IA5 STRING="); } else if (asn1String instanceof DERNumericString) { sb.append("NUMERIC STRING="); } else if (asn1String instanceof DERPrintableString) { sb.append("PRINTABLE STRING="); } else if (asn1String instanceof DERT61String) { sb.append("TELETEX STRING="); } else if (asn1String instanceof DERUniversalString) { sb.append("UNIVERSAL STRING="); } else if (asn1String instanceof DERUTF8String) { sb.append("UTF8 STRING="); } else if (asn1String instanceof DERVisibleString) { sb.append("VISIBLE STRING="); } else { sb.append("UNKNOWN STRING="); } sb.append("'"); sb.append(asn1String.getString()); sb.append("'"); sb.append(NEWLINE); return sb.toString(); }
private DirectoryString( DERT61String string) { this.string = string; }
private void checkDirectoryString(ASN1ObjectIdentifier extType, QaDirectoryString conf, StringBuilder failureMsg, byte[] extensionValue, Extensions requestedExtensions, ExtensionControl extControl) { if (conf == null) { byte[] expected = getExpectedExtValue(extType, requestedExtensions, extControl); if (!Arrays.equals(expected, extensionValue)) { addViolation(failureMsg, "extension values", hex(extensionValue), (expected == null) ? "not present" : hex(expected)); } return; } ASN1Primitive asn1; try { asn1 = ASN1Primitive.fromByteArray(extensionValue); } catch (IOException ex) { failureMsg.append("invalid syntax of extension value; "); return; } boolean correctStringType; switch (conf.type()) { case bmpString: correctStringType = (asn1 instanceof DERBMPString); break; case printableString: correctStringType = (asn1 instanceof DERPrintableString); break; case teletexString: correctStringType = (asn1 instanceof DERT61String); break; case utf8String: correctStringType = (asn1 instanceof DERUTF8String); break; default: throw new RuntimeException("should not reach here, unknown DirectoryStringType " + conf.type()); } // end switch if (!correctStringType) { failureMsg.append("extension value is not of type DirectoryString.") .append(conf.text()).append("; "); return; } String extTextValue = ((ASN1String) asn1).getString(); if (!conf.text().equals(extTextValue)) { addViolation(failureMsg, "content", extTextValue, conf.text()); } }
public TestResult perform() { byte[] data = { 0, 1, 0, 1, 0, 0, 1 }; ASN1Primitive values[] = { new BERConstructedOctetString(data), new BERSequence(new DERPrintableString("hello world")), new BERSet(new DERPrintableString("hello world")), new BERTaggedObject(0, new DERPrintableString("hello world")), new DERApplicationSpecific(0, data), new DERBitString(data), new DERBMPString("hello world"), new DERBoolean(true), new DERBoolean(false), new DEREnumerated(100), new DERGeneralizedTime("20070315173729Z"), new DERGeneralString("hello world"), new DERIA5String("hello"), new DERInteger(1000), new DERNull(), new DERNumericString("123456"), new DERObjectIdentifier("1.1.1.10000.1"), new DEROctetString(data), new DERPrintableString("hello world"), new DERSequence(new DERPrintableString("hello world")), new DERSet(new DERPrintableString("hello world")), new DERT61String("hello world"), new DERTaggedObject(0, new DERPrintableString("hello world")), new DERUniversalString(data), new DERUTCTime(new Date()), new DERUTF8String("hello world"), new DERVisibleString("hello world") }; try { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); ASN1OutputStream aOut = new ASN1OutputStream(bOut); for (int i = 0; i != values.length; i++) { aOut.writeObject(values[i]); } ASN1Primitive[] readValues = new ASN1Primitive[values.length]; ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray()); ASN1InputStream aIn = new ASN1InputStream(bIn); for (int i = 0; i != values.length; i++) { ASN1Primitive o = aIn.readObject(); if (!o.equals(values[i])) { return new SimpleTestResult(false, getName() + ": Failed equality test for " + o.getClass()); } if (o.hashCode() != values[i].hashCode()) { return new SimpleTestResult(false, getName() + ": Failed hashCode test for " + o.getClass()); } } } catch (Exception e) { return new SimpleTestResult(false, getName() + ": Failed - exception " + e.toString(), e); } return new SimpleTestResult(true, getName() + ": Okay"); }