rasn2 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +4 -0
- data/lib/rasn1/errors.rb +55 -0
- data/lib/rasn1/helpers/colorize.rb +76 -0
- data/lib/rasn1/model.rb +831 -0
- data/lib/rasn1/schema_parser.rb +470 -0
- data/lib/rasn1/tracer.rb +200 -0
- data/lib/rasn1/types/any.rb +98 -0
- data/lib/rasn1/types/base.rb +675 -0
- data/lib/rasn1/types/bit_string.rb +100 -0
- data/lib/rasn1/types/bmp_string.rb +22 -0
- data/lib/rasn1/types/boolean.rb +57 -0
- data/lib/rasn1/types/choice.rb +158 -0
- data/lib/rasn1/types/constrained.rb +51 -0
- data/lib/rasn1/types/constructed.rb +51 -0
- data/lib/rasn1/types/enumerated.rb +44 -0
- data/lib/rasn1/types/generalized_time.rb +156 -0
- data/lib/rasn1/types/ia5_string.rb +21 -0
- data/lib/rasn1/types/integer.rb +166 -0
- data/lib/rasn1/types/null.rb +43 -0
- data/lib/rasn1/types/numeric_string.rb +41 -0
- data/lib/rasn1/types/object_id.rb +64 -0
- data/lib/rasn1/types/octet_string.rb +52 -0
- data/lib/rasn1/types/primitive.rb +13 -0
- data/lib/rasn1/types/printable_string.rb +42 -0
- data/lib/rasn1/types/sequence.rb +105 -0
- data/lib/rasn1/types/sequence_of.rb +199 -0
- data/lib/rasn1/types/set.rb +28 -0
- data/lib/rasn1/types/set_of.rb +18 -0
- data/lib/rasn1/types/tag.rb +189 -0
- data/lib/rasn1/types/universal_string.rb +22 -0
- data/lib/rasn1/types/utc_time.rb +67 -0
- data/lib/rasn1/types/utf8_string.rb +21 -0
- data/lib/rasn1/types/visible_string.rb +30 -0
- data/lib/rasn1/types.rb +149 -0
- data/lib/rasn1/value_notation.rb +256 -0
- data/lib/rasn1/version.rb +6 -0
- data/lib/rasn1/wrapper.rb +279 -0
- data/lib/rasn1.rb +51 -0
- metadata +123 -0
data/lib/rasn1.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'rasn1/version'
|
|
4
|
+
require_relative 'rasn1/errors'
|
|
5
|
+
require_relative 'rasn1/helpers/colorize'
|
|
6
|
+
require_relative 'rasn1/types'
|
|
7
|
+
require_relative 'rasn1/model'
|
|
8
|
+
require_relative 'rasn1/wrapper'
|
|
9
|
+
require_relative 'rasn1/tracer'
|
|
10
|
+
require_relative 'rasn1/schema_parser'
|
|
11
|
+
require_relative 'rasn1/value_notation'
|
|
12
|
+
|
|
13
|
+
# Constrained types
|
|
14
|
+
require_relative 'rasn1/types/visible_string'
|
|
15
|
+
|
|
16
|
+
# Rasn1 is a pure ruby library to parse, decode and encode ASN.1 data.
|
|
17
|
+
# @author Sylvain Daubert
|
|
18
|
+
module RASN1
|
|
19
|
+
# @private
|
|
20
|
+
CONTAINER_CLASSES = [Types::Sequence, Types::Set].freeze
|
|
21
|
+
|
|
22
|
+
# Parse a DER/BER string without checking a model
|
|
23
|
+
# @note If you want to check ASN.1 grammary, you should define a {Model}
|
|
24
|
+
# and use {Model#parse}.
|
|
25
|
+
# @note This method will never decode SEQUENCE OF or SET OF objects, as these
|
|
26
|
+
# ones use the same encoding as SEQUENCE and SET, respectively.
|
|
27
|
+
# @note Real type of tagged value cannot be guessed. So, such tag will
|
|
28
|
+
# generate {Types::Base} objects.
|
|
29
|
+
# @param [String] der binary string to parse
|
|
30
|
+
# @param [Boolean] ber if +true+, decode a BER string, else a DER one
|
|
31
|
+
# @return [Types::Base, Array[Types::Base]]
|
|
32
|
+
def self.parse(der, ber: false) # rubocop:disable Metrics/AbcSize
|
|
33
|
+
result = []
|
|
34
|
+
until der.nil? || der.empty?
|
|
35
|
+
type = Types.id2type(der)
|
|
36
|
+
size = type.parse!(der, ber: ber)
|
|
37
|
+
|
|
38
|
+
if CONTAINER_CLASSES.include?(type.class)
|
|
39
|
+
RASN1.tracer.tracing_level += 1 unless RASN1.tracer.nil?
|
|
40
|
+
content = self.parse(type.value)
|
|
41
|
+
type.value = content.is_a?(Array) ? content : [content]
|
|
42
|
+
RASN1.tracer.tracing_level -= 1 unless RASN1.tracer.nil?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
result << type
|
|
46
|
+
der = der[size..]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
result.size == 1 ? result[0] : result
|
|
50
|
+
end
|
|
51
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rasn2
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.16.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- LemonTree55
|
|
8
|
+
- Rick Mark
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rainbow
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: strptime
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.2.5
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.2.5
|
|
41
|
+
description: |
|
|
42
|
+
RASN1 is a pure ruby ASN.1 library. It may encode and decode DER and BER
|
|
43
|
+
encodings.
|
|
44
|
+
email:
|
|
45
|
+
- lenontree@proton.me
|
|
46
|
+
- rickmark@outlook.com
|
|
47
|
+
executables: []
|
|
48
|
+
extensions: []
|
|
49
|
+
extra_rdoc_files:
|
|
50
|
+
- LICENSE
|
|
51
|
+
- README.md
|
|
52
|
+
files:
|
|
53
|
+
- LICENSE
|
|
54
|
+
- README.md
|
|
55
|
+
- lib/rasn1.rb
|
|
56
|
+
- lib/rasn1/errors.rb
|
|
57
|
+
- lib/rasn1/helpers/colorize.rb
|
|
58
|
+
- lib/rasn1/model.rb
|
|
59
|
+
- lib/rasn1/schema_parser.rb
|
|
60
|
+
- lib/rasn1/tracer.rb
|
|
61
|
+
- lib/rasn1/types.rb
|
|
62
|
+
- lib/rasn1/types/any.rb
|
|
63
|
+
- lib/rasn1/types/base.rb
|
|
64
|
+
- lib/rasn1/types/bit_string.rb
|
|
65
|
+
- lib/rasn1/types/bmp_string.rb
|
|
66
|
+
- lib/rasn1/types/boolean.rb
|
|
67
|
+
- lib/rasn1/types/choice.rb
|
|
68
|
+
- lib/rasn1/types/constrained.rb
|
|
69
|
+
- lib/rasn1/types/constructed.rb
|
|
70
|
+
- lib/rasn1/types/enumerated.rb
|
|
71
|
+
- lib/rasn1/types/generalized_time.rb
|
|
72
|
+
- lib/rasn1/types/ia5_string.rb
|
|
73
|
+
- lib/rasn1/types/integer.rb
|
|
74
|
+
- lib/rasn1/types/null.rb
|
|
75
|
+
- lib/rasn1/types/numeric_string.rb
|
|
76
|
+
- lib/rasn1/types/object_id.rb
|
|
77
|
+
- lib/rasn1/types/octet_string.rb
|
|
78
|
+
- lib/rasn1/types/primitive.rb
|
|
79
|
+
- lib/rasn1/types/printable_string.rb
|
|
80
|
+
- lib/rasn1/types/sequence.rb
|
|
81
|
+
- lib/rasn1/types/sequence_of.rb
|
|
82
|
+
- lib/rasn1/types/set.rb
|
|
83
|
+
- lib/rasn1/types/set_of.rb
|
|
84
|
+
- lib/rasn1/types/tag.rb
|
|
85
|
+
- lib/rasn1/types/universal_string.rb
|
|
86
|
+
- lib/rasn1/types/utc_time.rb
|
|
87
|
+
- lib/rasn1/types/utf8_string.rb
|
|
88
|
+
- lib/rasn1/types/visible_string.rb
|
|
89
|
+
- lib/rasn1/value_notation.rb
|
|
90
|
+
- lib/rasn1/version.rb
|
|
91
|
+
- lib/rasn1/wrapper.rb
|
|
92
|
+
homepage: https://github.com/lemontree55/rasn1
|
|
93
|
+
licenses:
|
|
94
|
+
- MIT
|
|
95
|
+
metadata:
|
|
96
|
+
homepage_uri: https://github.com/lemontree55/rasn1
|
|
97
|
+
source_code_uri: https://github.com/lemontree55/rasn1
|
|
98
|
+
bug_tracker_uri: https://github.com/lemontree55/rasn1/issues
|
|
99
|
+
documentation_uri: https://www.rubydoc.info/gems/rasn1
|
|
100
|
+
rdoc_options:
|
|
101
|
+
- "--title"
|
|
102
|
+
- RASN1 - A pure ruby ASN.1 library
|
|
103
|
+
- "--main"
|
|
104
|
+
- README.md
|
|
105
|
+
- "--inline-source"
|
|
106
|
+
- "--quiet"
|
|
107
|
+
require_paths:
|
|
108
|
+
- lib
|
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: 3.0.0
|
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - ">="
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '0'
|
|
119
|
+
requirements: []
|
|
120
|
+
rubygems_version: 4.0.16
|
|
121
|
+
specification_version: 4
|
|
122
|
+
summary: Ruby ASN.1 library
|
|
123
|
+
test_files: []
|