1 package org.bouncycastle.asn1.eac; 2 3 import org.bouncycastle.asn1.ASN1ApplicationSpecific; 4 import org.bouncycastle.asn1.BERTags; 5 6 public class EACTags 7 { 8 public static final int COUNTRY_CODE_NATIONAL_DATA = 0x01; 9 public static final int ISSUER_IDENTIFICATION_NUMBER = 0x02; //0x42; 10 public static final int CARD_SERVICE_DATA = 0x03; 11 public static final int INITIAL_ACCESS_DATA = 0x04; 12 public static final int CARD_ISSUER_DATA = 0x05; 13 public static final int PRE_ISSUING_DATA = 0x06; 14 public static final int CARD_CAPABILITIES = 0x07; 15 public static final int STATUS_INFORMATION = 0x08; 16 public static final int EXTENDED_HEADER_LIST = 0x0D; 17 public static final int APPLICATION_IDENTIFIER = 0x0F; 18 public static final int APPLICATION_LABEL = 0x10; 19 public static final int FILE_REFERENCE = 0x11; // 0x51 20 public static final int COMMAND_TO_PERFORM = 0x12; 21 public static final int DISCRETIONARY_DATA = 0x13; 22 public static final int OFFSET_DATA_OBJECT = 0x14; 23 public static final int TRACK1_APPLICATION = 0x16; 24 public static final int TRACK2_APPLICATION = 0x17; 25 public static final int TRACK3_APPLICATION = 0x18; 26 public static final int CARD_EXPIRATION_DATA = 0x19; 27 public static final int PRIMARY_ACCOUNT_NUMBER = 0x1A;// PAN 28 public static final int NAME = 0x1B; 29 public static final int TAG_LIST = 0x1C; 30 public static final int HEADER_LIST = 0x1D; 31 public static final int LOGIN_DATA = 0x1E; 32 public static final int CARDHOLDER_NAME = 0x20; // 0x5F20; 33 public static final int TRACK1_CARD = 0x21; 34 public static final int TRACK2_CARD = 0x22; 35 public static final int TRACK3_CARD = 0x23; 36 public static final int APPLICATION_EXPIRATION_DATE = 0x24; // 0x5F24; 37 public static final int APPLICATION_EFFECTIVE_DATE = 0x25; // 0x5F25; 38 public static final int CARD_EFFECTIVE_DATE = 0x26; 39 public static final int INTERCHANGE_CONTROL = 0x27; 40 public static final int COUNTRY_CODE = 0x28; 41 public static final int INTERCHANGE_PROFILE = 0x29; // 0x5F29; 42 public static final int CURRENCY_CODE = 0x2A; 43 public static final int DATE_OF_BIRTH = 0x2B; 44 public static final int CARDHOLDER_NATIONALITY = 0x2C; 45 public static final int LANGUAGE_PREFERENCES = 0x2D; 46 public static final int CARDHOLDER_BIOMETRIC_DATA = 0x2E; 47 public static final int PIN_USAGE_POLICY = 0x2F; 48 public static final int SERVICE_CODE = 0x30; 49 public static final int TRANSACTION_COUNTER = 0x32; 50 public static final int TRANSACTION_DATE = 0x33; 51 public static final int CARD_SEQUENCE_NUMBER = 0x34; 52 public static final int SEX = 0x35; 53 public static final int CURRENCY_EXPONENT = 0x36; 54 public static final int STATIC_INTERNAL_AUTHENTIFICATION_ONE_STEP = 0x37; // 0x5F37; 55 public static final int SIGNATURE = 0x37; // 0x5F37 56 public static final int STATIC_INTERNAL_AUTHENTIFICATION_FIRST_DATA = 0x38; // 0x5F38 57 public static final int STATIC_INTERNAL_AUTHENTIFICATION_SECOND_DATA = 0x39; // 0x5F39 58 public static final int DYNAMIC_INTERNAL_AUTHENTIFICATION = 0x3A; // 0x5F3A 59 public static final int DYNAMIC_EXTERNAL_AUTHENTIFICATION = 0x3B; // 0x5F3B 60 public static final int DYNAMIC_MUTUAL_AUTHENTIFICATION = 0x3C; // 0x5F3C 61 public static final int CARDHOLDER_PORTRAIT_IMAGE = 0x40; // 0x5F40 62 public static final int ELEMENT_LIST = 0x41; // 0x5F41 63 public static final int ADDRESS = 0x42; // 0x5F42 64 public static final int CARDHOLDER_HANDWRITTEN_SIGNATURE = 0x43; // 0x5F43 65 public static final int APPLICATION_IMAGE = 0x44; // 0x5F44 66 public static final int DISPLAY_IMAGE = 0x45; // 0x5F45 67 public static final int TIMER = 0x46; // 0x5F46 68 public static final int MESSAGE_REFERENCE = 0x47; // 0x5F47 69 public static final int CARDHOLDER_PRIVATE_KEY = 0x48; // 0x5F48 70 public static final int CARDHOLDER_PUBLIC_KEY = 0x49; // 0x5F49 71 public static final int CERTIFICATION_AUTHORITY_PUBLIC_KEY = 0x4A; // 0x5F4A 72 public static final int DEPRECATED = 0x4B; // 0x5F4B 73 public static final int CERTIFICATE_HOLDER_AUTHORIZATION = 0x4C; // 0x5F4C Not yet defined in iso7816. The allocation is requested 74 public static final int INTEGRATED_CIRCUIT_MANUFACTURER_ID = 0x4D; // 0x5F4D 75 public static final int CERTIFICATE_CONTENT = 0x4E; // 0x5F4E 76 public static final int UNIFORM_RESOURCE_LOCATOR = 0x50; // 0x5F50 77 public static final int ANSWER_TO_RESET = 0x51; // 0x5F51 78 public static final int HISTORICAL_BYTES = 0x52; // 0x5F52 79 public static final int DIGITAL_SIGNATURE = 0x3D; // 0x5F3D 80 public static final int APPLICATION_TEMPLATE = 0x01; // 0x61 81 public static final int FCP_TEMPLATE = 0x02; // 0x62 82 public static final int WRAPPER = 0x03; // 0x63 83 public static final int FMD_TEMPLATE = 0x04; // 0x64 84 public static final int CARDHOLDER_RELATIVE_DATA = 0x05; // 0x65 85 public static final int CARD_DATA = 0x06; // 0x66 86 public static final int AUTHENTIFICATION_DATA = 0x07; // 0x67 87 public static final int SPECIAL_USER_REQUIREMENTS = 0x08; // 0x68 88 public static final int LOGIN_TEMPLATE = 0x0A; // 0x6A 89 public static final int QUALIFIED_NAME = 0x0B; // 0x6B 90 public static final int CARDHOLDER_IMAGE_TEMPLATE = 0x0C; // 0x6C 91 public static final int APPLICATION_IMAGE_TEMPLATE = 0x0D; // 0x6D 92 public static final int APPLICATION_RELATED_DATA = 0x0E; // 0x6E 93 public static final int FCI_TEMPLATE = 0x0F; // 0x6F 94 public static final int DISCRETIONARY_DATA_OBJECTS = 0x13; // 0x73 95 public static final int COMPATIBLE_TAG_ALLOCATION_AUTHORITY = 0x18; // 0x78 96 public static final int COEXISTANT_TAG_ALLOCATION_AUTHORITY = 0x19; // 0x79 97 public static final int SECURITY_SUPPORT_TEMPLATE = 0x1A; // 0x7A 98 public static final int SECURITY_ENVIRONMENT_TEMPLATE = 0x1B; // 0x7B 99 public static final int DYNAMIC_AUTHENTIFICATION_TEMPLATE = 0x1C; // 0x7C 100 public static final int SECURE_MESSAGING_TEMPLATE = 0x1D; // 0x7D 101 public static final int NON_INTERINDUSTRY_DATA_OBJECT_NESTING_TEMPLATE = 0x1E; // 0x7E 102 public static final int DISPLAY_CONTROL = 0x20; // 0x7F20 103 public static final int CARDHOLDER_CERTIFICATE = 0x21; // 0x7F21; 104 public static final int CV_CERTIFICATE = 0x21; // 0x7F21; 105 public static final int CARDHOLER_REQUIREMENTS_INCLUDED_FEATURES = 0x22; // 0x7F22; 106 public static final int CARDHOLER_REQUIREMENTS_EXCLUDED_FEATURES = 0x23; // 0x7F23; 107 public static final int BIOMETRIC_DATA_TEMPLATE = 0x2E; // 0x7F2E; 108 public static final int DIGITAL_SIGNATURE_BLOCK = 0x3D; // 0x7F3D; 109 public static final int CARDHOLDER_PRIVATE_KEY_TEMPLATE = 0x48; // 0x7F48; 110 public static final int CARDHOLDER_PUBLIC_KEY_TEMPLATE = 0x49; // 0x7F49; 111 public static final int CERTIFICATE_HOLDER_AUTHORIZATION_TEMPLATE = 0x4C; // 0x7F4C; 112 public static final int CERTIFICATE_CONTENT_TEMPLATE = 0x4E; // 0x7F4E; 113 public static final int CERTIFICATE_BODY = 0x4E; // 0x7F4E; 114 public static final int BIOMETRIC_INFORMATION_TEMPLATE = 0x00; // 0x60 115 public static final int BIOMETRIC_INFORMATION_GROUP_TEMPLATE = 0x01; // 0x61 116 getTag(int encodedTag)117 public static int getTag(int encodedTag) 118 { 119 /* 120 int i; 121 for (i = 24; i>=0; i-=8) { 122 if (((0xFF<<i) & tag) != 0) 123 return (((0xFF<<i) & tag) >> i); 124 } 125 return 0; 126 */ 127 return decodeTag(encodedTag); 128 } 129 getTagNo(int tag)130 public static int getTagNo(int tag) 131 { 132 int i; 133 for (i = 24; i >= 0; i -= 8) 134 { 135 if (((0xFF << i) & tag) != 0) 136 { 137 return ((~(0xFF << i)) & tag); 138 } 139 } 140 return 0; 141 } 142 encodeTag(ASN1ApplicationSpecific spec)143 public static int encodeTag(ASN1ApplicationSpecific spec) 144 { 145 int retValue = BERTags.APPLICATION; 146 boolean constructed = spec.isConstructed(); 147 if (constructed) 148 { 149 retValue |= BERTags.CONSTRUCTED; 150 } 151 152 int tag = spec.getApplicationTag(); 153 154 if (tag > 31) 155 { 156 retValue |= 0x1F; 157 retValue <<= 8; 158 159 int currentByte = tag & 0x7F; 160 retValue |= currentByte; 161 tag >>= 7; 162 163 while (tag > 0) 164 { 165 retValue |= 0x80; 166 retValue <<= 8; 167 168 currentByte = tag & 0x7F; 169 retValue |= currentByte; 170 tag >>= 7; 171 } 172 } 173 else 174 { 175 retValue |= tag; 176 } 177 178 return retValue; 179 } 180 decodeTag(int tag)181 public static int decodeTag(int tag) 182 { 183 int retValue = 0; 184 boolean multiBytes = false; 185 for (int i = 24; i >= 0; i -= 8) 186 { 187 int currentByte = tag >> i & 0xFF; 188 if (currentByte == 0) 189 { 190 continue; 191 } 192 193 if (multiBytes) 194 { 195 retValue <<= 7; 196 retValue |= currentByte & 0x7F; 197 } 198 else if ((currentByte & 0x1F) == 0x1F) 199 { 200 multiBytes = true; 201 } 202 else 203 { 204 return currentByte & 0x1F; // higher order bit are for DER.Constructed and type 205 } 206 } 207 return retValue; 208 } 209 } 210