Initial Commit
This commit is contained in:
177
iTechSharp/srcbc/x509/AttributeCertificateIssuer.cs
Normal file
177
iTechSharp/srcbc/x509/AttributeCertificateIssuer.cs
Normal file
@@ -0,0 +1,177 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Security;
|
||||
using Org.BouncyCastle.X509.Store;
|
||||
|
||||
namespace Org.BouncyCastle.X509
|
||||
{
|
||||
/**
|
||||
* Carrying class for an attribute certificate issuer.
|
||||
*/
|
||||
public class AttributeCertificateIssuer
|
||||
//: CertSelector, Selector
|
||||
: IX509Selector
|
||||
{
|
||||
internal readonly Asn1Encodable form;
|
||||
|
||||
/**
|
||||
* Set the issuer directly with the ASN.1 structure.
|
||||
*
|
||||
* @param issuer The issuer
|
||||
*/
|
||||
internal AttributeCertificateIssuer(
|
||||
AttCertIssuer issuer)
|
||||
{
|
||||
form = issuer.Issuer;
|
||||
}
|
||||
|
||||
public AttributeCertificateIssuer(
|
||||
X509Name principal)
|
||||
{
|
||||
// form = new V2Form(GeneralNames.GetInstance(new DerSequence(new GeneralName(principal))));
|
||||
form = new V2Form(new GeneralNames(new GeneralName(principal)));
|
||||
}
|
||||
|
||||
private object[] GetNames()
|
||||
{
|
||||
GeneralNames name;
|
||||
if (form is V2Form)
|
||||
{
|
||||
name = ((V2Form)form).IssuerName;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = (GeneralNames)form;
|
||||
}
|
||||
|
||||
GeneralName[] names = name.GetNames();
|
||||
|
||||
ArrayList l = new ArrayList(names.Length);
|
||||
|
||||
for (int i = 0; i != names.Length; i++)
|
||||
{
|
||||
if (names[i].TagNo == GeneralName.DirectoryName)
|
||||
{
|
||||
l.Add(X509Name.GetInstance(names[i].Name));
|
||||
}
|
||||
}
|
||||
|
||||
return l.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>Return any principal objects inside the attribute certificate issuer object.</summary>
|
||||
/// <returns>An array of IPrincipal objects (usually X509Principal).</returns>
|
||||
public X509Name[] GetPrincipals()
|
||||
{
|
||||
object[] p = this.GetNames();
|
||||
ArrayList l = new ArrayList(p.Length);
|
||||
|
||||
for (int i = 0; i != p.Length; i++)
|
||||
{
|
||||
if (p[i] is X509Name)
|
||||
{
|
||||
l.Add(p[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return (X509Name[]) l.ToArray(typeof(X509Name));
|
||||
}
|
||||
|
||||
private bool MatchesDN(
|
||||
X509Name subject,
|
||||
GeneralNames targets)
|
||||
{
|
||||
GeneralName[] names = targets.GetNames();
|
||||
|
||||
for (int i = 0; i != names.Length; i++)
|
||||
{
|
||||
GeneralName gn = names[i];
|
||||
|
||||
if (gn.TagNo == GeneralName.DirectoryName)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (X509Name.GetInstance(gn.Name).Equivalent(subject))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new AttributeCertificateIssuer(AttCertIssuer.GetInstance(form));
|
||||
}
|
||||
|
||||
public bool Match(
|
||||
// Certificate cert)
|
||||
X509Certificate x509Cert)
|
||||
{
|
||||
// if (!(cert is X509Certificate))
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// X509Certificate x509Cert = (X509Certificate)cert;
|
||||
|
||||
if (form is V2Form)
|
||||
{
|
||||
V2Form issuer = (V2Form) form;
|
||||
if (issuer.BaseCertificateID != null)
|
||||
{
|
||||
return issuer.BaseCertificateID.Serial.Value.Equals(x509Cert.SerialNumber)
|
||||
&& MatchesDN(x509Cert.IssuerDN, issuer.BaseCertificateID.Issuer);
|
||||
}
|
||||
|
||||
return MatchesDN(x509Cert.SubjectDN, issuer.IssuerName);
|
||||
}
|
||||
|
||||
return MatchesDN(x509Cert.SubjectDN, (GeneralNames) form);
|
||||
}
|
||||
|
||||
public override bool Equals(
|
||||
object obj)
|
||||
{
|
||||
if (obj == this)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(obj is AttributeCertificateIssuer))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj;
|
||||
|
||||
return this.form.Equals(other.form);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return this.form.GetHashCode();
|
||||
}
|
||||
|
||||
public bool Match(
|
||||
object obj)
|
||||
{
|
||||
if (!(obj is X509Certificate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//return Match((Certificate)obj);
|
||||
return Match((X509Certificate)obj);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user