001package org.apache.commons.ssl.org.bouncycastle.asn1.eac; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.BERTags; 004import org.apache.commons.ssl.org.bouncycastle.asn1.DERApplicationSpecific; 005 006public class EACTags 007{ 008 public static final int OBJECT_IDENTIFIER = 0x06; 009 public static final int COUNTRY_CODE_NATIONAL_DATA = 0x41; 010 public static final int ISSUER_IDENTIFICATION_NUMBER = 0x02; //0x42; 011 public static final int CARD_SERVICE_DATA = 0x43; 012 public static final int INITIAL_ACCESS_DATA = 0x44; 013 public static final int CARD_ISSUER_DATA = 0x45; 014 public static final int PRE_ISSUING_DATA = 0x46; 015 public static final int CARD_CAPABILITIES = 0x47; 016 public static final int STATUS_INFORMATION = 0x48; 017 public static final int EXTENDED_HEADER_LIST = 0x4D; 018 public static final int APPLICATION_IDENTIFIER = 0x4F; 019 public static final int APPLICATION_LABEL = 0x50; 020 public static final int FILE_REFERENCE = 0x51; 021 public static final int COMMAND_TO_PERFORM = 0x52; 022 public static final int DISCRETIONARY_DATA = 0x53; 023 public static final int OFFSET_DATA_OBJECT = 0x54; 024 public static final int TRACK1_APPLICATION = 0x56; 025 public static final int TRACK2_APPLICATION = 0x57; 026 public static final int TRACK3_APPLICATION = 0x58; 027 public static final int CARD_EXPIRATION_DATA = 0x59; 028 public static final int PRIMARY_ACCOUNT_NUMBER = 0x5A;// PAN 029 public static final int NAME = 0x5B; 030 public static final int TAG_LIST = 0x5C; 031 public static final int HEADER_LIST = 0x5D; 032 public static final int LOGIN_DATA = 0x5E; 033 public static final int CARDHOLDER_NAME = 0x20; // 0x5F20; 034 public static final int TRACK1_CARD = 0x5F21; 035 public static final int TRACK2_CARD = 0x5F22; 036 public static final int TRACK3_CARD = 0x5F23; 037 public static final int APPLICATION_EXPIRATION_DATE = 0x24; // 0x5F24; 038 public static final int APPLICATION_EFFECTIVE_DATE = 0x25; // 0x5F25; 039 public static final int CARD_EFFECTIVE_DATE = 0x5F26; 040 public static final int INTERCHANGE_CONTROL = 0x5F27; 041 public static final int COUNTRY_CODE = 0x5F28; 042 public static final int INTERCHANGE_PROFILE = 0x29; // 0x5F29; 043 public static final int CURRENCY_CODE = 0x5F2A; 044 public static final int DATE_OF_BIRTH = 0x5F2B; 045 public static final int CARDHOLDER_NATIONALITY = 0x5F2C; 046 public static final int LANGUAGE_PREFERENCES = 0x5F2D; 047 public static final int CARDHOLDER_BIOMETRIC_DATA = 0x5F2E; 048 public static final int PIN_USAGE_POLICY = 0x5F2F; 049 public static final int SERVICE_CODE = 0x5F30; 050 public static final int TRANSACTION_COUNTER = 0x5F32; 051 public static final int TRANSACTION_DATE = 0x5F33; 052 public static final int CARD_SEQUENCE_NUMBER = 0x5F34; 053 public static final int SEX = 0x5F35; 054 public static final int CURRENCY_EXPONENT = 0x5F36; 055 public static final int STATIC_INTERNAL_AUTHENTIFICATION_ONE_STEP = 0x37; // 0x5F37; 056 public static final int SIGNATURE = 0x5F37; 057 public static final int STATIC_INTERNAL_AUTHENTIFICATION_FIRST_DATA = 0x5F38; 058 public static final int STATIC_INTERNAL_AUTHENTIFICATION_SECOND_DATA = 0x5F39; 059 public static final int DYNAMIC_INTERNAL_AUTHENTIFICATION = 0x5F3A; 060 public static final int DYNAMIC_EXTERNAL_AUTHENTIFICATION = 0x5F3B; 061 public static final int DYNAMIC_MUTUAL_AUTHENTIFICATION = 0x5F3C; 062 public static final int CARDHOLDER_PORTRAIT_IMAGE = 0x5F40; 063 public static final int ELEMENT_LIST = 0x5F41; 064 public static final int ADDRESS = 0x5F42; 065 public static final int CARDHOLDER_HANDWRITTEN_SIGNATURE = 0x5F43; 066 public static final int APPLICATION_IMAGE = 0x5F44; 067 public static final int DISPLAY_IMAGE = 0x5F45; 068 public static final int TIMER = 0x5F46; 069 public static final int MESSAGE_REFERENCE = 0x5F47; 070 public static final int CARDHOLDER_PRIVATE_KEY = 0x5F48; 071 public static final int CARDHOLDER_PUBLIC_KEY = 0x5F49; 072 public static final int CERTIFICATION_AUTHORITY_PUBLIC_KEY = 0x5F4A; 073 public static final int DEPRECATED = 0x5F4B; 074 public static final int CERTIFICATE_HOLDER_AUTHORIZATION = 0x5F4C;// Not yet defined in iso7816. The allocation is requested 075 public static final int INTEGRATED_CIRCUIT_MANUFACTURER_ID = 0x5F4D; 076 public static final int CERTIFICATE_CONTENT = 0x5F4E; 077 public static final int UNIFORM_RESOURCE_LOCATOR = 0x5F50; 078 public static final int ANSWER_TO_RESET = 0x5F51; 079 public static final int HISTORICAL_BYTES = 0x5F52; 080 public static final int DIGITAL_SIGNATURE = 0x5F3D; 081 public static final int APPLICATION_TEMPLATE = 0x61; 082 public static final int FCP_TEMPLATE = 0x62; 083 public static final int WRAPPER = 0x63; 084 public static final int FMD_TEMPLATE = 0x64; 085 public static final int CARDHOLDER_RELATIVE_DATA = 0x65; 086 public static final int CARD_DATA = 0x66; 087 public static final int AUTHENTIFICATION_DATA = 0x67; 088 public static final int SPECIAL_USER_REQUIREMENTS = 0x68; 089 public static final int LOGIN_TEMPLATE = 0x6A; 090 public static final int QUALIFIED_NAME = 0x6B; 091 public static final int CARDHOLDER_IMAGE_TEMPLATE = 0x6C; 092 public static final int APPLICATION_IMAGE_TEMPLATE = 0x6D; 093 public static final int APPLICATION_RELATED_DATA = 0x6E; 094 public static final int FCI_TEMPLATE = 0x6F; 095 public static final int DISCRETIONARY_DATA_OBJECTS = 0x73; 096 public static final int COMPATIBLE_TAG_ALLOCATION_AUTHORITY = 0x78; 097 public static final int COEXISTANT_TAG_ALLOCATION_AUTHORITY = 0x79; 098 public static final int SECURITY_SUPPORT_TEMPLATE = 0x7A; 099 public static final int SECURITY_ENVIRONMENT_TEMPLATE = 0x7B; 100 public static final int DYNAMIC_AUTHENTIFICATION_TEMPLATE = 0x7C; 101 public static final int SECURE_MESSAGING_TEMPLATE = 0x7D; 102 public static final int NON_INTERINDUSTRY_DATA_OBJECT_NESTING_TEMPLATE = 0x7E; 103 public static final int DISPLAY_CONTROL = 0x7F20; 104 public static final int CARDHOLDER_CERTIFICATE = 0x21; // 0x7F21; 105 public static final int CV_CERTIFICATE = 0x7F21; 106 public static final int CARDHOLER_REQUIREMENTS_INCLUDED_FEATURES = 0x7F22; 107 public static final int CARDHOLER_REQUIREMENTS_EXCLUDED_FEATURES = 0x7F23; 108 public static final int BIOMETRIC_DATA_TEMPLATE = 0x7F2E; 109 public static final int DIGITAL_SIGNATURE_BLOCK = 0x7F3D; 110 public static final int CARDHOLDER_PRIVATE_KEY_TEMPLATE = 0x7F48; 111 public static final int CARDHOLDER_PUBLIC_KEY_TEMPLATE = 0x49; // 0x7F49; 112 public static final int CERTIFICATE_HOLDER_AUTHORIZATION_TEMPLATE = 0x4C; // 0x7F4C; 113 public static final int CERTIFICATE_CONTENT_TEMPLATE = 0x4E; // 0x7F4E; 114 public static final int CERTIFICATE_BODY = 0x4E; // 0x7F4E; 115 public static final int BIOMETRIC_INFORMATION_TEMPLATE = 0x7F60; 116 public static final int BIOMETRIC_INFORMATION_GROUP_TEMPLATE = 0x7F61; 117 118 public static int getTag(int encodedTag) 119 { 120 /* 121 int i; 122 for (i = 24; i>=0; i-=8) { 123 if (((0xFF<<i) & tag) != 0) 124 return (((0xFF<<i) & tag) >> i); 125 } 126 return 0; 127 */ 128 return decodeTag(encodedTag); 129 } 130 131 public static int getTagNo(int tag) 132 { 133 int i; 134 for (i = 24; i >= 0; i -= 8) 135 { 136 if (((0xFF << i) & tag) != 0) 137 { 138 return ((~(0xFF << i)) & tag); 139 } 140 } 141 return 0; 142 } 143 144 public static int encodeTag(DERApplicationSpecific spec) 145 { 146 int retValue = BERTags.APPLICATION; 147 boolean constructed = spec.isConstructed(); 148 if (constructed) 149 { 150 retValue |= BERTags.CONSTRUCTED; 151 } 152 153 int tag = spec.getApplicationTag(); 154 155 if (tag > 31) 156 { 157 retValue |= 0x1F; 158 retValue <<= 8; 159 160 int currentByte = tag & 0x7F; 161 retValue |= currentByte; 162 tag >>= 7; 163 164 while (tag > 0) 165 { 166 retValue |= 0x80; 167 retValue <<= 8; 168 169 currentByte = tag & 0x7F; 170 tag >>= 7; 171 } 172 } 173 else 174 { 175 retValue |= tag; 176 } 177 178 return retValue; 179 } 180 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}