📄 attributecertificateholder.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: AttributeCertificateHolder.java
package org.bouncycastle.x509;
import java.io.IOException;
import java.math.BigInteger;
import java.security.*;
import java.security.cert.*;
import java.util.ArrayList;
import java.util.List;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.*;
import org.bouncycastle.asn1.x509.*;
import org.bouncycastle.jce.PrincipalUtil;
import org.bouncycastle.jce.X509Principal;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.Selector;
// Referenced classes of package org.bouncycastle.x509:
// X509Util
public class AttributeCertificateHolder
implements CertSelector, Selector
{
final Holder holder;
AttributeCertificateHolder(ASN1Sequence seq)
{
holder = Holder.getInstance(seq);
}
public AttributeCertificateHolder(X509Principal issuerName, BigInteger serialNumber)
{
holder = new Holder(new IssuerSerial(new GeneralNames(new DERSequence(new GeneralName(issuerName))), new DERInteger(serialNumber)));
}
public AttributeCertificateHolder(X500Principal issuerName, BigInteger serialNumber)
{
this(X509Util.convertPrincipal(issuerName), serialNumber);
}
public AttributeCertificateHolder(X509Certificate cert)
throws CertificateParsingException
{
X509Principal name;
try
{
name = PrincipalUtil.getIssuerX509Principal(cert);
}
catch (Exception e)
{
throw new CertificateParsingException(e.getMessage());
}
holder = new Holder(new IssuerSerial(generateGeneralNames(name), new DERInteger(cert.getSerialNumber())));
}
public AttributeCertificateHolder(X509Principal principal)
{
holder = new Holder(generateGeneralNames(principal));
}
public AttributeCertificateHolder(X500Principal principal)
{
this(X509Util.convertPrincipal(principal));
}
public AttributeCertificateHolder(int digestedObjectType, String digestAlgorithm, String otherObjectTypeID, byte objectDigest[])
{
holder = new Holder(new ObjectDigestInfo(digestedObjectType, otherObjectTypeID, new AlgorithmIdentifier(digestAlgorithm), Arrays.clone(objectDigest)));
}
public int getDigestedObjectType()
{
if (holder.getObjectDigestInfo() != null)
return holder.getObjectDigestInfo().getDigestedObjectType().getValue().intValue();
else
return -1;
}
public String getDigestAlgorithm()
{
if (holder.getObjectDigestInfo() != null)
holder.getObjectDigestInfo().getDigestAlgorithm().getObjectId().getId();
return null;
}
public byte[] getObjectDigest()
{
if (holder.getObjectDigestInfo() != null)
holder.getObjectDigestInfo().getObjectDigest().getBytes();
return null;
}
public String getOtherObjectTypeID()
{
if (holder.getObjectDigestInfo() != null)
holder.getObjectDigestInfo().getOtherObjectTypeID().getId();
return null;
}
private GeneralNames generateGeneralNames(X509Principal principal)
{
return new GeneralNames(new DERSequence(new GeneralName(principal)));
}
private boolean matchesDN(X509Principal subject, GeneralNames targets)
{
GeneralName names[];
int i;
names = targets.getNames();
i = 0;
_L3:
if (i == names.length) goto _L2; else goto _L1
_L1:
GeneralName gn;
gn = names[i];
if (gn.getTagNo() != 4)
continue; /* Loop/switch isn't completed */
if ((new X509Principal(((ASN1Encodable)gn.getName()).getEncoded())).equals(subject))
return true;
continue; /* Loop/switch isn't completed */
IOException e;
e;
i++;
goto _L3
_L2:
return false;
}
private Object[] getNames(GeneralName names[])
{
List l = new ArrayList(names.length);
for (int i = 0; i != names.length; i++)
{
if (names[i].getTagNo() != 4)
continue;
try
{
l.add(new X500Principal(((ASN1Encodable)names[i].getName()).getEncoded()));
}
catch (IOException e)
{
throw new RuntimeException("badly formed Name object");
}
}
return l.toArray(new Object[l.size()]);
}
private Principal[] getPrincipals(GeneralNames names)
{
Object p[] = getNames(names.getNames());
List l = new ArrayList();
for (int i = 0; i != p.length; i++)
if (p[i] instanceof Principal)
l.add(p[i]);
return (Principal[])(Principal[])l.toArray(new Principal[l.size()]);
}
public Principal[] getEntityNames()
{
if (holder.getEntityName() != null)
return getPrincipals(holder.getEntityName());
else
return null;
}
public Principal[] getIssuer()
{
if (holder.getBaseCertificateID() != null)
return getPrincipals(holder.getBaseCertificateID().getIssuer());
else
return null;
}
public BigInteger getSerialNumber()
{
if (holder.getBaseCertificateID() != null)
return holder.getBaseCertificateID().getSerial().getValue();
else
return null;
}
public Object clone()
{
return new AttributeCertificateHolder((ASN1Sequence)holder.toASN1Object());
}
public boolean match(Certificate cert)
{
X509Certificate x509Cert;
if (!(cert instanceof X509Certificate))
return false;
x509Cert = (X509Certificate)cert;
if (holder.getBaseCertificateID() != null)
return holder.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber()) && matchesDN(PrincipalUtil.getIssuerX509Principal(x509Cert), holder.getBaseCertificateID().getIssuer());
if (holder.getEntityName() != null && matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert), holder.getEntityName()))
return true;
MessageDigest md;
if (holder.getObjectDigestInfo() == null)
break MISSING_BLOCK_LABEL_210;
md = null;
try
{
md = MessageDigest.getInstance(getDigestAlgorithm(), "BC");
}
catch (Exception e)
{
return false;
}
switch (getDigestedObjectType())
{
case 0: // '\0'
md.update(cert.getPublicKey().getEncoded());
break;
case 1: // '\001'
md.update(cert.getEncoded());
break;
}
if (!Arrays.areEqual(md.digest(), getObjectDigest()))
return false;
break MISSING_BLOCK_LABEL_210;
CertificateEncodingException e;
e;
return false;
return false;
}
public boolean equals(Object obj)
{
if (obj == this)
return true;
if (!(obj instanceof AttributeCertificateHolder))
{
return false;
} else
{
AttributeCertificateHolder other = (AttributeCertificateHolder)obj;
return holder.equals(other.holder);
}
}
public int hashCode()
{
return holder.hashCode();
}
public boolean match(Object obj)
{
if (!(obj instanceof X509Certificate))
return false;
else
return match((Certificate)obj);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -