⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attributecertificateholder.java

📁 java 文件下载器。可自定义
💻 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 + -