1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.asn1; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class ASN1Encodable 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements DEREncodable 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String DER = "DER"; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String BER = "BER"; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncoded() 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1OutputStream aOut = new ASN1OutputStream(bOut); 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project aOut.writeObject(this); 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return bOut.toByteArray(); 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncoded( 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String encoding) 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (encoding.equals(DER)) 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DEROutputStream dOut = new DEROutputStream(bOut); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dOut.writeObject(this); 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return bOut.toByteArray(); 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.getEncoded(); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the DER encoding of the object, null if the DER encoding can not be made. 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a DER byte array, null otherwise. 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getDEREncoded() 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.getEncoded(DER); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (IOException e) 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.toASN1Object().hashCode(); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals( 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object o) 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((o == null) || !(o instanceof DEREncodable)) 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DEREncodable other = (DEREncodable)o; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.toASN1Object().equals(other.getDERObject()); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public DERObject getDERObject() 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.toASN1Object(); 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract DERObject toASN1Object(); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 82