org.spongycastle.asn1.x509.RoleSyntax Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scprov-jdk15 Show documentation
Show all versions of scprov-jdk15 Show documentation
Spongy Castle is a package-rename (org.bouncycastle.* to org.spongycastle.*) of Bouncy Castle intended for Android.
Android ships with a stripped-down version of Bouncy Castle - this causes classloader collisions if you try to add
an alternative (updated/complete) Bouncy Castle jar.
This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5.
package org.spongycastle.asn1.x509;
import org.spongycastle.asn1.ASN1Encodable;
import org.spongycastle.asn1.ASN1EncodableVector;
import org.spongycastle.asn1.ASN1Sequence;
import org.spongycastle.asn1.ASN1String;
import org.spongycastle.asn1.ASN1TaggedObject;
import org.spongycastle.asn1.DEREncodable;
import org.spongycastle.asn1.DERObject;
import org.spongycastle.asn1.DERSequence;
import org.spongycastle.asn1.DERTaggedObject;
/**
* Implementation of the RoleSyntax object as specified by the RFC3281.
*
*
* RoleSyntax ::= SEQUENCE {
* roleAuthority [0] GeneralNames OPTIONAL,
* roleName [1] GeneralName
* }
*
*/
public class RoleSyntax
extends ASN1Encodable
{
private GeneralNames roleAuthority;
private GeneralName roleName;
/**
* RoleSyntax factory method.
* @param obj the object used to construct an instance of
* RoleSyntax
. It must be an instance of RoleSyntax
*
or ASN1Sequence
.
* @return the instance of RoleSyntax
built from the
* supplied object.
* @throws java.lang.IllegalArgumentException if the object passed
* to the factory is not an instance of RoleSyntax
or
* ASN1Sequence
.
*/
public static RoleSyntax getInstance(
Object obj)
{
if (obj instanceof RoleSyntax)
{
return (RoleSyntax)obj;
}
else if (obj != null)
{
return new RoleSyntax(ASN1Sequence.getInstance(obj));
}
return null;
}
/**
* Constructor.
* @param roleAuthority the role authority of this RoleSyntax.
* @param roleName the role name of this RoleSyntax.
*/
public RoleSyntax(
GeneralNames roleAuthority,
GeneralName roleName)
{
if(roleName == null ||
roleName.getTagNo() != GeneralName.uniformResourceIdentifier ||
((ASN1String)roleName.getName()).getString().equals(""))
{
throw new IllegalArgumentException("the role name MUST be non empty and MUST " +
"use the URI option of GeneralName");
}
this.roleAuthority = roleAuthority;
this.roleName = roleName;
}
/**
* Constructor. Invoking this constructor is the same as invoking
* new RoleSyntax(null, roleName)
.
* @param roleName the role name of this RoleSyntax.
*/
public RoleSyntax(
GeneralName roleName)
{
this(null, roleName);
}
/**
* Utility constructor. Takes a String
argument representing
* the role name, builds a GeneralName
to hold the role name
* and calls the constructor that takes a GeneralName
.
* @param roleName
*/
public RoleSyntax(
String roleName)
{
this(new GeneralName(GeneralName.uniformResourceIdentifier,
(roleName == null)? "": roleName));
}
/**
* Constructor that builds an instance of RoleSyntax
by
* extracting the encoded elements from the ASN1Sequence
* object supplied.
* @param seq an instance of ASN1Sequence
that holds
* the encoded elements used to build this RoleSyntax
.
*/
private RoleSyntax(
ASN1Sequence seq)
{
if (seq.size() < 1 || seq.size() > 2)
{
throw new IllegalArgumentException("Bad sequence size: "
+ seq.size());
}
for (int i = 0; i != seq.size(); i++)
{
ASN1TaggedObject taggedObject = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
switch (taggedObject.getTagNo())
{
case 0:
roleAuthority = GeneralNames.getInstance(taggedObject, false);
break;
case 1:
roleName = GeneralName.getInstance(taggedObject, true);
break;
default:
throw new IllegalArgumentException("Unknown tag in RoleSyntax");
}
}
}
/**
* Gets the role authority of this RoleSyntax.
* @return an instance of GeneralNames
holding the
* role authority of this RoleSyntax.
*/
public GeneralNames getRoleAuthority()
{
return this.roleAuthority;
}
/**
* Gets the role name of this RoleSyntax.
* @return an instance of GeneralName
holding the
* role name of this RoleSyntax.
*/
public GeneralName getRoleName()
{
return this.roleName;
}
/**
* Gets the role name as a java.lang.String
object.
* @return the role name of this RoleSyntax represented as a
* java.lang.String
object.
*/
public String getRoleNameAsString()
{
ASN1String str = (ASN1String)this.roleName.getName();
return str.getString();
}
/**
* Gets the role authority as a String[]
object.
* @return the role authority of this RoleSyntax represented as a
* String[]
array.
*/
public String[] getRoleAuthorityAsString()
{
if(roleAuthority == null)
{
return new String[0];
}
GeneralName[] names = roleAuthority.getNames();
String[] namesString = new String[names.length];
for(int i = 0; i < names.length; i++)
{
DEREncodable value = names[i].getName();
if(value instanceof ASN1String)
{
namesString[i] = ((ASN1String)value).getString();
}
else
{
namesString[i] = value.toString();
}
}
return namesString;
}
/**
* Implementation of the method toASN1Object
as
* required by the superclass ASN1Encodable
.
*
*
* RoleSyntax ::= SEQUENCE {
* roleAuthority [0] GeneralNames OPTIONAL,
* roleName [1] GeneralName
* }
*
*/
public DERObject toASN1Object()
{
ASN1EncodableVector v = new ASN1EncodableVector();
if(this.roleAuthority != null)
{
v.add(new DERTaggedObject(false, 0, roleAuthority));
}
v.add(new DERTaggedObject(true, 1, roleName));
return new DERSequence(v);
}
public String toString()
{
StringBuffer buff = new StringBuffer("Name: " + this.getRoleNameAsString() +
" - Auth: ");
if(this.roleAuthority == null || roleAuthority.getNames().length == 0)
{
buff.append("N/A");
}
else
{
String[] names = this.getRoleAuthorityAsString();
buff.append('[').append(names[0]);
for(int i = 1; i < names.length; i++)
{
buff.append(", ").append(names[i]);
}
buff.append(']');
}
return buff.toString();
}
}