1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.asn1.util; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.*; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.util.encoders.Hex; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ASN1Dump 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static String TAB = " "; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dump a DER object as a formatted string with indentation 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param obj the DERObject to be dumped out. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static String _dumpAsString( 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String indent, 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERObject obj) 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (obj instanceof ASN1Sequence) 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Enumeration e = ((ASN1Sequence)obj).getObjects(); 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String tab = indent + TAB; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(indent); 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (obj instanceof BERConstructedSequence) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("BER ConstructedSequence"); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERConstructedSequence) 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("DER ConstructedSequence"); 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof BERSequence) 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("BER Sequence"); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERSequence) 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("DER Sequence"); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("Sequence"); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (e.hasMoreElements()) 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object o = e.nextElement(); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == null || o.equals(DERNull.THE_ONE)) 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(tab); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("NULL"); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (o instanceof DERObject) 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, (DERObject)o)); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, ((DEREncodable)o).getDERObject())); 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERTaggedObject) 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String tab = indent + TAB; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(indent); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (obj instanceof BERTaggedObject) 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("BER Tagged ["); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("Tagged ["); 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERTaggedObject o = (DERTaggedObject)obj; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(Integer.toString(o.getTagNo())); 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(']'); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!o.isExplicit()) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" IMPLICIT "); 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o.isEmpty()) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(tab); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("EMPTY"); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, o.getObject())); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERConstructedSet) 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Enumeration e = ((ASN1Set)obj).getObjects(); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String tab = indent + TAB; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(indent); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("ConstructedSet"); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (e.hasMoreElements()) 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object o = e.nextElement(); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == null) 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(tab); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("NULL"); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (o instanceof DERObject) 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, (DERObject)o)); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, ((DEREncodable)o).getDERObject())); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof BERSet) 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Enumeration e = ((ASN1Set)obj).getObjects(); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String tab = indent + TAB; 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(indent); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("BER Set"); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (e.hasMoreElements()) 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object o = e.nextElement(); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == null) 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(tab); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("NULL"); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (o instanceof DERObject) 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, (DERObject)o)); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, ((DEREncodable)o).getDERObject())); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERSet) 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Enumeration e = ((ASN1Set)obj).getObjects(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String tab = indent + TAB; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(indent); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("DER Set"); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (e.hasMoreElements()) 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object o = e.nextElement(); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == null) 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(tab); 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("NULL"); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(System.getProperty("line.separator")); 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (o instanceof DERObject) 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, (DERObject)o)); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(_dumpAsString(tab, ((DEREncodable)o).getDERObject())); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERObjectIdentifier) 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "ObjectIdentifier(" + ((DERObjectIdentifier)obj).getId() + ")" + System.getProperty("line.separator"); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERBoolean) 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + System.getProperty("line.separator"); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERInteger) 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "Integer(" + ((DERInteger)obj).getValue() + ")" + System.getProperty("line.separator"); 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof BERConstructedOctetString) 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "BER Constructed Octet String" + "[" + ((ASN1OctetString)obj).getOctets().length + "] " + System.getProperty("line.separator"); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DEROctetString) 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "DER Octet String" + "[" + ((ASN1OctetString)obj).getOctets().length + "] " + System.getProperty("line.separator"); 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERBitString) 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "DER Bit String" + "[" + ((DERBitString)obj).getBytes().length + ", " + ((DERBitString)obj).getPadBits() + "] " + System.getProperty("line.separator"); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERIA5String) 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "IA5String(" + ((DERIA5String)obj).getString() + ") " + System.getProperty("line.separator"); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERUTF8String) 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "UTF8String(" + ((DERUTF8String)obj).getString() + ") " + System.getProperty("line.separator"); 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERPrintableString) 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "PrintableString(" + ((DERPrintableString)obj).getString() + ") " + System.getProperty("line.separator"); 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERVisibleString) 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "VisibleString(" + ((DERVisibleString)obj).getString() + ") " + System.getProperty("line.separator"); 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERBMPString) 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "BMPString(" + ((DERBMPString)obj).getString() + ") " + System.getProperty("line.separator"); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERT61String) 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "T61String(" + ((DERT61String)obj).getString() + ") " + System.getProperty("line.separator"); 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERUTCTime) 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "UTCTime(" + ((DERUTCTime)obj).getTime() + ") " + System.getProperty("line.separator"); 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERGeneralizedTime) 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "GeneralizedTime(" + ((DERGeneralizedTime)obj).getTime() + ") " + System.getProperty("line.separator"); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DERUnknownTag) 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + "Unknown " + Integer.toString(((DERUnknownTag)obj).getTag(), 16) + " " + new String(Hex.encode(((DERUnknownTag)obj).getData())) + System.getProperty("line.separator"); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return indent + obj.toString() + System.getProperty("line.separator"); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dump out a DER object as a formatted string 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param obj the DERObject to be dumped out. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String dumpAsString( 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object obj) 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (obj instanceof DERObject) 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return _dumpAsString("", (DERObject)obj); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (obj instanceof DEREncodable) 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return _dumpAsString("", ((DEREncodable)obj).getDERObject()); 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "unknown object type " + obj.toString(); 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 293