|
150 | 150 | expect(obj.value).to eq(RASN1::Types::Sequence.new(value: [@bool, @int]).to_der) |
151 | 151 | end |
152 | 152 |
|
153 | | - context '(complex example)' do |
| 153 | + context '(complex examples)' do |
154 | 154 | it 'decodes a complex example' do |
155 | 155 | der = File.read(File.join(__dir__, 'cert_example.der')).b |
156 | 156 | cert = RASN1.parse(der) |
|
194 | 194 | expect(cert.value[0].value[7].constructed?).to eq(true) |
195 | 195 | expect(cert.value[0].value[7].id).to eq(3) |
196 | 196 | end |
| 197 | + |
| 198 | + it 'decodes a 2-pass example' do |
| 199 | + der = ["303d040c800007db0300259e5d7f12860400a22b02046d192dad020100020100301d301b06132b060104018f5b067301010101288fc080c0000204ffffffff"].pack("H*") |
| 200 | + |
| 201 | + # 1st pass |
| 202 | + pdu = RASN1.parse(der) |
| 203 | + expect(pdu).to be_a(RASN1::Types::Sequence) |
| 204 | + expect(pdu.value.size).to eq(3) |
| 205 | + expect(pdu.value[0]).to be_a(RASN1::Types::OctetString) |
| 206 | + expect(pdu.value[0].value.length).to eq(12) |
| 207 | + expect(pdu.value[1]).to be_a(RASN1::Types::OctetString) |
| 208 | + expect(pdu.value[1].value.length).to eq(0) |
| 209 | + expect(pdu.value[2]).to be_a(RASN1::Types::Base) |
| 210 | + expect(pdu.value[2].asn1_class).to eq(:context) |
| 211 | + expect(pdu.value[2].value.length).to eq(43) |
| 212 | + |
| 213 | + # 2nd pass |
| 214 | + subpdus = RASN1.parse(pdu.value[2].value) |
| 215 | + expect(subpdus).to be_a(Array) |
| 216 | + expect(subpdus.size).to eq(4) |
| 217 | + expect(subpdus[0]).to be_a(RASN1::Types::Integer) |
| 218 | + expect(subpdus[0].to_i).to eq(1830366637) |
| 219 | + expect(subpdus[1]).to be_a(RASN1::Types::Integer) |
| 220 | + expect(subpdus[1].to_i).to eq(0) |
| 221 | + expect(subpdus[2]).to be_a(RASN1::Types::Integer) |
| 222 | + expect(subpdus[2].to_i).to eq(0) |
| 223 | + expect(subpdus[3]).to be_a(RASN1::Types::Sequence) |
| 224 | + expect(subpdus[3].value.size).to eq(1) |
| 225 | + expect(subpdus[3].value[0]).to be_a(RASN1::Types::Sequence) |
| 226 | + expect(subpdus[3].value[0].value.size).to eq(2) |
| 227 | + expect(subpdus[3].value[0].value[0]).to be_a(RASN1::Types::ObjectId) |
| 228 | + expect(subpdus[3].value[0].value[0].value).to eq("1.3.6.1.4.1.2011.6.115.1.1.1.1.40.4160757760") |
| 229 | + expect(subpdus[3].value[0].value[1]).to be_a(RASN1::Types::Integer) |
| 230 | + expect(subpdus[3].value[0].value[1].value).to eq(-1) |
| 231 | + end |
197 | 232 | end |
198 | 233 | end |
199 | 234 | end |
|
0 commit comments