use of org.bouncycastle.asn1.x500.DirectoryString in project signer by demoiselle.
the class PolicyInfo method parse.
@Override
public void parse(ASN1Primitive derObject) {
ASN1Sequence derSequence = ASN1Object.getDERSequence(derObject);
ASN1Primitive firstObject = derSequence.getObjectAt(0).toASN1Primitive();
this.policyName = new DirectoryString(firstObject.toString());
ASN1Primitive secondObject = derSequence.getObjectAt(1).toASN1Primitive();
String fieldOfApplication = secondObject.toString();
this.fieldOfApplication = new DirectoryString(fieldOfApplication);
this.signingPeriod = new SigningPeriod();
this.signingPeriod.parse(derSequence.getObjectAt(2).toASN1Primitive());
int indice = 3;
ASN1Primitive revocationObject = derSequence.getObjectAt(indice).toASN1Primitive();
if (!(secondObject instanceof DERTaggedObject)) {
indice = 4;
}
if (indice == 3) {
this.revocationDate = new Time();
this.revocationDate.parse(revocationObject);
}
}
use of org.bouncycastle.asn1.x500.DirectoryString in project keystore-explorer by kaikramer.
the class X509Ext method getNamingAuthorityStringValue.
private String getNamingAuthorityStringValue(NamingAuthority namingAuthority, int indentLevel) throws IOException {
// @formatter:off
/*
NamingAuthority ::= SEQUENCE
{
namingAuthorityId OBJECT IDENTIFIER OPTIONAL,
namingAuthorityUrl IA5String OPTIONAL,
namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
}
*/
// @formatter:on
StringBuilder sb = new StringBuilder();
ASN1ObjectIdentifier namingAuthorityId = namingAuthority.getNamingAuthorityId();
String namingAuthorityUrl = namingAuthority.getNamingAuthorityUrl();
DirectoryString namingAuthorityText = namingAuthority.getNamingAuthorityText();
if (namingAuthorityId != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.NamingAuthorityOID"), namingAuthorityId.getId()));
sb.append(NEWLINE);
}
if (namingAuthorityUrl != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.NamingAuthorityURL"), namingAuthorityUrl));
sb.append(NEWLINE);
}
if (namingAuthorityText != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.NamingAuthorityText"), namingAuthorityText.toString()));
sb.append(NEWLINE);
}
return sb.toString();
}
use of org.bouncycastle.asn1.x500.DirectoryString in project keystore-explorer by kaikramer.
the class X509Ext method getAdmissionStringValue.
private String getAdmissionStringValue(byte[] octets) throws IOException {
// @formatter:off
/*
AdmissionSyntax ::= SEQUENCE
{
admissionAuthority GeneralName OPTIONAL,
contentsOfAdmissions SEQUENCE OF Admissions
}
Admissions ::= SEQUENCE
{
admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
professionInfos SEQUENCE OF ProfessionInfo
}
NamingAuthority ::= SEQUENCE
{
namingAuthorityId OBJECT IDENTIFIER OPTIONAL,
namingAuthorityUrl IA5String OPTIONAL,
namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
}
ProfessionInfo ::= SEQUENCE
{
namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
addProfessionInfo OCTET STRING OPTIONAL
}
*/
// @formatter:on
StringBuilder sb = new StringBuilder();
int indentLevel = 1;
AdmissionSyntax admissionSyntax = AdmissionSyntax.getInstance(ASN1Sequence.getInstance(octets));
GeneralName admissionAuthority = admissionSyntax.getAdmissionAuthority();
if (admissionAuthority != null) {
sb.append(MessageFormat.format(res.getString("Admission.AdmissionAuthority"), GeneralNameUtil.toString(admissionAuthority)));
sb.append(NEWLINE);
}
Admissions[] admissions = admissionSyntax.getContentsOfAdmissions();
int admissionNr = 0;
for (Admissions admission : admissions) {
sb.append(MessageFormat.format(res.getString("Admission.Admission"), ++admissionNr));
sb.append(NEWLINE);
admissionAuthority = admission.getAdmissionAuthority();
NamingAuthority namingAuthority = admission.getNamingAuthority();
ProfessionInfo[] professionInfos = admission.getProfessionInfos();
if (admissionAuthority != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.AdmissionAuthority"), GeneralNameUtil.toString(admissionAuthority)));
sb.append(NEWLINE);
}
if (namingAuthority != null) {
sb.append(getNamingAuthorityStringValue(namingAuthority, indentLevel));
}
for (ProfessionInfo professionInfo : professionInfos) {
namingAuthority = professionInfo.getNamingAuthority();
ASN1ObjectIdentifier[] professionOIDs = professionInfo.getProfessionOIDs();
String registrationNumber = professionInfo.getRegistrationNumber();
ASN1OctetString addProfessionInfo = professionInfo.getAddProfessionInfo();
sb.append(INDENT.toString(indentLevel));
sb.append(res.getString("Admission.ProfessionInfo"));
sb.append(NEWLINE);
indentLevel++;
if (namingAuthority != null) {
sb.append(getNamingAuthorityStringValue(namingAuthority, indentLevel));
}
DirectoryString[] professionItems = professionInfo.getProfessionItems();
for (DirectoryString professionItem : professionItems) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.ProfessionItem"), professionItem.toString()));
sb.append(NEWLINE);
}
if (professionOIDs != null) {
for (ASN1ObjectIdentifier professionOID : professionOIDs) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.ProfessionOID"), professionOID.getId()));
sb.append(NEWLINE);
}
}
if (registrationNumber != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.RegistrationNumber"), registrationNumber));
sb.append(NEWLINE);
}
if (addProfessionInfo != null) {
sb.append(INDENT.toString(indentLevel));
sb.append(MessageFormat.format(res.getString("Admission.AddProfessionInfo"), HexUtil.getHexString(addProfessionInfo.getOctets())));
sb.append(NEWLINE);
}
indentLevel--;
}
}
return sb.toString();
}
use of org.bouncycastle.asn1.x500.DirectoryString in project keystore-explorer by kaikramer.
the class GeneralNameUtil method safeToString.
// @formatter:off
/*
* GeneralName ::= CHOICE
* {
* otherName [0] AnotherName,
* rfc822Name [1] DERIA5String,
* dNSName [2] DERIA5String,
* x400Address [3] ORAddress,
* directoryName [4] Name,
* ediPartyName [5] EDIPartyName,
* uniformResourceIdentifier [6] DERIA5String,
* iPAddress [7] OCTET STRING,
* registeredID [8] OBJECT IDENTIFIER
* }
*
* AnotherName ::= ASN1Sequence
* {
* type-id OBJECT IDENTIFIER,
* value [0] EXPLICIT ANY DEFINED BY type-id
* }
*
* EDIPartyName ::= ASN1Sequence
* {
* nameAssigner [0] DirectoryString OPTIONAL,
* partyName [1] DirectoryString
* }
*
* DirectoryString ::= CHOICE
* {
* teletexString TeletexString (SIZE (1..MAX),
* printableString PrintableString (SIZE (1..MAX)),
* universalString UniversalString (SIZE (1..MAX)),
* utf8String UTF8String (SIZE (1.. MAX)),
* bmpString BMPString (SIZE(1..MAX))
* }
*/
// @formatter:on
/**
* Get string representation for General names that cannot cause a
* IOException to be thrown. Unsupported are ediPartyName, otherName and
* x400Address. Returns a blank string for these.
*
* @param generalName
* General name
* @param addLinkForURI
* If true, convert URI to a clickable link
* @return String representation of general name
*/
public static String safeToString(GeneralName generalName, boolean addLinkForURI) {
if (generalName == null) {
return "";
}
switch(generalName.getTagNo()) {
case GeneralName.directoryName:
X500Name directoryName = (X500Name) generalName.getName();
return MessageFormat.format(res.getString("GeneralNameUtil.DirectoryGeneralName"), directoryName.toString());
case GeneralName.dNSName:
DERIA5String dnsName = (DERIA5String) generalName.getName();
return MessageFormat.format(res.getString("GeneralNameUtil.DnsGeneralName"), dnsName.getString());
case GeneralName.iPAddress:
byte[] ipAddressBytes = ((ASN1OctetString) generalName.getName()).getOctets();
String ipAddressString = "";
try {
ipAddressString = InetAddress.getByAddress(ipAddressBytes).getHostAddress();
} catch (UnknownHostException e) {
// ignore -> results in empty IP address string
}
return MessageFormat.format(res.getString("GeneralNameUtil.IpAddressGeneralName"), ipAddressString);
case GeneralName.registeredID:
ASN1ObjectIdentifier registeredId = (ASN1ObjectIdentifier) generalName.getName();
return MessageFormat.format(res.getString("GeneralNameUtil.RegisteredIdGeneralName"), ObjectIdUtil.toString(registeredId));
case GeneralName.rfc822Name:
DERIA5String rfc822Name = (DERIA5String) generalName.getName();
return MessageFormat.format(res.getString("GeneralNameUtil.Rfc822GeneralName"), rfc822Name.getString());
case GeneralName.uniformResourceIdentifier:
DERIA5String uri = (DERIA5String) generalName.getName();
String link = addLinkForURI ? "<a href=\"" + uri.getString() + "\">" + uri.getString() + "</a>" : uri.getString();
return MessageFormat.format(res.getString("GeneralNameUtil.UriGeneralName"), link);
case GeneralName.otherName:
// we currently only support UPN in otherName
String upn = parseUPN(generalName);
return MessageFormat.format(res.getString("GeneralNameUtil.OtherGeneralName"), "UPN", upn);
default:
return "";
}
}
use of org.bouncycastle.asn1.x500.DirectoryString in project jasn1 by openmuc.
the class EDIPartyName method decode.
public int decode(InputStream is, boolean withTag) throws IOException {
int codeLength = 0;
int subCodeLength = 0;
BerTag berTag = new BerTag();
if (withTag) {
codeLength += tag.decodeAndCheck(is);
}
BerLength length = new BerLength();
codeLength += length.decode(is);
int totalLength = length.val;
if (totalLength == -1) {
subCodeLength += berTag.decode(is);
if (berTag.tagNumber == 0 && berTag.tagClass == 0 && berTag.primitive == 0) {
int nextByte = is.read();
if (nextByte != 0) {
if (nextByte == -1) {
throw new EOFException("Unexpected end of input stream.");
}
throw new IOException("Decoded sequence has wrong end of contents octets");
}
codeLength += subCodeLength + 1;
return codeLength;
}
if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 0)) {
subCodeLength += length.decode(is);
nameAssigner = new DirectoryString();
int choiceDecodeLength = nameAssigner.decode(is, null);
if (choiceDecodeLength != 0) {
subCodeLength += choiceDecodeLength;
subCodeLength += berTag.decode(is);
} else {
nameAssigner = null;
}
}
if (berTag.tagNumber == 0 && berTag.tagClass == 0 && berTag.primitive == 0) {
int nextByte = is.read();
if (nextByte != 0) {
if (nextByte == -1) {
throw new EOFException("Unexpected end of input stream.");
}
throw new IOException("Decoded sequence has wrong end of contents octets");
}
codeLength += subCodeLength + 1;
return codeLength;
}
if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 1)) {
subCodeLength += length.decode(is);
partyName = new DirectoryString();
int choiceDecodeLength = partyName.decode(is, null);
if (choiceDecodeLength != 0) {
subCodeLength += choiceDecodeLength;
subCodeLength += berTag.decode(is);
} else {
partyName = null;
}
}
int nextByte = is.read();
if (berTag.tagNumber != 0 || berTag.tagClass != 0 || berTag.primitive != 0 || nextByte != 0) {
if (nextByte == -1) {
throw new EOFException("Unexpected end of input stream.");
}
throw new IOException("Decoded sequence has wrong end of contents octets");
}
codeLength += subCodeLength + 1;
return codeLength;
}
codeLength += totalLength;
subCodeLength += berTag.decode(is);
if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 0)) {
subCodeLength += length.decode(is);
nameAssigner = new DirectoryString();
subCodeLength += nameAssigner.decode(is, null);
subCodeLength += berTag.decode(is);
}
if (berTag.equals(BerTag.CONTEXT_CLASS, BerTag.CONSTRUCTED, 1)) {
subCodeLength += length.decode(is);
partyName = new DirectoryString();
subCodeLength += partyName.decode(is, null);
if (subCodeLength == totalLength) {
return codeLength;
}
}
throw new IOException("Unexpected end of sequence, length tag: " + totalLength + ", actual sequence length: " + subCodeLength);
}
Aggregations