grizzly_ber 0.0.4 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/grizzly_ber.rb +132 -125
  3. data/lib/grizzly_tag.rb +121 -121
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 077a5e4209ed67b5e742483eb8d03cecadbc1c7b
4
- data.tar.gz: 1d9297a29825dc84a885acc36cb9099a969faa16
3
+ metadata.gz: f53d7ab07529b15d9aa734970098be59d26c0f5f
4
+ data.tar.gz: 6c9400a6562e683cf4fecddd5ffc5e914efa85c3
5
5
  SHA512:
6
- metadata.gz: c5acf3a967abb26123a6ed9ec2a09a0f54f02d21092709eb4f50867c67c3f468689e05f1d9dbbedfc1be958f9618ea846eef046ba37684926404e45d99c0943d
7
- data.tar.gz: 8b72fb01f4a56fca75d944c51aad603303c6174531f8e36d40645fc477665984c7efea736e4e71ee2d33645d31e1328fcef9170989e4c8fae5b67dcaddb6d5fe
6
+ metadata.gz: 70872c91a78a71d23f812ddc3c8c6620d306373a4359216a00b88e2db59fd7efeff117b355c30a1530ef26cadad3d16cf54278b4f9cf3482b07e2d3a013db707
7
+ data.tar.gz: d0fb5e0ac7d558892ab2481958a6f4333aca695f2bde1d07138ef7f96773745e4a7c243586ad48f3e3c5bcc7718c64c02408489189a84ffef45f62f5fb30b419
data/lib/grizzly_ber.rb CHANGED
@@ -1,138 +1,59 @@
1
1
  require 'grizzly_tag'
2
2
 
3
- class GrizzlyBer
4
- attr_reader :value, :tag
5
-
6
- def initialize(hex_string = "")
7
- @tag = nil
8
- @length = nil
9
- @value = nil
10
- decode_hex(hex_string)
11
- end
12
-
13
- def value=(new_value)
14
- if new_value.is_a? String
15
- @value = new_value
16
- @tag = nil if isConstruct?
17
- elsif new_value.is_a? Array and new_value.all? {|tlv| tlv.is_a? GrizzlyBer}
18
- @value = new_value
19
- @tag = nil if not isConstruct?
20
- else
21
- @value = nil
22
- end
23
- end
24
-
25
- def tag=(new_tag)
26
- @tag = new_tag
27
- @value = nil if isConstruct? and @value.is_a? String
28
- @value = nil if not isConstruct? and @value.is_a? Array
29
- @value = [] if isConstruct? and @value.nil?
30
- end
31
-
32
- def find(tag_or_name)
33
- if tag_or_name.is_a? String
34
- tag = GrizzlyTag.tag_from_name(tag_or_name)
35
- else
36
- tag = tag_or_name
37
- end
38
- return self if @tag == tag
39
- return nil unless isConstruct?
40
- @value.find{|tlv| tlv.find(tag) != nil}
41
- end
42
-
43
- def remove!(tag_or_name)
44
- tag_to_remove = find(tag_or_name)
45
- @value.delete tag_to_remove unless tag_to_remove.nil?
46
- end
47
-
48
- def decode_hex(hex_string)
49
- decode_binary([hex_string].pack("H*"))
50
- end
3
+ class GrizzlyBerElement
4
+ attr_reader :tag, :value
51
5
 
52
- def decode_binary(binary_string)
53
- decode_byte_array(binary_string.unpack("C*"))
54
- end
55
-
56
- def self.decode_all_hex(hex_string)
57
- decode_all_binary([hex_string].pack("H*"))
58
- end
59
-
60
- def self.decode_all_binary(binary_string)
61
- decode_all_byte_array(binary_string.unpack("C*"))
62
- end
63
-
64
- def encode_hex
65
- encoded = ""
66
- encoded << @tag.to_s(16).upcase
67
- if length_of_length == 1
68
- encoded << length.to_s(16).rjust(2,'0').upcase
69
- else
70
- encoded << ((length_of_length-1) | 0x80).to_s(16).rjust(2,'0').upcase
71
- encoded << length.to_s(16).rjust((length_of_length-1)*2,'0').upcase
72
- end
73
- encoded << encode_only_values
6
+ def initialize(byte_array = [])
7
+ raise ArgumentError, "byte_array must be of type Array" unless byte_array.is_a?(Array)
8
+ @tag = "" # is an uppercase hex string
9
+ @value = nil # is a byte array if this is a data element or a GrizzlyBer if it's a sequence element
10
+ decode_value decode_length decode_tag byte_array
74
11
  end
75
12
 
76
- def encode_binary
77
- [encode_hex].pack("H*")
13
+ def tag=(tag)
14
+ raise ArgumentError, "tag must be a valid hex string" unless tag.is_a? String and tag.size.even? and tag =~ /^[0-9A-F]*$/
15
+ @tag = tag
78
16
  end
79
17
 
80
- def encode_only_values
81
- if @value.is_a? String
82
- @value.upcase
83
- else
84
- @value.inject("") {|encoded_children,child| encoded_children << child.encode_hex}
85
- end
18
+ def value=(value)
19
+ raise ArgumentError, "value must be of type Array or GrizzlyBer" unless value.is_a?(Array) || value.is_a?(GrizzlyBer)
20
+ @value = value
86
21
  end
87
22
 
88
- def to_s(indent_size: 0)
89
- indent = " " * 3 * indent_size
90
- info = GrizzlyTag.tagged(@tag) || {:name => "Unknown Tag", :description => "Unknown"}
91
- output = "#{indent}#{@tag.to_s(16).upcase}: #{info[:name]}\n"
92
- output += "#{indent} Description: #{info[:description]}\n"
93
- if @value.is_a? Array
94
- output += @value.reduce("") { |string, tlv| string += tlv.to_s(indent_size: indent_size+1)}
23
+ def to_ber
24
+ ber_array = ""
25
+ ber_array += @tag.upcase
26
+ value_hex_string = @value.pack("C*").unpack("H*").first.upcase if @value.is_a? Array
27
+ value_hex_string = @value.to_ber if @value.is_a? GrizzlyBer
28
+ value_byte_count = value_hex_string.size/2
29
+ if value_byte_count < 0x7F # if the length of the value array is only one byte long and does not have its upper bit set
30
+ ber_array << byte_to_hex(value_byte_count)
95
31
  else
96
- output += "#{indent} Value: #{@value}"
97
- output += ", \"#{[@value].pack("H*")}\"" if info[:format] == :string
98
- output += "\n"
32
+ #pack("w") was meant to do this length calc but doesn't work right...
33
+ number_of_bytes_in_byte_count = ((value_byte_count).to_s(16).size/2.0).ceil
34
+ ber_array << byte_to_hex(number_of_bytes_in_byte_count | 0x80)
35
+ ber_array += (value_byte_count).to_s(16).rjust(number_of_bytes_in_byte_count*2,'0').upcase
99
36
  end
100
- output
101
- end
102
-
103
- protected
104
-
105
- def length
106
- return value.length/2 if value.is_a? String #because hex strings are 2 chars per byte
107
- value.inject(0) {|length, tlv| length += tlv.length_of_tag + tlv.length_of_length + tlv.length}
37
+ ber_array += value_hex_string
108
38
  end
109
39
 
110
- def length_of_tag
111
- [@tag.to_s(16)].pack("H*").unpack("C*").count
112
- end
113
-
114
- def length_of_length
115
- 1 + ((length < 0x7F) ? 0 : [length.to_s(16)].pack("H*").unpack("C*").count)
116
- end
40
+ private
117
41
 
118
- def decode_byte_array(byte_array)
119
- decode_value decode_length decode_tag byte_array
120
- self
42
+ def byte_to_hex(byte)
43
+ byte.to_s(16).rjust(2,'0').upcase
121
44
  end
122
45
 
123
- private
124
-
125
46
  def decode_tag(byte_array)
126
47
  byte_array.shift while byte_array.size > 0 and (byte_array[0] == 0x00 or byte_array[0] == 0xFF)
127
48
  return [] if byte_array.size < 1
128
49
 
129
50
  first_byte = byte_array.shift
130
- @tag = first_byte
51
+ @tag << byte_to_hex(first_byte)
131
52
  return byte_array if (first_byte & 0x1F) != 0x1F
132
53
 
133
54
  while byte_array.size > 0
134
55
  next_byte = byte_array.shift
135
- @tag = (@tag << 8) | next_byte
56
+ @tag << byte_to_hex(next_byte)
136
57
  return byte_array if (next_byte & 0x80) != 0x80
137
58
  end
138
59
 
@@ -157,25 +78,111 @@ class GrizzlyBer
157
78
  byte_array
158
79
  end
159
80
 
160
- def isConstruct?
161
- ([@tag.to_s(16)].pack("H*").unpack("C*").first & 0x20) == 0x20
162
- end
163
-
164
81
  def decode_value(byte_array)
165
82
  return [] if byte_array.size < 1 or byte_array.size < @length
166
- if isConstruct?
167
- @value = []
168
- children_bytes = byte_array.shift(@length)
169
- @value << GrizzlyBer.new.decode_byte_array(children_bytes) while children_bytes.size > 0
170
- else
171
- @value = byte_array.shift(@length).pack("C*").unpack("H*").first.upcase
83
+ return @value = byte_array.shift(@length) if [@tag].pack("H*").unpack("C*").first & 0x20 == 0
84
+ @value = GrizzlyBer.new.from_ber byte_array.shift(@length)
85
+ end
86
+ end
87
+
88
+ class GrizzlyBer
89
+ include Enumerable
90
+
91
+ def initialize(hex_string = "")
92
+ raise ArgumentError, "hex_string must be a valid hex string" unless hex_string.is_a? String and hex_string.size.even? and hex_string =~ /^[0-9A-F]*$/
93
+ @elements = [] # is an array of GrizzlyBerElement
94
+ from_ber_hex_string(hex_string)
95
+ end
96
+
97
+ def from_ber_hex_string(hex_string)
98
+ raise ArgumentError, "hex_string must be a valid hex string" unless hex_string.is_a? String and hex_string.size.even? and hex_string =~ /^[0-9A-F]*$/
99
+ self.from_ber [hex_string].pack("H*").unpack("C*")
100
+ end
101
+
102
+ def from_ber(byte_array)
103
+ raise ArgumentError, "byte_array must be an array of bytes" unless byte_array.is_a? Array and byte_array.all? {|byte| byte.is_a? Integer and byte <= 0xFF}
104
+ while byte_array.size > 0
105
+ element = GrizzlyBerElement.new(byte_array)
106
+ return nil if element.tag.nil?
107
+ return nil if element.value.nil?
108
+ @elements << element
172
109
  end
110
+ self
173
111
  end
174
112
 
175
- def self.decode_all_byte_array(byte_array)
176
- tlv_array = []
177
- tlv_array << GrizzlyBer.new.instance_eval { decode_byte_array(byte_array) } while byte_array.size > 0
178
- tlv_array
113
+ def to_ber
114
+ @elements.reduce("") {|ber_array, element| ber_array += element.to_ber}
115
+ end
116
+
117
+ def [](index_or_tag)
118
+ return value_of_first_element_with_tag(index_or_tag) if index_or_tag.is_a? String
119
+ @elements[index_or_tag]
120
+ end
121
+
122
+ def []=(index_or_tag,value)
123
+ return set_value_for_tag(index_or_tag, value) if index_or_tag.is_a? String
124
+ @elements[index].value = value
125
+ @elements[index]
126
+ end
127
+
128
+ def size
129
+ @elements.size
130
+ end
131
+
132
+ def each &block
133
+ @elements.each &block
179
134
  end
180
- end
181
135
 
136
+ def value_of_first_element_with_tag(tag)
137
+ first_tagged_element = @elements.find {|element| tag.upcase == element.tag}
138
+ first_tagged_element ||= @elements.find {|element| element.tag == GrizzlyTag.named(tag)[:tag]} if GrizzlyTag.named(tag)
139
+ first_tagged_element &&= first_tagged_element.value
140
+ end
141
+
142
+ def hex_value_of_first_element_with_tag(tag)
143
+ first_tagged_element = value_of_first_element_with_tag(tag)
144
+ first_tagged_element &&= first_tagged_element.pack("C*").unpack("H*").first.upcase
145
+ end
146
+
147
+ def set_value_for_tag(tag, value)
148
+ tag.upcase!
149
+ first_tagged_element = @elements.find {|element| tag == element.tag}
150
+ first_tagged_element ||= @elements.find {|element| element.tag == GrizzlyTag.named(tag)[:tag]} if GrizzlyTag.named(tag)
151
+ if first_tagged_element.nil?
152
+ first_tagged_element = GrizzlyBerElement.new
153
+ first_tagged_element.tag = tag
154
+ @elements << first_tagged_element
155
+ end
156
+ first_tagged_element.value = value
157
+ first_tagged_element
158
+ end
159
+
160
+ def set_hex_value_for_tag(tag, value)
161
+ set_value_for_tag(tag, [value].pack("H*").unpack("C*"))
162
+ end
163
+
164
+ def remove!(tag)
165
+ @elements = @elements.select {|element| element.tag != tag.upcase}
166
+ self
167
+ end
168
+
169
+ def to_s(indent_size: 0)
170
+ indent = " " * 3 * indent_size
171
+ @elements.reduce("") do |output, element|
172
+ info = GrizzlyTag.tagged(element.tag) || {:name => "Unknown Tag", :description => "Unknown"}
173
+ output += "#{indent}#{element.tag}: #{info[:name]}\n"
174
+ output += "#{indent} Description: #{info[:description]}\n"
175
+ if element.value.is_a? GrizzlyBer
176
+ output += element.value.to_s(indent_size: indent_size+1)
177
+ else
178
+ output += "#{indent} Value: #{element.value.pack("C*").unpack("H*").first}"
179
+ output += ", \"#{element.value.pack("C*")}\"" if info[:format] == :string
180
+ output += "\n"
181
+ end
182
+ end
183
+ end
184
+
185
+ private
186
+
187
+
188
+ end
data/lib/grizzly_tag.rb CHANGED
@@ -23,126 +23,126 @@ module GrizzlyTag
23
23
 
24
24
  @@tags = [
25
25
  #Tags taken from EMV 4.3 Book 3 Annex A
26
- new_tag(:tag => 0x5F57, :name => "Account Type", :description => "Indicates the type of account selected on the terminal, coded as specified in Annex G"),
27
- new_tag(:tag => 0x9F01, :name => "Acquirer Identifier", :description => "Uniquely identifies the acquirer within each payment system"),
28
- new_tag(:tag => 0x9F40, :name => "Additional Terminal Capabilities", :description => "Indicates the data input and output capabilities of the terminal"),
29
- new_tag(:tag => 0x81, :name => "Amount, Authorised (Binary)", :description => "Authorised amount of the transaction (excluding adjustments)"),
30
- new_tag(:tag => 0x9F02, :name => "Amount, Authorised (Numeric)", :description => "Authorised amount of the transaction (excluding adjustments)"),
31
- new_tag(:tag => 0x9F04, :name => "Amount, Other (Binary)", :description => "Secondary amount associated with the transaction representing a cashback amount"),
32
- new_tag(:tag => 0x9F03, :name => "Amount, Other (Numeric)", :description => "Secondary amount associated with the transaction representing a cashback amount"),
33
- new_tag(:tag => 0x9F3A, :name => "Amount, Reference Currency", :description => "Authorised amount expressed in the reference currency"),
34
- new_tag(:tag => 0x9F26, :name => "Application Cryptogram", :description => "Cryptogram returned by the ICC in response of the GENERATE AC command"),
35
- new_tag(:tag => 0x9F42, :name => "Application Currency Code", :description => "Indicates the currency in which the account is managed according to ISO 4217"),
36
- new_tag(:tag => 0x9F44, :name => "Application Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the amount represented according to ISO 4217"),
37
- new_tag(:tag => 0x9F05, :name => "Application Discretionary Data", :description => "Issuer or payment system specified data relating to the application"),
38
- new_tag(:tag => 0x5F25, :name => "Application Effective Date", :description => "Date from which the application may be used"),
39
- new_tag(:tag => 0x5F24, :name => "Application Expiration Date", :description => "Date after which application expires"),
40
- new_tag(:tag => 0x94, :name => "Application File Locator (AFL)", :description => "Indicates the location (SFI, range of records) of the AEFs related to a given application"),
41
- new_tag(:tag => 0x4F, :name => "Application Dedicated File (ADF) Name", :description => "Identifies the application as described in ISO/IEC 7816-5"),
42
- new_tag(:tag => 0x9F06, :name => "Application Identifier (AID) – terminal", :description => "Identifies the application as described in ISO/IEC 7816-5"),
43
- new_tag(:tag => 0x82, :name => "Application Interchange Profile", :description => "Indicates the capabilities of the card to support specific functions in the application"),
44
- new_tag(:tag => 0x50, :name => "Application Label", :format => :string, :description => "Mnemonic associated with the AID according to ISO/IEC 7816-5"),
45
- new_tag(:tag => 0x9F12, :name => "Application Preferred Name", :format => :string, :description => "Preferred mnemonic associated with the AID"),
46
- new_tag(:tag => 0x5A, :name => "Application Primary Account Number (PAN)", :description => "Valid cardholder account number"),
47
- new_tag(:tag => 0x5F34, :name => "Application Primary Account Number (PAN) Sequence Number", :description => "Identifies and differentiates cards with the same PAN"),
48
- new_tag(:tag => 0x87, :name => "Application Priority Indicator", :description => "Indicates the priority of a given application or group of applications in a directory"),
49
- new_tag(:tag => 0x9F3B, :name => "Application Reference Currency", :description => "1-4 currency codes used between the terminal and the ICC when the Transaction Currency Code is different from the Application Currency Code; each code is 3 digits according to ISO 4217"),
50
- new_tag(:tag => 0x9F43, :name => "Application Reference Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the amount, for each of the 1-4 reference currencies represented according to ISO 4217"),
51
- new_tag(:tag => 0x70, :name => "Application Template", :description => "Contains one or more data objects relevant to an application directory entry according to ISO/IEC 7816-5"),
52
- new_tag(:tag => 0x9F36, :name => "Application Transaction Counter (ATC)", :description => "Counter maintained by the application in the ICC (incrementing the ATC is managed by the ICC)"),
53
- new_tag(:tag => 0x9F07, :name => "Application Usage Control", :description => "Indicates issuer’s specified restrictions on the geographic usage and services allowed for the application"),
54
- new_tag(:tag => 0x9F08, :name => "Application Version Number", :description => "Version number assigned by the payment system for the application"),
55
- new_tag(:tag => 0x9F09, :name => "Application Version Number", :description => "Version number assigned by the payment system for the application"),
56
- new_tag(:tag => 0x89, :name => "Authorisation Code", :description => "Value generated by the authorisation authority for an approved transaction"),
57
- new_tag(:tag => 0x8A, :name => "Authorisation Response Code", :format => :string, :description => "Code that defines the disposition of a message"),
58
- new_tag(:tag => 0x5F54, :name => "Bank Identifier Code (BIC)", :description => "Uniquely identifies a bank as defined in ISO 9362."),
59
- new_tag(:tag => 0x8C, :name => "Risk Management Data Object List 1 (CDOL1)", :description => "List of data objects (tag and length) to be passed to the ICC in the first GENERATE AC command"),
60
- new_tag(:tag => 0x8D, :name => "Card Risk Management Data Object List 2 (CDOL2)", :description => "List of data objects (tag and length) to be passed to the ICC in the second GENERATE AC command"),
61
- new_tag(:tag => 0x5F20, :name => "Cardholder Name", :format => :string, :description => "Indicates cardholder name according to ISO 7813"),
62
- new_tag(:tag => 0x9F0B, :name => "Cardholder Name Extended", :format => :string, :description => "Indicates the whole cardholder name when greater than 26 characters using the same coding convention as in ISO 7813"),
63
- new_tag(:tag => 0x8E, :name => "Cardholder Verification Method (CVM) List", :description => "Identifies a method of verification of the cardholder supported by the application"),
64
- new_tag(:tag => 0x9F34, :name => "Cardholder Verification Method (CVM) Results", :description => "Indicates the results of the last CVM performed"),
65
- new_tag(:tag => 0x8F, :name => "Certification Authority Public Key Index", :description => "Identifies the certification authority’s public key in conjunction with the RID"),
66
- new_tag(:tag => 0x9F22, :name => "Certification Authority Public Key Index", :description => "Identifies the certification authority’s public key in conjunction with the RID"),
67
- new_tag(:tag => 0x83, :name => "Command Template", :description => "Identifies the data field of a command message"),
68
- new_tag(:tag => 0x9F27, :name => "Cryptogram Information Data", :description => "Indicates the type of cryptogram and the actions to be performed by the terminal"),
69
- new_tag(:tag => 0x9F45, :name => "Data Authentication Code", :description => "An issuer assigned value that is retained by the terminal during the verification process of the Signed Static Application Data"),
70
- new_tag(:tag => 0x84, :name => "Dedicated File (DF) Name", :description => "Identifies the name of the DF as described in ISO/IEC 7816-4"),
71
- new_tag(:tag => 0x9D, :name => "Directory Definition File (DDF) Name", :description => "Identifies the name of a DF associated with a directory"),
72
- new_tag(:tag => 0x73, :name => "Directory Discretionary Template", :description => "Issuer discretionary part of the directory according to ISO/IEC 7816-5"),
73
- new_tag(:tag => 0x9F49, :name => "Dynamic Data Authentication Data Object List (DDOL)", :description => "List of data objects (tag and length) to be passed to the ICC in the INTERNAL AUTHENTICATE command"),
74
- new_tag(:tag => 0xBF0C, :name => "File Control Information (FCI) Issuer Discretionary Data", :description => "Issuer discretionary part of the FCI"),
75
- new_tag(:tag => 0xA5, :name => "File Control Information (FCI) Proprietary Template", :description => "Identifies the data object proprietary to this specification in the FCI template according to ISO/IEC 7816-4"),
76
- new_tag(:tag => 0x6F, :name => "File Control Information (FCI) Template", :description => "Identifies the FCI template according to ISO/IEC 7816-4"),
77
- new_tag(:tag => 0x9F4C, :name => "ICC Dynamic Number", :description => "Time-variant number generated by the ICC, to be captured by the terminal"),
78
- new_tag(:tag => 0x9F2D, :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Certificate", :description => "ICC PIN Encipherment Public Key certified by the issuer"),
79
- new_tag(:tag => 0x9F2E, :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Exponent", :description => "ICC PIN Encipherment Public Key Exponent used for PIN encipherment"),
80
- new_tag(:tag => 0x9F2F, :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Remainder", :description => "Remaining digits of the ICC PIN Encipherment Public Key Modulus"),
81
- new_tag(:tag => 0x9F46, :name => "Integrated Circuit Card (ICC) Public Key Certificate", :description => "ICC Public Key certified by the issuer"),
82
- new_tag(:tag => 0x9F47, :name => "Integrated Circuit Card (ICC) Public Key Exponent", :description => "ICC Public Key Exponent used for the verification of the Signed Dynamic Application Data"),
83
- new_tag(:tag => 0x9F48, :name => "Integrated Circuit Card (ICC) Public Key Remainder", :description => "Remaining digits of the ICC Public Key Modulus"),
84
- new_tag(:tag => 0x9F1E, :name => "Interface Device (IFD) Serial Number", :format => :string, :description => "Unique and permanent serial number assigned to the IFD by the manufacturer"),
85
- new_tag(:tag => 0x5F53, :name => "International Bank Account Number (IBAN)", :description => "Uniquely identifies the account of a customer at a financial institution as defined in ISO 13616."),
86
- new_tag(:tag => 0x9F0D, :name => "Issuer Action Code - Default", :description => "Specifies the issuer’s conditions that cause a transaction to be rejected if it might have been approved online, but the terminal is unable to process the transaction online"),
87
- new_tag(:tag => 0x9F0E, :name => "Issuer Action Code - Denial", :description => "Specifies the issuer’s conditions that cause the denial of a transaction without attempt to go online"),
88
- new_tag(:tag => 0x9F0F, :name => "Issuer Action Code - Online", :description => "Specifies the issuer’s conditions that cause a transaction to be transmitted online"),
89
- new_tag(:tag => 0x9F10, :name => "Issuer Application Data", :description => "Contains proprietary application data for transmission to the issuer in an online transaction."),
90
- new_tag(:tag => 0x91, :name => "Issuer Authentication Data", :description => "Data sent to the ICC for online issuer authentication"),
91
- new_tag(:tag => 0x9F11, :name => "Issuer Code Table Index", :description => "Indicates the code table according to ISO/IEC 8859 for displaying the Application Preferred Name"),
92
- new_tag(:tag => 0x5F28, :name => "Issuer Country Code", :description => "Indicates the country of the issuer according to ISO 3166"),
93
- new_tag(:tag => 0x5F55, :name => "Issuer Country Code (alpha2 format)", :description => "Indicates the country of the issuer as defined in ISO 3166 (using a 2 character alphabetic code)"),
94
- new_tag(:tag => 0x5F56, :name => "Issuer Country Code (alpha3 format)", :description => "Indicates the country of the issuer as defined in ISO 3166 (using a 3 character alphabetic code)"),
95
- new_tag(:tag => 0x42, :name => "Issuer Identification Number (IIN)", :description => "The number that identifies the major industry and the card issuer and that forms the first part of the Primary Account Number (PAN)"),
96
- new_tag(:tag => 0x90, :name => "Issuer Public Key Certificate", :description => "Issuer public key certified by a certification authority"),
97
- new_tag(:tag => 0x9F32, :name => "Issuer Public Key Exponent", :description => "Issuer public key exponent used for the verification of the Signed Static Application Data and the ICC Public Key Certificate"),
98
- new_tag(:tag => 0x92, :name => "Issuer Public Key Remainder", :description => "Remaining digits of the Issuer Public Key Modulus"),
99
- new_tag(:tag => 0x86, :name => "Issuer Script Command", :description => "Contains a command for transmission to the ICC"),
100
- new_tag(:tag => 0x9F18, :name => "Issuer Script Identifier", :description => "Identification of the Issuer Script"),
101
- new_tag(:tag => 0x71, :name => "Issuer Script Template 1", :description => "Contains proprietary issuer data for transmission to the ICC before the second GENERATE AC command"),
102
- new_tag(:tag => 0x72, :name => "Issuer Script Template 2", :description => "Contains proprietary issuer data for transmission to the ICC after the second GENERATE AC command"),
103
- new_tag(:tag => 0x5F50, :name => "Issuer URL", :format => :string, :description => "The URL provides the location of the Issuer’s Library Server on the Internet."),
104
- new_tag(:tag => 0x5F2D, :name => "Language Preference", :format => :string, :description => "1-4 languages stored in order of preference, each represented by 2 alphabetical characters according to ISO 639"),
105
- new_tag(:tag => 0x9F13, :name => "Last Online Application Transaction Counter (ATC) Register", :description => "ATC value of the last transaction that went online"),
106
- new_tag(:tag => 0x9F4D, :name => "Log Entry", :description => "Provides the SFI of the Transaction Log file and its number of records"),
107
- new_tag(:tag => 0x9F4F, :name => "Log Format", :description => "List (in tag and length format) of data objects representing the logged data elements that are passed to the terminal when a transaction log record is read"),
108
- new_tag(:tag => 0x9F14, :name => "Lower Consecutive Offline Limit", :description => "Issuer-specified preference for the maximum number of consecutive offline transactions for this ICC application allowed in a terminal with online capability"),
109
- new_tag(:tag => 0x9F15, :name => "Merchant Category Code", :description => "Classifies the type of business being done by the merchant, represented according to ISO 8583:1993 for Card Acceptor Business Code"),
110
- new_tag(:tag => 0x9F16, :name => "Merchant Identifier", :format => :string, :description => "When concatenated with the Acquirer Identifier, uniquely identifies a given merchant"),
111
- new_tag(:tag => 0x9F4E, :name => "Merchant Name and Location", :format => :string, :description => "Indicates the name and location of the merchant"),
112
- new_tag(:tag => 0x9F17, :name => "Personal Identification Number (PIN) Try Counter", :description => "Number of PIN tries remaining"),
113
- new_tag(:tag => 0x9F39, :name => "Point-of-Service (POS) Entry Mode", :description => "Indicates the method by which the PAN was entered, according to the first two digits of the ISO 8583:1987 POS Entry Mode"),
114
- new_tag(:tag => 0x9F38, :name => "Processing Options Data Object List (PDOL)", :description => "Contains a list of terminal resident data objects (tags and lengths) needed by the ICC in processing the GET PROCESSING OPTIONS command"),
115
- new_tag(:tag => 0x70, :name => "READ RECORD Response Message Template", :description => "Contains the contents of the record read. (Mandatory for SFIs 1-10. Response messages for SFIs 11-30 are outside the scope of EMV, but may use template '70')"),
116
- new_tag(:tag => 0x80, :name => "Response Message Template Format 1", :description => "Contains the data objects (without tags and lengths) returned by the ICC in response to a command"),
117
- new_tag(:tag => 0x77, :name => "Response Message Template Format 2", :description => "Contains the data objects (with tags and lengths) returned by the ICC in response to a command"),
118
- new_tag(:tag => 0x5F30, :name => "Service Code", :description => "Service code as defined in ISO/IEC 7813 for track 1 and track 2"),
119
- new_tag(:tag => 0x88, :name => "Short File Identifier (SFI)", :description => "Identifies the AEF referenced in commands related to a given ADF or DDF. It is a binary data object having a value in the range 1 to 30 and with the three high order bits set to zero."),
120
- new_tag(:tag => 0x9F4B, :name => "Signed Dynamic Application Data", :description => "Digital signature on critical application parameters for DDA or CDA"),
121
- new_tag(:tag => 0x93, :name => "Signed Static Application Data", :description => "Digital signature on critical application parameters for SDA"),
122
- new_tag(:tag => 0x9F4A, :name => "Static Data Authentication Tag List", :description => "List of tags of primitive data objects defined in this specification whose value fields are to be included in the Signed Static or Dynamic Application Data"),
123
- new_tag(:tag => 0x9F33, :name => "Terminal Capabilities", :description => "Indicates the card data input, CVM, and security capabilities of the terminal"),
124
- new_tag(:tag => 0x9F1A, :name => "Terminal Country Code", :description => "Indicates the country of the terminal, represented according to ISO 3166"),
125
- new_tag(:tag => 0x9F1B, :name => "Terminal Floor Limit", :description => "Indicates the floor limit in the terminal in conjunction with the AID"),
126
- new_tag(:tag => 0x9F1C, :name => "Terminal Identification", :format => :string, :description => "Designates the unique location of a terminal at a merchant"),
127
- new_tag(:tag => 0x9F1D, :name => "Terminal Risk Management Data", :description => "Application-specific value used by the card for risk management purposes"),
128
- new_tag(:tag => 0x9F35, :name => "Terminal Type", :description => "Indicates the environment of the terminal, its communications capability, and its operational control"),
129
- new_tag(:tag => 0x95, :name => "Terminal Verification Results", :description => "Status of the different functions as seen from the terminal"),
130
- new_tag(:tag => 0x9F1F, :name => "Track 1 Discretionary Data", :description => "Discretionary part of track 1 according to ISO/IEC 7813"),
131
- new_tag(:tag => 0x9F20, :name => "Track 2 Discretionary Data", :description => "Discretionary part of track 2 according to ISO/IEC 7813"),
132
- new_tag(:tag => 0x57, :name => "Track 2 Equivalent Data", :description => "Contains the data elements of track 2 according to ISO/IEC 7813, excluding start sentinel, end sentinel, and Longitudinal Redundancy Check (LRC)"),
133
- new_tag(:tag => 0x97, :name => "Transaction Certificate Data Object List (TDOL)", :description => "List of data objects (tag and length) to be used by the terminal in generating the TC Hash Value"),
134
- new_tag(:tag => 0x98, :name => "Transaction Certificate (TC) Hash Value", :description => "Result of a hash function specified in Book 2, Annex B3.1"),
135
- new_tag(:tag => 0x5F2A, :name => "Transaction Currency Code", :description => "Indicates the currency code of the transaction according to ISO 4217"),
136
- new_tag(:tag => 0x5F36, :name => "Transaction Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the transaction amount represented according to ISO 4217"),
137
- new_tag(:tag => 0x9A, :name => "Transaction Date", :description => "Local date that the transaction was authorised"),
138
- new_tag(:tag => 0x99, :name => "Transaction Personal Identification Number (PIN) Data", :description => "Data entered by the cardholder for the purpose of the PIN verification"),
139
- new_tag(:tag => 0x9F3C, :name => "Transaction Reference Currency Code", :description => "Code defining the common currency used by the terminal in case the Transaction Currency Code is different from the Application Currency Code"),
140
- new_tag(:tag => 0x9F3D, :name => "Transaction Reference Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the transaction amount, with the Transaction Reference Currency Code represented according to ISO 4217"),
141
- new_tag(:tag => 0x9F41, :name => "Transaction Sequence Counter", :description => "Counter maintained by the terminal that is incremented by one for each transaction"),
142
- new_tag(:tag => 0x9B, :name => "Transaction Status Information", :description => "Indicates the functions performed in a transaction"),
143
- new_tag(:tag => 0x9F21, :name => "Transaction Time", :description => "Local time that the transaction was authorised"),
144
- new_tag(:tag => 0x9C, :name => "Transaction Type", :description => "Indicates the type of financial transaction, represented by the first two digits of the ISO 8583:1987 Processing Code. The actual values to be used for the Transaction Type data element are defined by the relevant payment system"),
145
- new_tag(:tag => 0x9F37, :name => "Unpredictable Number", :description => "Value to provide variability and uniqueness to the generation of a cryptogram"),
146
- new_tag(:tag => 0x9F23, :name => "Upper Consecutive Offline Limit", :description => "Issuer-specified preference for the maximum number of consecutive offline transactions for this ICC application allowed in a terminal without online capability"),
26
+ new_tag(:tag => "5F57", :name => "Account Type", :description => "Indicates the type of account selected on the terminal, coded as specified in Annex G"),
27
+ new_tag(:tag => "9F01", :name => "Acquirer Identifier", :description => "Uniquely identifies the acquirer within each payment system"),
28
+ new_tag(:tag => "9F40", :name => "Additional Terminal Capabilities", :description => "Indicates the data input and output capabilities of the terminal"),
29
+ new_tag(:tag => "81", :name => "Amount, Authorised (Binary)", :description => "Authorised amount of the transaction (excluding adjustments)"),
30
+ new_tag(:tag => "9F02", :name => "Amount, Authorised (Numeric)", :description => "Authorised amount of the transaction (excluding adjustments)"),
31
+ new_tag(:tag => "9F04", :name => "Amount, Other (Binary)", :description => "Secondary amount associated with the transaction representing a cashback amount"),
32
+ new_tag(:tag => "9F03", :name => "Amount, Other (Numeric)", :description => "Secondary amount associated with the transaction representing a cashback amount"),
33
+ new_tag(:tag => "9F3A", :name => "Amount, Reference Currency", :description => "Authorised amount expressed in the reference currency"),
34
+ new_tag(:tag => "9F26", :name => "Application Cryptogram", :description => "Cryptogram returned by the ICC in response of the GENERATE AC command"),
35
+ new_tag(:tag => "9F42", :name => "Application Currency Code", :description => "Indicates the currency in which the account is managed according to ISO 4217"),
36
+ new_tag(:tag => "9F44", :name => "Application Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the amount represented according to ISO 4217"),
37
+ new_tag(:tag => "9F05", :name => "Application Discretionary Data", :description => "Issuer or payment system specified data relating to the application"),
38
+ new_tag(:tag => "5F25", :name => "Application Effective Date", :description => "Date from which the application may be used"),
39
+ new_tag(:tag => "5F24", :name => "Application Expiration Date", :description => "Date after which application expires"),
40
+ new_tag(:tag => "94", :name => "Application File Locator (AFL)", :description => "Indicates the location (SFI, range of records) of the AEFs related to a given application"),
41
+ new_tag(:tag => "4F", :name => "Application Dedicated File (ADF) Name", :description => "Identifies the application as described in ISO/IEC 7816-5"),
42
+ new_tag(:tag => "9F06", :name => "Application Identifier (AID) – terminal", :description => "Identifies the application as described in ISO/IEC 7816-5"),
43
+ new_tag(:tag => "82", :name => "Application Interchange Profile", :description => "Indicates the capabilities of the card to support specific functions in the application"),
44
+ new_tag(:tag => "50", :name => "Application Label", :format => :string, :description => "Mnemonic associated with the AID according to ISO/IEC 7816-5"),
45
+ new_tag(:tag => "9F12", :name => "Application Preferred Name", :format => :string, :description => "Preferred mnemonic associated with the AID"),
46
+ new_tag(:tag => "5A", :name => "Application Primary Account Number (PAN)", :description => "Valid cardholder account number"),
47
+ new_tag(:tag => "5F34", :name => "Application Primary Account Number (PAN) Sequence Number", :description => "Identifies and differentiates cards with the same PAN"),
48
+ new_tag(:tag => "87", :name => "Application Priority Indicator", :description => "Indicates the priority of a given application or group of applications in a directory"),
49
+ new_tag(:tag => "9F3B", :name => "Application Reference Currency", :description => "1-4 currency codes used between the terminal and the ICC when the Transaction Currency Code is different from the Application Currency Code; each code is 3 digits according to ISO 4217"),
50
+ new_tag(:tag => "9F43", :name => "Application Reference Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the amount, for each of the 1-4 reference currencies represented according to ISO 4217"),
51
+ new_tag(:tag => "70", :name => "Application Template", :description => "Contains one or more data objects relevant to an application directory entry according to ISO/IEC 7816-5"),
52
+ new_tag(:tag => "9F36", :name => "Application Transaction Counter (ATC)", :description => "Counter maintained by the application in the ICC (incrementing the ATC is managed by the ICC)"),
53
+ new_tag(:tag => "9F07", :name => "Application Usage Control", :description => "Indicates issuer’s specified restrictions on the geographic usage and services allowed for the application"),
54
+ new_tag(:tag => "9F08", :name => "Application Version Number", :description => "Version number assigned by the payment system for the application"),
55
+ new_tag(:tag => "9F09", :name => "Application Version Number", :description => "Version number assigned by the payment system for the application"),
56
+ new_tag(:tag => "89", :name => "Authorisation Code", :description => "Value generated by the authorisation authority for an approved transaction"),
57
+ new_tag(:tag => "8A", :name => "Authorisation Response Code", :format => :string, :description => "Code that defines the disposition of a message"),
58
+ new_tag(:tag => "5F54", :name => "Bank Identifier Code (BIC)", :description => "Uniquely identifies a bank as defined in ISO 9362."),
59
+ new_tag(:tag => "8C", :name => "Risk Management Data Object List 1 (CDOL1)", :description => "List of data objects (tag and length) to be passed to the ICC in the first GENERATE AC command"),
60
+ new_tag(:tag => "8D", :name => "Card Risk Management Data Object List 2 (CDOL2)", :description => "List of data objects (tag and length) to be passed to the ICC in the second GENERATE AC command"),
61
+ new_tag(:tag => "5F20", :name => "Cardholder Name", :format => :string, :description => "Indicates cardholder name according to ISO 7813"),
62
+ new_tag(:tag => "9F0B", :name => "Cardholder Name Extended", :format => :string, :description => "Indicates the whole cardholder name when greater than 26 characters using the same coding convention as in ISO 7813"),
63
+ new_tag(:tag => "8E", :name => "Cardholder Verification Method (CVM) List", :description => "Identifies a method of verification of the cardholder supported by the application"),
64
+ new_tag(:tag => "9F34", :name => "Cardholder Verification Method (CVM) Results", :description => "Indicates the results of the last CVM performed"),
65
+ new_tag(:tag => "8F", :name => "Certification Authority Public Key Index", :description => "Identifies the certification authority’s public key in conjunction with the RID"),
66
+ new_tag(:tag => "9F22", :name => "Certification Authority Public Key Index", :description => "Identifies the certification authority’s public key in conjunction with the RID"),
67
+ new_tag(:tag => "83", :name => "Command Template", :description => "Identifies the data field of a command message"),
68
+ new_tag(:tag => "9F27", :name => "Cryptogram Information Data", :description => "Indicates the type of cryptogram and the actions to be performed by the terminal"),
69
+ new_tag(:tag => "9F45", :name => "Data Authentication Code", :description => "An issuer assigned value that is retained by the terminal during the verification process of the Signed Static Application Data"),
70
+ new_tag(:tag => "84", :name => "Dedicated File (DF) Name", :description => "Identifies the name of the DF as described in ISO/IEC 7816-4"),
71
+ new_tag(:tag => "9D", :name => "Directory Definition File (DDF) Name", :description => "Identifies the name of a DF associated with a directory"),
72
+ new_tag(:tag => "73", :name => "Directory Discretionary Template", :description => "Issuer discretionary part of the directory according to ISO/IEC 7816-5"),
73
+ new_tag(:tag => "9F49", :name => "Dynamic Data Authentication Data Object List (DDOL)", :description => "List of data objects (tag and length) to be passed to the ICC in the INTERNAL AUTHENTICATE command"),
74
+ new_tag(:tag => "BF0C", :name => "File Control Information (FCI) Issuer Discretionary Data", :description => "Issuer discretionary part of the FCI"),
75
+ new_tag(:tag => "A5", :name => "File Control Information (FCI) Proprietary Template", :description => "Identifies the data object proprietary to this specification in the FCI template according to ISO/IEC 7816-4"),
76
+ new_tag(:tag => "6F", :name => "File Control Information (FCI) Template", :description => "Identifies the FCI template according to ISO/IEC 7816-4"),
77
+ new_tag(:tag => "9F4C", :name => "ICC Dynamic Number", :description => "Time-variant number generated by the ICC, to be captured by the terminal"),
78
+ new_tag(:tag => "9F2D", :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Certificate", :description => "ICC PIN Encipherment Public Key certified by the issuer"),
79
+ new_tag(:tag => "9F2E", :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Exponent", :description => "ICC PIN Encipherment Public Key Exponent used for PIN encipherment"),
80
+ new_tag(:tag => "9F2F", :name => "Integrated Circuit Card (ICC) PIN Encipherment Public Key Remainder", :description => "Remaining digits of the ICC PIN Encipherment Public Key Modulus"),
81
+ new_tag(:tag => "9F46", :name => "Integrated Circuit Card (ICC) Public Key Certificate", :description => "ICC Public Key certified by the issuer"),
82
+ new_tag(:tag => "9F47", :name => "Integrated Circuit Card (ICC) Public Key Exponent", :description => "ICC Public Key Exponent used for the verification of the Signed Dynamic Application Data"),
83
+ new_tag(:tag => "9F48", :name => "Integrated Circuit Card (ICC) Public Key Remainder", :description => "Remaining digits of the ICC Public Key Modulus"),
84
+ new_tag(:tag => "9F1E", :name => "Interface Device (IFD) Serial Number", :format => :string, :description => "Unique and permanent serial number assigned to the IFD by the manufacturer"),
85
+ new_tag(:tag => "5F53", :name => "International Bank Account Number (IBAN)", :description => "Uniquely identifies the account of a customer at a financial institution as defined in ISO 13616."),
86
+ new_tag(:tag => "9F0D", :name => "Issuer Action Code - Default", :description => "Specifies the issuer’s conditions that cause a transaction to be rejected if it might have been approved online, but the terminal is unable to process the transaction online"),
87
+ new_tag(:tag => "9F0E", :name => "Issuer Action Code - Denial", :description => "Specifies the issuer’s conditions that cause the denial of a transaction without attempt to go online"),
88
+ new_tag(:tag => "9F0F", :name => "Issuer Action Code - Online", :description => "Specifies the issuer’s conditions that cause a transaction to be transmitted online"),
89
+ new_tag(:tag => "9F10", :name => "Issuer Application Data", :description => "Contains proprietary application data for transmission to the issuer in an online transaction."),
90
+ new_tag(:tag => "91", :name => "Issuer Authentication Data", :description => "Data sent to the ICC for online issuer authentication"),
91
+ new_tag(:tag => "9F11", :name => "Issuer Code Table Index", :description => "Indicates the code table according to ISO/IEC 8859 for displaying the Application Preferred Name"),
92
+ new_tag(:tag => "5F28", :name => "Issuer Country Code", :description => "Indicates the country of the issuer according to ISO 3166"),
93
+ new_tag(:tag => "5F55", :name => "Issuer Country Code (alpha2 format)", :description => "Indicates the country of the issuer as defined in ISO 3166 (using a 2 character alphabetic code)"),
94
+ new_tag(:tag => "5F56", :name => "Issuer Country Code (alpha3 format)", :description => "Indicates the country of the issuer as defined in ISO 3166 (using a 3 character alphabetic code)"),
95
+ new_tag(:tag => "42", :name => "Issuer Identification Number (IIN)", :description => "The number that identifies the major industry and the card issuer and that forms the first part of the Primary Account Number (PAN)"),
96
+ new_tag(:tag => "90", :name => "Issuer Public Key Certificate", :description => "Issuer public key certified by a certification authority"),
97
+ new_tag(:tag => "9F32", :name => "Issuer Public Key Exponent", :description => "Issuer public key exponent used for the verification of the Signed Static Application Data and the ICC Public Key Certificate"),
98
+ new_tag(:tag => "92", :name => "Issuer Public Key Remainder", :description => "Remaining digits of the Issuer Public Key Modulus"),
99
+ new_tag(:tag => "86", :name => "Issuer Script Command", :description => "Contains a command for transmission to the ICC"),
100
+ new_tag(:tag => "9F18", :name => "Issuer Script Identifier", :description => "Identification of the Issuer Script"),
101
+ new_tag(:tag => "71", :name => "Issuer Script Template 1", :description => "Contains proprietary issuer data for transmission to the ICC before the second GENERATE AC command"),
102
+ new_tag(:tag => "72", :name => "Issuer Script Template 2", :description => "Contains proprietary issuer data for transmission to the ICC after the second GENERATE AC command"),
103
+ new_tag(:tag => "5F50", :name => "Issuer URL", :format => :string, :description => "The URL provides the location of the Issuer’s Library Server on the Internet."),
104
+ new_tag(:tag => "5F2D", :name => "Language Preference", :format => :string, :description => "1-4 languages stored in order of preference, each represented by 2 alphabetical characters according to ISO 639"),
105
+ new_tag(:tag => "9F13", :name => "Last Online Application Transaction Counter (ATC) Register", :description => "ATC value of the last transaction that went online"),
106
+ new_tag(:tag => "9F4D", :name => "Log Entry", :description => "Provides the SFI of the Transaction Log file and its number of records"),
107
+ new_tag(:tag => "9F4F", :name => "Log Format", :description => "List (in tag and length format) of data objects representing the logged data elements that are passed to the terminal when a transaction log record is read"),
108
+ new_tag(:tag => "9F14", :name => "Lower Consecutive Offline Limit", :description => "Issuer-specified preference for the maximum number of consecutive offline transactions for this ICC application allowed in a terminal with online capability"),
109
+ new_tag(:tag => "9F15", :name => "Merchant Category Code", :description => "Classifies the type of business being done by the merchant, represented according to ISO 8583:1993 for Card Acceptor Business Code"),
110
+ new_tag(:tag => "9F16", :name => "Merchant Identifier", :format => :string, :description => "When concatenated with the Acquirer Identifier, uniquely identifies a given merchant"),
111
+ new_tag(:tag => "9F4E", :name => "Merchant Name and Location", :format => :string, :description => "Indicates the name and location of the merchant"),
112
+ new_tag(:tag => "9F17", :name => "Personal Identification Number (PIN) Try Counter", :description => "Number of PIN tries remaining"),
113
+ new_tag(:tag => "9F39", :name => "Point-of-Service (POS) Entry Mode", :description => "Indicates the method by which the PAN was entered, according to the first two digits of the ISO 8583:1987 POS Entry Mode"),
114
+ new_tag(:tag => "9F38", :name => "Processing Options Data Object List (PDOL)", :description => "Contains a list of terminal resident data objects (tags and lengths) needed by the ICC in processing the GET PROCESSING OPTIONS command"),
115
+ new_tag(:tag => "70", :name => "READ RECORD Response Message Template", :description => "Contains the contents of the record read. (Mandatory for SFIs 1-10. Response messages for SFIs 11-30 are outside the scope of EMV, but may use template '70')"),
116
+ new_tag(:tag => "80", :name => "Response Message Template Format 1", :description => "Contains the data objects (without tags and lengths) returned by the ICC in response to a command"),
117
+ new_tag(:tag => "77", :name => "Response Message Template Format 2", :description => "Contains the data objects (with tags and lengths) returned by the ICC in response to a command"),
118
+ new_tag(:tag => "5F30", :name => "Service Code", :description => "Service code as defined in ISO/IEC 7813 for track 1 and track 2"),
119
+ new_tag(:tag => "88", :name => "Short File Identifier (SFI)", :description => "Identifies the AEF referenced in commands related to a given ADF or DDF. It is a binary data object having a value in the range 1 to 30 and with the three high order bits set to zero."),
120
+ new_tag(:tag => "9F4B", :name => "Signed Dynamic Application Data", :description => "Digital signature on critical application parameters for DDA or CDA"),
121
+ new_tag(:tag => "93", :name => "Signed Static Application Data", :description => "Digital signature on critical application parameters for SDA"),
122
+ new_tag(:tag => "9F4A", :name => "Static Data Authentication Tag List", :description => "List of tags of primitive data objects defined in this specification whose value fields are to be included in the Signed Static or Dynamic Application Data"),
123
+ new_tag(:tag => "9F33", :name => "Terminal Capabilities", :description => "Indicates the card data input, CVM, and security capabilities of the terminal"),
124
+ new_tag(:tag => "9F1A", :name => "Terminal Country Code", :description => "Indicates the country of the terminal, represented according to ISO 3166"),
125
+ new_tag(:tag => "9F1B", :name => "Terminal Floor Limit", :description => "Indicates the floor limit in the terminal in conjunction with the AID"),
126
+ new_tag(:tag => "9F1C", :name => "Terminal Identification", :format => :string, :description => "Designates the unique location of a terminal at a merchant"),
127
+ new_tag(:tag => "9F1D", :name => "Terminal Risk Management Data", :description => "Application-specific value used by the card for risk management purposes"),
128
+ new_tag(:tag => "9F35", :name => "Terminal Type", :description => "Indicates the environment of the terminal, its communications capability, and its operational control"),
129
+ new_tag(:tag => "95", :name => "Terminal Verification Results", :description => "Status of the different functions as seen from the terminal"),
130
+ new_tag(:tag => "9F1F", :name => "Track 1 Discretionary Data", :description => "Discretionary part of track 1 according to ISO/IEC 7813"),
131
+ new_tag(:tag => "9F20", :name => "Track 2 Discretionary Data", :description => "Discretionary part of track 2 according to ISO/IEC 7813"),
132
+ new_tag(:tag => "57", :name => "Track 2 Equivalent Data", :description => "Contains the data elements of track 2 according to ISO/IEC 7813, excluding start sentinel, end sentinel, and Longitudinal Redundancy Check (LRC)"),
133
+ new_tag(:tag => "97", :name => "Transaction Certificate Data Object List (TDOL)", :description => "List of data objects (tag and length) to be used by the terminal in generating the TC Hash Value"),
134
+ new_tag(:tag => "98", :name => "Transaction Certificate (TC) Hash Value", :description => "Result of a hash function specified in Book 2, Annex B3.1"),
135
+ new_tag(:tag => "5F2A", :name => "Transaction Currency Code", :description => "Indicates the currency code of the transaction according to ISO 4217"),
136
+ new_tag(:tag => "5F36", :name => "Transaction Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the transaction amount represented according to ISO 4217"),
137
+ new_tag(:tag => "9A", :name => "Transaction Date", :description => "Local date that the transaction was authorised"),
138
+ new_tag(:tag => "99", :name => "Transaction Personal Identification Number (PIN) Data", :description => "Data entered by the cardholder for the purpose of the PIN verification"),
139
+ new_tag(:tag => "9F3C", :name => "Transaction Reference Currency Code", :description => "Code defining the common currency used by the terminal in case the Transaction Currency Code is different from the Application Currency Code"),
140
+ new_tag(:tag => "9F3D", :name => "Transaction Reference Currency Exponent", :description => "Indicates the implied position of the decimal point from the right of the transaction amount, with the Transaction Reference Currency Code represented according to ISO 4217"),
141
+ new_tag(:tag => "9F41", :name => "Transaction Sequence Counter", :description => "Counter maintained by the terminal that is incremented by one for each transaction"),
142
+ new_tag(:tag => "9B", :name => "Transaction Status Information", :description => "Indicates the functions performed in a transaction"),
143
+ new_tag(:tag => "9F21", :name => "Transaction Time", :description => "Local time that the transaction was authorised"),
144
+ new_tag(:tag => "9C", :name => "Transaction Type", :description => "Indicates the type of financial transaction, represented by the first two digits of the ISO 8583:1987 Processing Code. The actual values to be used for the Transaction Type data element are defined by the relevant payment system"),
145
+ new_tag(:tag => "9F37", :name => "Unpredictable Number", :description => "Value to provide variability and uniqueness to the generation of a cryptogram"),
146
+ new_tag(:tag => "9F23", :name => "Upper Consecutive Offline Limit", :description => "Issuer-specified preference for the maximum number of consecutive offline transactions for this ICC application allowed in a terminal without online capability"),
147
147
  ]
148
148
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grizzly_ber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Balsdon
@@ -10,7 +10,7 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-11-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: CODEC for TLV-BER encoded strings.
13
+ description: CODEC for EMV TLV-BER encoded strings.
14
14
  email: ryan.balsdon@shopify.com
15
15
  executables: []
16
16
  extensions: []
@@ -30,7 +30,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.0
33
+ version: '0'
34
34
  required_rubygems_version: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - '>='