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

📄 asn1set.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:   ASN1Set.java

package org.bouncycastle.asn1;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;

// Referenced classes of package org.bouncycastle.asn1:
//			ASN1Object, ASN1EncodableVector, ASN1OutputStream, ASN1Sequence, 
//			ASN1TaggedObject, DEREncodable, DERObject, DERSet, 
//			ASN1SetParser, DEROutputStream

public abstract class ASN1Set extends ASN1Object
{

	protected Vector set;

	public static ASN1Set getInstance(Object obj)
	{
		if (obj == null || (obj instanceof ASN1Set))
			return (ASN1Set)obj;
		else
			throw new IllegalArgumentException("unknown object in getInstance");
	}

	public static ASN1Set getInstance(ASN1TaggedObject obj, boolean explicit)
	{
		if (explicit)
			if (!obj.isExplicit())
				throw new IllegalArgumentException("object implicit - explicit expected.");
			else
				return (ASN1Set)obj.getObject();
		if (obj.isExplicit())
		{
			ASN1Set set = new DERSet(obj.getObject());
			return set;
		}
		if (obj.getObject() instanceof ASN1Set)
			return (ASN1Set)obj.getObject();
		ASN1EncodableVector v = new ASN1EncodableVector();
		if (obj.getObject() instanceof ASN1Sequence)
		{
			ASN1Sequence s = (ASN1Sequence)obj.getObject();
			for (Enumeration e = s.getObjects(); e.hasMoreElements(); v.add((DEREncodable)e.nextElement()));
			return new DERSet(v, false);
		} else
		{
			throw new IllegalArgumentException("unknown object in getInstanceFromTagged");
		}
	}

	public ASN1Set()
	{
		set = new Vector();
	}

	public Enumeration getObjects()
	{
		return set.elements();
	}

	public DEREncodable getObjectAt(int index)
	{
		return (DEREncodable)set.elementAt(index);
	}

	public int size()
	{
		return set.size();
	}

	public ASN1SetParser parser()
	{
		final ASN1Set outer = this;
		return new ASN1SetParser() {

			private final int max;
			private int index;
			final ASN1Set val$outer;
			final ASN1Set this$0;

			public DEREncodable readObject()
				throws IOException
			{
				if (index == max)
					return null;
				DEREncodable obj = getObjectAt(index++);
				if (obj instanceof ASN1Sequence)
					return ((ASN1Sequence)obj).parser();
				if (obj instanceof ASN1Set)
					return ((ASN1Set)obj).parser();
				else
					return obj;
			}

			public DERObject getDERObject()
			{
				return outer;
			}

			
			{
				this$0 = ASN1Set.this;
				outer = asn1set1;
				super();
				max = size();
			}
		};
	}

	public int hashCode()
	{
		Enumeration e = getObjects();
		int hashCode;
		for (hashCode = 0; e.hasMoreElements(); hashCode ^= e.nextElement().hashCode());
		return hashCode;
	}

	boolean asn1Equals(DERObject o)
	{
		if (!(o instanceof ASN1Set))
			return false;
		ASN1Set other = (ASN1Set)o;
		if (size() != other.size())
			return false;
		Enumeration s1 = getObjects();
		Enumeration s2 = other.getObjects();
		while (s1.hasMoreElements()) 
		{
			DERObject o1 = ((DEREncodable)s1.nextElement()).getDERObject();
			DERObject o2 = ((DEREncodable)s2.nextElement()).getDERObject();
			if (o1 != o2 && (o1 == null || !o1.equals(o2)))
				return false;
		}
		return true;
	}

	private boolean lessThanOrEqual(byte a[], byte b[])
	{
		if (a.length <= b.length)
		{
			for (int i = 0; i != a.length; i++)
			{
				int l = a[i] & 0xff;
				int r = b[i] & 0xff;
				if (r > l)
					return true;
				if (l > r)
					return false;
			}

			return true;
		}
		for (int i = 0; i != b.length; i++)
		{
			int l = a[i] & 0xff;
			int r = b[i] & 0xff;
			if (r > l)
				return true;
			if (l > r)
				return false;
		}

		return false;
	}

	private byte[] getEncoded(DEREncodable obj)
	{
		ByteArrayOutputStream bOut = new ByteArrayOutputStream();
		ASN1OutputStream aOut = new ASN1OutputStream(bOut);
		try
		{
			aOut.writeObject(obj);
		}
		catch (IOException e)
		{
			throw new IllegalArgumentException("cannot encode object added to SET");
		}
		return bOut.toByteArray();
	}

	protected void sort()
	{
		if (set.size() > 1)
		{
			boolean swapped = true;
			int swapIndex;
			for (int lastSwap = set.size() - 1; swapped; lastSwap = swapIndex)
			{
				int index = 0;
				swapIndex = 0;
				byte a[] = getEncoded((DEREncodable)set.elementAt(0));
				swapped = false;
				for (; index != lastSwap; index++)
				{
					byte b[] = getEncoded((DEREncodable)set.elementAt(index + 1));
					if (lessThanOrEqual(a, b))
					{
						a = b;
					} else
					{
						Object o = set.elementAt(index);
						set.setElementAt(set.elementAt(index + 1), index);
						set.setElementAt(o, index + 1);
						swapped = true;
						swapIndex = index;
					}
				}

			}

		}
	}

	protected void addObject(DEREncodable obj)
	{
		set.addElement(obj);
	}

	abstract void encode(DEROutputStream deroutputstream)
		throws IOException;

	public String toString()
	{
		return set.toString();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -