Method from java.security.cert.X509CertSelector Detail: |
public void addPathToName(int type,
String name) throws IOException {
addPathToNameInternal(type, name);
}
Adds a name to the pathToNames criterion. The X509Certificate
must not include name constraints that would prohibit building a
path to the specified name.
This method allows the caller to add a name to the set of names which
the X509Certificates 's name constraints must permit.
The specified name is added to any previous value for the
pathToNames criterion. If the name is a duplicate, it may be ignored.
The name is provided in string format. RFC 822, DNS, and URI names
use the well-established string formats for those types (subject to
the restrictions included in RFC 3280). IPv4 address names are
supplied using dotted quad notation. OID address names are represented
as a series of nonnegative integers separated by periods. And
directory names (distinguished names) are supplied in RFC 2253 format.
No standard string format is defined for otherNames, X.400 names,
EDI party names, IPv6 address names, or any other type of names. They
should be specified using the
type, byte [] name)
type, byte [] name) method.
Note: for distinguished names, use
{@linkplain #addPathToName(int, byte[])} instead.
This method should not be relied on as it can fail to match some
certificates because of a loss of encoding information in the RFC 2253
String form of some distinguished names. |
public void addPathToName(int type,
byte[] name) throws IOException {
// clone because byte arrays are modifiable
addPathToNameInternal(type, name.clone());
}
Adds a name to the pathToNames criterion. The X509Certificate
must not include name constraints that would prohibit building a
path to the specified name.
This method allows the caller to add a name to the set of names which
the X509Certificates 's name constraints must permit.
The specified name is added to any previous value for the
pathToNames criterion. If the name is a duplicate, it may be ignored.
The name is provided as a byte array. This byte array should contain
the DER encoded name, as it would appear in the GeneralName structure
defined in RFC 3280 and X.509. The ASN.1 definition of this structure
appears in the documentation for
type, byte [] name)
type, byte [] name) .
Note that the byte array supplied here is cloned to protect against
subsequent modifications. |
public void addSubjectAlternativeName(int type,
String name) throws IOException {
addSubjectAlternativeNameInternal(type, name);
}
Adds a name to the subjectAlternativeNames criterion. The
X509Certificate must contain all or at least one
of the specified subjectAlternativeNames, depending on the value of
the matchAllNames flag (see
setMatchAllSubjectAltNames ).
This method allows the caller to add a name to the set of subject
alternative names.
The specified name is added to any previous value for the
subjectAlternativeNames criterion. If the specified name is a
duplicate, it may be ignored.
The name is provided in string format.
RFC 822, DNS, and URI
names use the well-established string formats for those types (subject to
the restrictions included in RFC 3280). IPv4 address names are
supplied using dotted quad notation. OID address names are represented
as a series of nonnegative integers separated by periods. And
directory names (distinguished names) are supplied in RFC 2253 format.
No standard string format is defined for otherNames, X.400 names,
EDI party names, IPv6 address names, or any other type of names. They
should be specified using the
type, byte [] name)
type, byte [] name)
method.
Note: for distinguished names, use
{@linkplain #addSubjectAlternativeName(int, byte[])} instead.
This method should not be relied on as it can fail to match some
certificates because of a loss of encoding information in the RFC 2253
String form of some distinguished names. |
public void addSubjectAlternativeName(int type,
byte[] name) throws IOException {
// clone because byte arrays are modifiable
addSubjectAlternativeNameInternal(type, name.clone());
}
Adds a name to the subjectAlternativeNames criterion. The
X509Certificate must contain all or at least one
of the specified subjectAlternativeNames, depending on the value of
the matchAllNames flag (see
setMatchAllSubjectAltNames ).
This method allows the caller to add a name to the set of subject
alternative names.
The specified name is added to any previous value for the
subjectAlternativeNames criterion. If the specified name is a
duplicate, it may be ignored.
The name is provided as a byte array. This byte array should contain
the DER encoded name, as it would appear in the GeneralName structure
defined in RFC 3280 and X.509. The encoded byte array should only contain
the encoded value of the name, and should not include the tag associated
with the name in the GeneralName structure. The ASN.1 definition of this
structure appears below.
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER}
Note that the byte array supplied here is cloned to protect against
subsequent modifications. |
public Object clone() {
try {
X509CertSelector copy = (X509CertSelector)super.clone();
// Must clone these because addPathToName et al. modify them
if (subjectAlternativeNames != null) {
copy.subjectAlternativeNames =
(Set< List< ? > >)cloneSet(subjectAlternativeNames);
copy.subjectAlternativeGeneralNames =
(Set< GeneralNameInterface >)cloneSet
(subjectAlternativeGeneralNames);
}
if (pathToGeneralNames != null) {
copy.pathToNames =
(Set< List< ? > >)cloneSet(pathToNames);
copy.pathToGeneralNames =
(Set< GeneralNameInterface >)cloneSet
(pathToGeneralNames);
}
return copy;
} catch (CloneNotSupportedException e) {
/* Cannot happen */
throw new InternalError(e.toString());
}
}
Returns a copy of this object. |
static boolean equalNames(Collection object1,
Collection object2) {
if ((object1 == null) || (object2 == null)) {
return object1 == object2;
}
return object1.equals(object2);
}
Compare for equality two objects of the form passed to
setSubjectAlternativeNames (or X509CRLSelector.setIssuerNames).
Throw an IllegalArgumentException or a
ClassCastException if one of the objects is malformed. |
public byte[] getAuthorityKeyIdentifier() {
if (authorityKeyID == null) {
return null;
}
return authorityKeyID.clone();
}
|
public int getBasicConstraints() {
return basicConstraints;
}
Returns the basic constraints constraint. If the value is greater than
or equal to zero, the X509Certificates must include a
basicConstraints extension with a pathLen of at least this value.
If the value is -2, only end-entity certificates are accepted. If
the value is -1, no basicConstraints check is done. |
public X509Certificate getCertificate() {
return x509Cert;
}
Returns the certificateEquals criterion. The specified
X509Certificate must be equal to the
X509Certificate passed to the match method.
If null , this check is not applied. |
public Date getCertificateValid() {
if (certificateValid == null) {
return null;
}
return (Date)certificateValid.clone();
}
|
public Set<String> getExtendedKeyUsage() {
return keyPurposeSet;
}
Returns the extendedKeyUsage criterion. The X509Certificate
must allow the specified key purposes in its extended key usage
extension. If the keyPurposeSet returned is empty or
null , no extendedKeyUsage check will be done. Note that an
X509Certificate that has no extendedKeyUsage extension
implicitly allows all key purposes. |
public X500Principal getIssuer() {
return issuer;
}
Returns the issuer criterion as an X500Principal . This
distinguished name must match the issuer distinguished name in the
X509Certificate . If null , the issuer criterion
is disabled and any issuer distinguished name will do. |
public byte[] getIssuerAsBytes() throws IOException {
return (issuer == null ? null: issuer.getEncoded());
}
Returns the issuer criterion as a byte array. This distinguished name
must match the issuer distinguished name in the
X509Certificate . If null , the issuer criterion
is disabled and any issuer distinguished name will do.
If the value returned is not null , it is a byte
array containing a single DER encoded distinguished name, as defined in
X.501. The ASN.1 notation for this structure is supplied in the
documentation for
setIssuer(byte [] issuerDN) .
Note that the byte array returned is cloned to protect against
subsequent modifications. |
public String getIssuerAsString() {
return (issuer == null ? null : issuer.getName());
}
Denigrated, use {@linkplain #getIssuer()} or
{@linkplain #getIssuerAsBytes()} instead. This method should not be
relied on as it can fail to match some certificates because of a loss of
encoding information in the RFC 2253 String form of some distinguished
names.
Returns the issuer criterion as a String . This
distinguished name must match the issuer distinguished name in the
X509Certificate . If null , the issuer criterion
is disabled and any issuer distinguished name will do.
If the value returned is not null , it is a
distinguished name, in RFC 2253 format. |
public boolean[] getKeyUsage() {
if (keyUsage == null) {
return null;
}
return keyUsage.clone();
}
|
public boolean getMatchAllSubjectAltNames() {
return matchAllSubjectAltNames;
}
Indicates if the X509Certificate must contain all
or at least one of the subjectAlternativeNames
specified in the
setSubjectAlternativeNames or
addSubjectAlternativeName methods. If true ,
the X509Certificate must contain all of the
specified subject alternative names. If false , the
X509Certificate must contain at least one of the
specified subject alternative names. |
public byte[] getNameConstraints() {
if (ncBytes == null) {
return null;
} else {
return ncBytes.clone();
}
}
Returns the name constraints criterion. The X509Certificate
must have subject and subject alternative names that
meet the specified name constraints.
The name constraints are returned as a byte array. This byte array
contains the DER encoded form of the name constraints, as they
would appear in the NameConstraints structure defined in RFC 3280
and X.509. The ASN.1 notation for this structure is supplied in the
documentation for
setNameConstraints(byte [] bytes) .
Note that the byte array returned is cloned to protect against
subsequent modifications. |
public Collection<?> getPathToNames() {
if (pathToNames == null) {
return null;
}
return cloneNames(pathToNames);
}
Returns a copy of the pathToNames criterion. The
X509Certificate must not include name constraints that would
prohibit building a path to the specified names. If the value
returned is null , no pathToNames check will be performed.
If the value returned is not null , it is a
Collection with one
entry for each name to be included in the pathToNames
criterion. Each entry is a List whose first entry is an
Integer (the name type, 0-8) and whose second
entry is a String or a byte array (the name, in
string or ASN.1 DER encoded form, respectively).
There can be multiple names of the same type. Note that the
Collection returned may contain duplicate names (same
name and name type).
Each name in the Collection
may be specified either as a String or as an ASN.1 encoded
byte array. For more details about the formats used, see
type, String name)
type, String name) and
type, byte [] name)
type, byte [] name) .
Note that a deep copy is performed on the Collection to
protect against subsequent modifications. |
public Set<String> getPolicy() {
return policySet;
}
Returns the policy criterion. The X509Certificate must
include at least one of the specified policies in its certificate policies
extension. If the Set returned is empty, then the
X509Certificate must include at least some specified policy
in its certificate policies extension. If the Set returned is
null , no policy check will be performed. |
public Date getPrivateKeyValid() {
if (privateKeyValid == null) {
return null;
}
return (Date)privateKeyValid.clone();
}
|
public BigInteger getSerialNumber() {
return serialNumber;
}
Returns the serialNumber criterion. The specified serial number
must match the certificate serial number in the
X509Certificate . If null , any certificate
serial number will do. |
public X500Principal getSubject() {
return subject;
}
Returns the subject criterion as an X500Principal . This
distinguished name must match the subject distinguished name in the
X509Certificate . If null , the subject criterion
is disabled and any subject distinguished name will do. |
public Collection<?> getSubjectAlternativeNames() {
if (subjectAlternativeNames == null) {
return null;
}
return cloneNames(subjectAlternativeNames);
}
Returns a copy of the subjectAlternativeNames criterion.
The X509Certificate must contain all or at least one
of the specified subjectAlternativeNames, depending on the value
of the matchAllNames flag (see
getMatchAllSubjectAltNames ). If the value returned is
null , no subjectAlternativeNames check will be performed.
If the value returned is not null , it is a
Collection with
one entry for each name to be included in the subject alternative name
criterion. Each entry is a List whose first entry is an
Integer (the name type, 0-8) and whose second
entry is a String or a byte array (the name, in
string or ASN.1 DER encoded form, respectively).
There can be multiple names of the same type. Note that the
Collection returned may contain duplicate names (same name
and name type).
Each subject alternative name in the Collection
may be specified either as a String or as an ASN.1 encoded
byte array. For more details about the formats used, see
type, String name)
type, String name) and
type, byte [] name)
type, byte [] name) .
Note that a deep copy is performed on the Collection to
protect against subsequent modifications. |
public byte[] getSubjectAsBytes() throws IOException {
return (subject == null ? null : subject.getEncoded());
}
Returns the subject criterion as a byte array. This distinguished name
must match the subject distinguished name in the
X509Certificate . If null , the subject criterion
is disabled and any subject distinguished name will do.
If the value returned is not null , it is a byte
array containing a single DER encoded distinguished name, as defined in
X.501. The ASN.1 notation for this structure is supplied in the
documentation for
setSubject(byte [] subjectDN) .
Note that the byte array returned is cloned to protect against
subsequent modifications. |
public String getSubjectAsString() {
return (subject == null ? null : subject.getName());
}
Denigrated, use {@linkplain #getSubject()} or
{@linkplain #getSubjectAsBytes()} instead. This method should not be
relied on as it can fail to match some certificates because of a loss of
encoding information in the RFC 2253 String form of some distinguished
names.
Returns the subject criterion as a String . This
distinguished name must match the subject distinguished name in the
X509Certificate . If null , the subject criterion
is disabled and any subject distinguished name will do.
If the value returned is not null , it is a
distinguished name, in RFC 2253 format. |
public byte[] getSubjectKeyIdentifier() {
if (subjectKeyID == null) {
return null;
}
return subjectKeyID.clone();
}
|
public PublicKey getSubjectPublicKey() {
return subjectPublicKey;
}
Returns the subjectPublicKey criterion. The
X509Certificate must contain the specified subject
public key. If null , no subjectPublicKey check will be done. |
public String getSubjectPublicKeyAlgID() {
if (subjectPublicKeyAlgID == null) {
return null;
}
return subjectPublicKeyAlgID.toString();
}
Returns the subjectPublicKeyAlgID criterion. The
X509Certificate must contain a subject public key
with the specified algorithm. If null , no
subjectPublicKeyAlgID check will be done. |
static GeneralNameInterface makeGeneralNameInterface(int type,
Object name) throws IOException {
GeneralNameInterface result;
if (debug != null) {
debug.println("X509CertSelector.makeGeneralNameInterface("
+ type + ")...");
}
if (name instanceof String) {
if (debug != null) {
debug.println("X509CertSelector.makeGeneralNameInterface() "
+ "name is String: " + name);
}
switch (type) {
case NAME_RFC822:
result = new RFC822Name((String)name);
break;
case NAME_DNS:
result = new DNSName((String)name);
break;
case NAME_DIRECTORY:
result = new X500Name((String)name);
break;
case NAME_URI:
result = new URIName((String)name);
break;
case NAME_IP:
result = new IPAddressName((String)name);
break;
case NAME_OID:
result = new OIDName((String)name);
break;
default:
throw new IOException("unable to parse String names of type "
+ type);
}
if (debug != null) {
debug.println("X509CertSelector.makeGeneralNameInterface() "
+ "result: " + result.toString());
}
} else if (name instanceof byte[]) {
DerValue val = new DerValue((byte[]) name);
if (debug != null) {
debug.println
("X509CertSelector.makeGeneralNameInterface() is byte[]");
}
switch (type) {
case NAME_ANY:
result = new OtherName(val);
break;
case NAME_RFC822:
result = new RFC822Name(val);
break;
case NAME_DNS:
result = new DNSName(val);
break;
case NAME_X400:
result = new X400Address(val);
break;
case NAME_DIRECTORY:
result = new X500Name(val);
break;
case NAME_EDI:
result = new EDIPartyName(val);
break;
case NAME_URI:
result = new URIName(val);
break;
case NAME_IP:
result = new IPAddressName(val);
break;
case NAME_OID:
result = new OIDName(val);
break;
default:
throw new IOException("unable to parse byte array names of "
+ "type " + type);
}
if (debug != null) {
debug.println("X509CertSelector.makeGeneralNameInterface() result: "
+ result.toString());
}
} else {
if (debug != null) {
debug.println("X509CertSelector.makeGeneralName() input name "
+ "not String or byte array");
}
throw new IOException("name not String or byte array");
}
return result;
}
Make a GeneralNameInterface out of a name type (0-8) and an
Object that may be a byte array holding the ASN.1 DER encoded
name or a String form of the name. Except for X.509
Distinguished Names, the String form of the name must not be the
result from calling toString on an existing GeneralNameInterface
implementing class. The output of toString is not compatible
with the String constructors for names other than Distinguished
Names. |
public boolean match(Certificate cert) {
if (!(cert instanceof X509Certificate)) {
return false;
}
X509Certificate xcert = (X509Certificate)cert;
if (debug != null) {
debug.println("X509CertSelector.match(SN: "
+ (xcert.getSerialNumber()).toString(16) + "\n Issuer: "
+ xcert.getIssuerDN() + "\n Subject: " + xcert.getSubjectDN()
+ ")");
}
/* match on X509Certificate */
if (x509Cert != null) {
if (!x509Cert.equals(xcert)) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "certs don't match");
}
return false;
}
}
/* match on serial number */
if (serialNumber != null) {
if (!serialNumber.equals(xcert.getSerialNumber())) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "serial numbers don't match");
}
return false;
}
}
/* match on issuer name */
if (issuer != null) {
if (!issuer.equals(xcert.getIssuerX500Principal())) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "issuer DNs don't match");
}
return false;
}
}
/* match on subject name */
if (subject != null) {
if (!subject.equals(xcert.getSubjectX500Principal())) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "subject DNs don't match");
}
return false;
}
}
/* match on certificate validity range */
if (certificateValid != null) {
try {
xcert.checkValidity(certificateValid);
} catch (CertificateException e) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "certificate not within validity period");
}
return false;
}
}
/* match on subject public key */
if (subjectPublicKeyBytes != null) {
byte[] certKey = xcert.getPublicKey().getEncoded();
if (!Arrays.equals(subjectPublicKeyBytes, certKey)) {
if (debug != null) {
debug.println("X509CertSelector.match: "
+ "subject public keys don't match");
}
return false;
}
}
boolean result = matchBasicConstraints(xcert)
&& matchKeyUsage(xcert)
&& matchExtendedKeyUsage(xcert)
&& matchSubjectKeyID(xcert)
&& matchAuthorityKeyID(xcert)
&& matchPrivateKeyValid(xcert)
&& matchSubjectPublicKeyAlgID(xcert)
&& matchPolicy(xcert)
&& matchSubjectAlternativeNames(xcert)
&& matchPathToNames(xcert)
&& matchNameConstraints(xcert);
if (result && (debug != null)) {
debug.println("X509CertSelector.match returning: true");
}
return result;
}
Decides whether a Certificate should be selected. |
public void setAuthorityKeyIdentifier(byte[] authorityKeyID) {
if (authorityKeyID == null) {
this.authorityKeyID = null;
} else {
this.authorityKeyID = authorityKeyID.clone();
}
}
Sets the authorityKeyIdentifier criterion. The
X509Certificate must contain an
AuthorityKeyIdentifier extension for which the contents of the
extension value matches the specified criterion value.
If the criterion value is null , no
authorityKeyIdentifier check will be done.
If authorityKeyID is not null , it
should contain a single DER encoded value corresponding to the contents
of the extension value (not including the object identifier,
criticality setting, and encapsulating OCTET STRING)
for an AuthorityKeyIdentifier extension.
The ASN.1 notation for this structure follows.
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL,
authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
KeyIdentifier ::= OCTET STRING
Authority key identifiers are not parsed by the
X509CertSelector . Instead, the values are
compared using a byte-by-byte comparison.
When the keyIdentifier field of
AuthorityKeyIdentifier is populated, the value is
usually taken from the SubjectKeyIdentifier extension
in the issuer's certificate. Note, however, that the result of
X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object
Identifier>) on the issuer's certificate may NOT be used
directly as the input to setAuthorityKeyIdentifier .
This is because the SubjectKeyIdentifier contains
only a KeyIdentifier OCTET STRING, and not a SEQUENCE of
KeyIdentifier, GeneralNames, and CertificateSerialNumber.
In order to use the extension value of the issuer certificate's
SubjectKeyIdentifier
extension, it will be necessary to extract the value of the embedded
KeyIdentifier OCTET STRING, then DER encode this OCTET
STRING inside a SEQUENCE.
For more details on SubjectKeyIdentifier, see
#setSubjectKeyIdentifier(byte[] subjectKeyID) .
Note also that the byte array supplied here is cloned to protect against
subsequent modifications. |
public void setBasicConstraints(int minMaxPathLen) {
if (minMaxPathLen < -2) {
throw new IllegalArgumentException("basic constraints less than -2");
}
basicConstraints = minMaxPathLen;
}
Sets the basic constraints constraint. If the value is greater than or
equal to zero, X509Certificates must include a
basicConstraints extension with
a pathLen of at least this value. If the value is -2, only end-entity
certificates are accepted. If the value is -1, no check is done.
This constraint is useful when building a certification path forward
(from the target toward the trust anchor. If a partial path has been
built, any candidate certificate must have a maxPathLen value greater
than or equal to the number of certificates in the partial path. |
public void setCertificate(X509Certificate cert) {
x509Cert = cert;
}
Sets the certificateEquals criterion. The specified
X509Certificate must be equal to the
X509Certificate passed to the match method.
If null , then this check is not applied.
This method is particularly useful when it is necessary to
match a single certificate. Although other criteria can be specified
in conjunction with the certificateEquals criterion, it is usually not
practical or necessary. |
public void setCertificateValid(Date certValid) {
if (certValid == null) {
certificateValid = null;
} else {
certificateValid = (Date)certValid.clone();
}
}
|
public void setExtendedKeyUsage(Set<String> keyPurposeSet) throws IOException {
if ((keyPurposeSet == null) || keyPurposeSet.isEmpty()) {
this.keyPurposeSet = null;
keyPurposeOIDSet = null;
} else {
this.keyPurposeSet =
Collections.unmodifiableSet(new HashSet< String >(keyPurposeSet));
keyPurposeOIDSet = new HashSet< ObjectIdentifier >();
for (String s : this.keyPurposeSet) {
keyPurposeOIDSet.add(new ObjectIdentifier(s));
}
}
}
|
public void setIssuer(X500Principal issuer) {
this.issuer = issuer;
}
Sets the issuer criterion. The specified distinguished name
must match the issuer distinguished name in the
X509Certificate . If null , any issuer
distinguished name will do. |
public void setIssuer(String issuerDN) throws IOException {
if (issuerDN == null) {
issuer = null;
} else {
issuer = new X500Name(issuerDN).asX500Principal();
}
}
Denigrated, use {@linkplain #setIssuer(X500Principal)}
or {@linkplain #setIssuer(byte[])} instead. This method should not be
relied on as it can fail to match some certificates because of a loss of
encoding information in the
RFC 2253 String form
of some distinguished names.
Sets the issuer criterion. The specified distinguished name
must match the issuer distinguished name in the
X509Certificate . If null , any issuer
distinguished name will do.
If issuerDN is not null , it should contain a
distinguished name, in RFC 2253 format. |
public void setIssuer(byte[] issuerDN) throws IOException {
try {
issuer = (issuerDN == null ? null : new X500Principal(issuerDN));
} catch (IllegalArgumentException e) {
throw (IOException)new IOException("Invalid name").initCause(e);
}
}
Sets the issuer criterion. The specified distinguished name
must match the issuer distinguished name in the
X509Certificate . If null is specified,
the issuer criterion is disabled and any issuer distinguished name will
do.
If issuerDN is not null , it should contain a
single DER encoded distinguished name, as defined in X.501. The ASN.1
notation for this structure is as follows.
Name ::= CHOICE {
RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET SIZE (1 .. MAX) OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
....
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)) }
Note that the byte array specified here is cloned to protect against
subsequent modifications. |
public void setKeyUsage(boolean[] keyUsage) {
if (keyUsage == null) {
this.keyUsage = null;
} else {
this.keyUsage = keyUsage.clone();
}
}
|
public void setMatchAllSubjectAltNames(boolean matchAllNames) {
this.matchAllSubjectAltNames = matchAllNames;
}
|
public void setNameConstraints(byte[] bytes) throws IOException {
if (bytes == null) {
ncBytes = null;
nc = null;
} else {
ncBytes = bytes.clone();
nc = new NameConstraintsExtension(FALSE, bytes);
}
}
Sets the name constraints criterion. The X509Certificate
must have subject and subject alternative names that
meet the specified name constraints.
The name constraints are specified as a byte array. This byte array
should contain the DER encoded form of the name constraints, as they
would appear in the NameConstraints structure defined in RFC 3280
and X.509. The ASN.1 definition of this structure appears below.
NameConstraints ::= SEQUENCE {
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
excludedSubtrees [1] GeneralSubtrees OPTIONAL }
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
GeneralSubtree ::= SEQUENCE {
base GeneralName,
minimum [0] BaseDistance DEFAULT 0,
maximum [1] BaseDistance OPTIONAL }
BaseDistance ::= INTEGER (0..MAX)
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER}
Note that the byte array supplied here is cloned to protect against
subsequent modifications. |
public void setPathToNames(Collection<?> names) throws IOException {
if ((names == null) || names.isEmpty()) {
pathToNames = null;
pathToGeneralNames = null;
} else {
Set< List< ? > > tempNames = cloneAndCheckNames(names);
pathToGeneralNames = parseNames(tempNames);
// Ensure that we either set both of these or neither
pathToNames = tempNames;
}
}
Sets the pathToNames criterion. The X509Certificate must
not include name constraints that would prohibit building a
path to the specified names.
This method allows the caller to specify, with a single method call,
the complete set of names which the X509Certificates 's
name constraints must permit. The specified value replaces
the previous value for the pathToNames criterion.
This constraint is useful when building a certification path forward
(from the target toward the trust anchor. If a partial path has been
built, any candidate certificate must not include name constraints that
would prohibit building a path to any of the names in the partial path.
The names parameter (if not null ) is a
Collection with one
entry for each name to be included in the pathToNames
criterion. Each entry is a List whose first entry is an
Integer (the name type, 0-8) and whose second
entry is a String or a byte array (the name, in
string or ASN.1 DER encoded form, respectively).
There can be multiple names of the same type. If null
is supplied as the value for this argument, no
pathToNames check will be performed.
Each name in the Collection
may be specified either as a String or as an ASN.1 encoded
byte array. For more details about the formats used, see
type, String name)
type, String name) and
type, byte [] name)
type, byte [] name) .
Note: for distinguished names, specify the byte
array form instead of the String form. See the note in
#addPathToName(int, String) for more information.
Note that the names parameter can contain duplicate
names (same name and name type), but they may be removed from the
Collection of names returned by the
getPathToNames method.
Note that a deep copy is performed on the Collection to
protect against subsequent modifications. |
void setPathToNamesInternal(Set<GeneralNameInterface> names) {
// set names to non-null dummy value
// this breaks getPathToNames()
pathToNames = Collections.< List< ? > >emptySet();
pathToGeneralNames = names;
}
|
public void setPolicy(Set<String> certPolicySet) throws IOException {
if (certPolicySet == null) {
policySet = null;
policy = null;
} else {
// Snapshot set and parse it
Set< String > tempSet = Collections.unmodifiableSet
(new HashSet< String >(certPolicySet));
/* Convert to Vector of ObjectIdentifiers */
Iterator< String > i = tempSet.iterator();
Vector< CertificatePolicyId > polIdVector = new Vector< CertificatePolicyId >();
while (i.hasNext()) {
Object o = i.next();
if (!(o instanceof String)) {
throw new IOException("non String in certPolicySet");
}
polIdVector.add(new CertificatePolicyId(new ObjectIdentifier(
(String)o)));
}
// If everything went OK, make the changes
policySet = tempSet;
policy = new CertificatePolicySet(polIdVector);
}
}
|
public void setPrivateKeyValid(Date privateKeyValid) {
if (privateKeyValid == null) {
this.privateKeyValid = null;
} else {
this.privateKeyValid = (Date)privateKeyValid.clone();
}
}
|
public void setSerialNumber(BigInteger serial) {
serialNumber = serial;
}
Sets the serialNumber criterion. The specified serial number
must match the certificate serial number in the
X509Certificate . If null , any certificate
serial number will do. |
public void setSubject(X500Principal subject) {
this.subject = subject;
}
Sets the subject criterion. The specified distinguished name
must match the subject distinguished name in the
X509Certificate . If null , any subject
distinguished name will do. |
public void setSubject(String subjectDN) throws IOException {
if (subjectDN == null) {
subject = null;
} else {
subject = new X500Name(subjectDN).asX500Principal();
}
}
Denigrated, use {@linkplain #setSubject(X500Principal)}
or {@linkplain #setSubject(byte[])} instead. This method should not be
relied on as it can fail to match some certificates because of a loss of
encoding information in the RFC 2253 String form of some distinguished
names.
Sets the subject criterion. The specified distinguished name
must match the subject distinguished name in the
X509Certificate . If null , any subject
distinguished name will do.
If subjectDN is not null , it should contain a
distinguished name, in RFC 2253 format. |
public void setSubject(byte[] subjectDN) throws IOException {
try {
subject = (subjectDN == null ? null : new X500Principal(subjectDN));
} catch (IllegalArgumentException e) {
throw (IOException)new IOException("Invalid name").initCause(e);
}
}
Sets the subject criterion. The specified distinguished name
must match the subject distinguished name in the
X509Certificate . If null , any subject
distinguished name will do.
If subjectDN is not null , it should contain a
single DER encoded distinguished name, as defined in X.501. For the ASN.1
notation for this structure, see
setIssuer(byte [] issuerDN) . |
public void setSubjectAlternativeNames(Collection<?> names) throws IOException {
if (names == null) {
subjectAlternativeNames = null;
subjectAlternativeGeneralNames = null;
} else {
if (names.isEmpty()) {
subjectAlternativeNames = null;
subjectAlternativeGeneralNames = null;
return;
}
Set< List< ? > > tempNames = cloneAndCheckNames(names);
// Ensure that we either set both of these or neither
subjectAlternativeGeneralNames = parseNames(tempNames);
subjectAlternativeNames = tempNames;
}
}
Sets the subjectAlternativeNames criterion. The
X509Certificate must contain all or at least one of the
specified subjectAlternativeNames, depending on the value of
the matchAllNames flag (see
setMatchAllSubjectAltNames ).
This method allows the caller to specify, with a single method call,
the complete set of subject alternative names for the
subjectAlternativeNames criterion. The specified value replaces
the previous value for the subjectAlternativeNames criterion.
The names parameter (if not null ) is a
Collection with one
entry for each name to be included in the subject alternative name
criterion. Each entry is a List whose first entry is an
Integer (the name type, 0-8) and whose second
entry is a String or a byte array (the name, in
string or ASN.1 DER encoded form, respectively).
There can be multiple names of the same type. If null
is supplied as the value for this argument, no
subjectAlternativeNames check will be performed.
Each subject alternative name in the Collection
may be specified either as a String or as an ASN.1 encoded
byte array. For more details about the formats used, see
type, String name)
type, String name) and
type, byte [] name)
type, byte [] name) .
Note: for distinguished names, specify the byte
array form instead of the String form. See the note in
#addSubjectAlternativeName(int, String) for more information.
Note that the names parameter can contain duplicate
names (same name and name type), but they may be removed from the
Collection of names returned by the
getSubjectAlternativeNames method.
Note that a deep copy is performed on the Collection to
protect against subsequent modifications. |
public void setSubjectKeyIdentifier(byte[] subjectKeyID) {
if (subjectKeyID == null) {
this.subjectKeyID = null;
} else {
this.subjectKeyID = subjectKeyID.clone();
}
}
Sets the subjectKeyIdentifier criterion. The
X509Certificate must contain a SubjectKeyIdentifier
extension for which the contents of the extension
matches the specified criterion value.
If the criterion value is null , no
subjectKeyIdentifier check will be done.
If subjectKeyID is not null , it
should contain a single DER encoded value corresponding to the contents
of the extension value (not including the object identifier,
criticality setting, and encapsulating OCTET STRING)
for a SubjectKeyIdentifier extension.
The ASN.1 notation for this structure follows.
SubjectKeyIdentifier ::= KeyIdentifier
KeyIdentifier ::= OCTET STRING
Since the format of subject key identifiers is not mandated by
any standard, subject key identifiers are not parsed by the
X509CertSelector . Instead, the values are compared using
a byte-by-byte comparison.
Note that the byte array supplied here is cloned to protect against
subsequent modifications. |
public void setSubjectPublicKey(PublicKey key) {
if (key == null) {
subjectPublicKey = null;
subjectPublicKeyBytes = null;
} else {
subjectPublicKey = key;
subjectPublicKeyBytes = key.getEncoded();
}
}
Sets the subjectPublicKey criterion. The
X509Certificate must contain the specified subject public
key. If null , no subjectPublicKey check will be done. |
public void setSubjectPublicKey(byte[] key) throws IOException {
if (key == null) {
subjectPublicKey = null;
subjectPublicKeyBytes = null;
} else {
subjectPublicKeyBytes = key.clone();
subjectPublicKey = X509Key.parse(new DerValue(subjectPublicKeyBytes));
}
}
Sets the subjectPublicKey criterion. The X509Certificate
must contain the specified subject public key. If null ,
no subjectPublicKey check will be done.
Because this method allows the public key to be specified as a byte
array, it may be used for unknown key types.
If key is not null , it should contain a
single DER encoded SubjectPublicKeyInfo structure, as defined in X.509.
The ASN.1 notation for this structure is as follows.
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
-- contains a value of the type
-- registered for use with the
-- algorithm object identifier value
Note that the byte array supplied here is cloned to protect against
subsequent modifications. |
public void setSubjectPublicKeyAlgID(String oid) throws IOException {
if (oid == null) {
subjectPublicKeyAlgID = null;
} else {
subjectPublicKeyAlgID = new ObjectIdentifier(oid);
}
}
Sets the subjectPublicKeyAlgID criterion. The
X509Certificate must contain a subject public key
with the specified algorithm. If null , no
subjectPublicKeyAlgID check will be done. |
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("X509CertSelector: [\n");
if (x509Cert != null) {
sb.append(" Certificate: " + x509Cert.toString() + "\n");
}
if (serialNumber != null) {
sb.append(" Serial Number: " + serialNumber.toString() + "\n");
}
if (issuer != null) {
sb.append(" Issuer: " + getIssuerAsString() + "\n");
}
if (subject != null) {
sb.append(" Subject: " + getSubjectAsString() + "\n");
}
sb.append(" matchAllSubjectAltNames flag: "
+ String.valueOf(matchAllSubjectAltNames) + "\n");
if (subjectAlternativeNames != null) {
sb.append(" SubjectAlternativeNames:\n");
Iterator< List< ? > > i = subjectAlternativeNames.iterator();
while (i.hasNext()) {
List< ? > list = i.next();
sb.append(" type " + list.get(0) +
", name " + list.get(1) + "\n");
}
}
if (subjectKeyID != null) {
HexDumpEncoder enc = new HexDumpEncoder();
sb.append(" Subject Key Identifier: " +
enc.encodeBuffer(subjectKeyID) + "\n");
}
if (authorityKeyID != null) {
HexDumpEncoder enc = new HexDumpEncoder();
sb.append(" Authority Key Identifier: " +
enc.encodeBuffer(authorityKeyID) + "\n");
}
if (certificateValid != null) {
sb.append(" Certificate Valid: " +
certificateValid.toString() + "\n");
}
if (privateKeyValid != null) {
sb.append(" Private Key Valid: " +
privateKeyValid.toString() + "\n");
}
if (subjectPublicKeyAlgID != null) {
sb.append(" Subject Public Key AlgID: " +
subjectPublicKeyAlgID.toString() + "\n");
}
if (subjectPublicKey != null) {
sb.append(" Subject Public Key: " +
subjectPublicKey.toString() + "\n");
}
if (keyUsage != null) {
sb.append(" Key Usage: " + keyUsageToString(keyUsage) + "\n");
}
if (keyPurposeSet != null) {
sb.append(" Extended Key Usage: " +
keyPurposeSet.toString() + "\n");
}
if (policy != null) {
sb.append(" Policy: " + policy.toString() + "\n");
}
if (pathToGeneralNames != null) {
sb.append(" Path to names:\n");
Iterator< GeneralNameInterface > i = pathToGeneralNames.iterator();
while (i.hasNext()) {
sb.append(" " + i.next() + "\n");
}
}
sb.append("]");
return sb.toString();
}
Return a printable representation of the CertSelector . |