ruby-stix2 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +4 -3
- data/Gemfile +1 -1
- data/Gemfile.lock +48 -1
- data/README.md +1 -1
- data/lib/stix2/bundle.rb +5 -2
- data/lib/stix2/common.rb +47 -30
- data/lib/stix2/confidence_scale.rb +38 -38
- data/lib/stix2/custom_object.rb +5 -5
- data/lib/stix2/cyberobservable_objects/artifact.rb +1 -1
- data/lib/stix2/cyberobservable_objects/directory.rb +1 -1
- data/lib/stix2/cyberobservable_objects/domain_name.rb +1 -1
- data/lib/stix2/cyberobservable_objects/email_message.rb +7 -7
- data/lib/stix2/cyberobservable_objects/file.rb +2 -2
- data/lib/stix2/cyberobservable_objects/ipv4_addr.rb +4 -4
- data/lib/stix2/cyberobservable_objects/ipv6_addr.rb +4 -4
- data/lib/stix2/cyberobservable_objects/network_traffic.rb +3 -3
- data/lib/stix2/cyberobservable_objects/process.rb +3 -3
- data/lib/stix2/cyberobservable_objects/software.rb +1 -1
- data/lib/stix2/cyberobservable_objects/user_account.rb +4 -4
- data/lib/stix2/cyberobservable_objects/x509_certificate.rb +3 -3
- data/lib/stix2/domain_objects/attack_pattern.rb +3 -3
- data/lib/stix2/domain_objects/campaign.rb +1 -1
- data/lib/stix2/domain_objects/grouping.rb +1 -1
- data/lib/stix2/domain_objects/identity.rb +1 -1
- data/lib/stix2/domain_objects/indicator.rb +2 -2
- data/lib/stix2/domain_objects/infrastructure.rb +3 -3
- data/lib/stix2/domain_objects/intrusion-set.rb +3 -3
- data/lib/stix2/domain_objects/malware.rb +9 -9
- data/lib/stix2/domain_objects/malware_analysis.rb +3 -3
- data/lib/stix2/domain_objects/note.rb +2 -2
- data/lib/stix2/domain_objects/observed_data.rb +1 -1
- data/lib/stix2/domain_objects/opinion.rb +2 -2
- data/lib/stix2/domain_objects/report.rb +2 -2
- data/lib/stix2/domain_objects/threat_actor.rb +6 -6
- data/lib/stix2/domain_objects/tool.rb +3 -3
- data/lib/stix2/enum.rb +60 -60
- data/lib/stix2/extension_definition.rb +2 -2
- data/lib/stix2/extensions/alternate_data_stream_type.rb +1 -1
- data/lib/stix2/extensions/archive_file.rb +2 -2
- data/lib/stix2/extensions/icmp.rb +2 -2
- data/lib/stix2/extensions/ntfs.rb +2 -2
- data/lib/stix2/extensions/pdf.rb +2 -2
- data/lib/stix2/extensions/socket.rb +3 -3
- data/lib/stix2/extensions/unix_account.rb +1 -1
- data/lib/stix2/extensions/windows_pe_optional_header_type.rb +7 -7
- data/lib/stix2/extensions/windows_pe_section_type.rb +1 -1
- data/lib/stix2/extensions/windows_pebinary.rb +7 -7
- data/lib/stix2/extensions/windows_process.rb +2 -2
- data/lib/stix2/extensions/windows_service.rb +2 -2
- data/lib/stix2/external_reference.rb +1 -1
- data/lib/stix2/languages.rb +233 -233
- data/lib/stix2/meta_objects/data_markings/granular_marking.rb +1 -1
- data/lib/stix2/meta_objects/data_markings/marking_definition.rb +2 -2
- data/lib/stix2/meta_objects/data_markings/object_marking.rb +1 -1
- data/lib/stix2/meta_objects/language_content.rb +1 -1
- data/lib/stix2/ov.rb +263 -258
- data/lib/stix2/relationship_objects/relationship.rb +155 -2
- data/lib/stix2/relationship_objects/sighting.rb +3 -3
- data/lib/stix2/version.rb +1 -1
- data/lib/stix2.rb +90 -90
- data/ruby-stix2.gemspec +23 -23
- metadata +32 -4
@@ -3,10 +3,163 @@ module Stix2
|
|
3
3
|
class Relationship < Base
|
4
4
|
property :relationship_type, required: true, coerce: String
|
5
5
|
property :description, coerce: String
|
6
|
-
property :source_ref, coerce: String
|
7
|
-
property :target_ref, coerce: String
|
6
|
+
property :source_ref, required: true, coerce: String
|
7
|
+
property :target_ref, required: true, coerce: String
|
8
8
|
property :start_time, coerce: Time
|
9
9
|
property :stop_time, coerce: Time
|
10
|
+
|
11
|
+
def initialize(args)
|
12
|
+
if !args[:relationship_type] && args[:source_ref] && args[:target_ref]
|
13
|
+
objects = DOMAIN_OBJECTS + CYBEROBSERVABLE_OBJECTS
|
14
|
+
source_type = type_by_id(args[:source_ref])
|
15
|
+
target_type = type_by_id(args[:target_ref])
|
16
|
+
relationships = Array(RELATIONSHIP_TYPES.dig(source_type, target_type))
|
17
|
+
relationships += COMMON_RELATIONSHIPS if objects.include?(source_type) && objects.include?(target_type)
|
18
|
+
args[:relationship_type] = relationships.first unless relationships.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
super(args)
|
22
|
+
end
|
23
|
+
|
24
|
+
COMMON_RELATIONSHIPS = ["related-to", "derived-from", "duplicate-of"].freeze
|
25
|
+
DOMAIN_OBJECTS = ["attack-pattern", "campaign", "course-of-action", "grouping", "identity", "indicator",
|
26
|
+
"intrusion-set", "location", "malware-analysis", "malware", "note", "observed-data", "opinion", "report",
|
27
|
+
"threat_actor", "tool", "vulnerability"].freeze
|
28
|
+
CYBEROBSERVABLE_OBJECTS = ["artifact", "autonomous-system", "directory", "domain-name", "email-addr",
|
29
|
+
"email-message", "file", "ipv4-addr", "ipv6-addr", "mac-addr", "mutex", "network-traffic", "process",
|
30
|
+
"software", "url", "user-account", "windows-registry-key", "x509-certificate"].freeze
|
31
|
+
|
32
|
+
RELATIONSHIP_TYPES = {
|
33
|
+
"attack-pattern" => {
|
34
|
+
"identity" => "targets",
|
35
|
+
"location" => "targets",
|
36
|
+
"malware" => ["delivers", "uses"],
|
37
|
+
"tool" => "uses",
|
38
|
+
"vulnerability" => "targets"
|
39
|
+
},
|
40
|
+
"campaign" => {
|
41
|
+
"attack-pattern" => "uses",
|
42
|
+
"identity" => "targets",
|
43
|
+
"infrastructure" => ["compromises", "uses"],
|
44
|
+
"intrusion-set" => "attributed-to",
|
45
|
+
"location" => ["originates-from", "targets"],
|
46
|
+
"malware" => "uses",
|
47
|
+
"threat-actor" => "attributed-to",
|
48
|
+
"tool" => "uses",
|
49
|
+
"vulnerability" => "targets"
|
50
|
+
},
|
51
|
+
"course-of-action" => {
|
52
|
+
"attack-pattern" => "mitigates",
|
53
|
+
"indicator" => ["investigates", "mitigates"],
|
54
|
+
"malware" => ["mitigates", "remediates"],
|
55
|
+
"tool" => "mitigates",
|
56
|
+
"vulnerability" => ["mitigates", "remediates"]
|
57
|
+
},
|
58
|
+
"domain-name" => {
|
59
|
+
"domain-name" => "resolves-to",
|
60
|
+
"ipv4-addr" => "resolves-to",
|
61
|
+
"ipv6-addr" => "resolves-to"
|
62
|
+
},
|
63
|
+
"identity" => {
|
64
|
+
"location" => "located-at"
|
65
|
+
},
|
66
|
+
"indicator" => {
|
67
|
+
"attack-pattern" => "indicates",
|
68
|
+
"campaign" => "indicates",
|
69
|
+
"infrastructure" => "indicates",
|
70
|
+
"intrusion-set" => "indicates",
|
71
|
+
"malware" => "indicates",
|
72
|
+
"observed-data" => "based-on",
|
73
|
+
"threat-actor" => "indicates",
|
74
|
+
"tool" => "indicates"
|
75
|
+
},
|
76
|
+
"infrastructure" => {
|
77
|
+
"artifact" => "communicates-with",
|
78
|
+
"autonomous-system" => "communicates-with",
|
79
|
+
"directory" => "communicates-with",
|
80
|
+
"domain-name" => ["communicates-with", "consists-of"],
|
81
|
+
"email-addr" => "communicates-with",
|
82
|
+
"email-message" => "communicates-with",
|
83
|
+
"file" => "communicates-with",
|
84
|
+
"infrastructure" => ["communicates-with", "consists-of", "controls", "uses"],
|
85
|
+
"ipv4-addr" => ["communicates-with", "consists-of"],
|
86
|
+
"ipv6-addr" => ["communicates-with", "consists-of"],
|
87
|
+
"location" => "located-at",
|
88
|
+
"mac-addr" => "communicates-with",
|
89
|
+
"malware" => ["controls", "delivers", "hosts"],
|
90
|
+
"mutex" => "communicates-with",
|
91
|
+
"network-traffic" => "communicates-with",
|
92
|
+
"observed-data" => "consists-of",
|
93
|
+
"process" => "communicates-with",
|
94
|
+
"software" => "communicates-with",
|
95
|
+
"tool" => "hosts",
|
96
|
+
"url" => ["communicates-with", "consists-of"],
|
97
|
+
"user-account" => "communicates-with",
|
98
|
+
"vulnerability" => "has",
|
99
|
+
"windows registry-key" => "communicates-with",
|
100
|
+
"x509-certificate" => "communicates-with"
|
101
|
+
},
|
102
|
+
"intrusion-set" => {
|
103
|
+
"attack-pattern" => "uses",
|
104
|
+
"identity" => "targets",
|
105
|
+
"infrastructure" => ["compromises", "hosts", "owns", "uses"],
|
106
|
+
"location" => ["originates-from", "targets"],
|
107
|
+
"malware" => "uses",
|
108
|
+
"threat-actor" => "attributed-to",
|
109
|
+
"tool" => "uses",
|
110
|
+
"vulnerability" => "targets"
|
111
|
+
},
|
112
|
+
"ipv4-addr" => {
|
113
|
+
"mac-addr" => "resolves-to",
|
114
|
+
"autonomous-system" => "belongs-to"
|
115
|
+
},
|
116
|
+
"ipv6-addr" => {
|
117
|
+
"mac-addr" => "resolves-to",
|
118
|
+
"autonomous-system" => "belongs-to"
|
119
|
+
},
|
120
|
+
"malware" => {
|
121
|
+
"attack-pattern" => "uses",
|
122
|
+
"domain-name" => "communicates-with",
|
123
|
+
"identity" => "targets",
|
124
|
+
"infrastructure" => ["beacons-to", "exfiltrates-to", "targets", "uses"],
|
125
|
+
"intrusion-set" => "authored-by",
|
126
|
+
"ipv4-addr" => "communicates-with",
|
127
|
+
"ipv6-addr" => "communicates-with",
|
128
|
+
"location" => ["originates-from", "targets"],
|
129
|
+
"malware" => ["controls", "downloads", "drops", "uses", "variant-of"],
|
130
|
+
"threat-actor" => "authored-by",
|
131
|
+
"tool" => ["downloads", "drops", "uses"],
|
132
|
+
"url" => "communicates-with",
|
133
|
+
"vulnerability" => ["exploits", "targets"]
|
134
|
+
},
|
135
|
+
"malware-analysis" => {
|
136
|
+
"malware" => ["characterizes", "av-analysis-of", "static-analysis-of", "dynamic-analysis-of"]
|
137
|
+
},
|
138
|
+
"threat-actor" => {
|
139
|
+
"attack-pattern" => "uses",
|
140
|
+
"identity" => ["attributed-to", "impersonates", "targets"],
|
141
|
+
"infrastructure" => ["compromises", "hosts", "owns", "uses"],
|
142
|
+
"location" => ["located-at", "targets"],
|
143
|
+
"malware" => "uses",
|
144
|
+
"tool" => "uses",
|
145
|
+
"vulnerability" => "targets"
|
146
|
+
},
|
147
|
+
"tool" => {
|
148
|
+
"identity" => "targets",
|
149
|
+
"infrastructure" => ["targets", "uses"],
|
150
|
+
"location" => "targets",
|
151
|
+
"malware" => ["delivers", "drops"],
|
152
|
+
"vulnerability" => ["has", "targets"]
|
153
|
+
}
|
154
|
+
}.freeze
|
155
|
+
|
156
|
+
private_constant :COMMON_RELATIONSHIPS, :DOMAIN_OBJECTS, :CYBEROBSERVABLE_OBJECTS, :RELATIONSHIP_TYPES
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def type_by_id(id)
|
161
|
+
id.split("--").first
|
162
|
+
end
|
10
163
|
end
|
11
164
|
end
|
12
165
|
end
|
@@ -6,9 +6,9 @@ module Stix2
|
|
6
6
|
property :last_seen, required: true, coerce: Time
|
7
7
|
property :count, coerce: Integer
|
8
8
|
property :sighting_of_ref, required: true, coerce: String
|
9
|
-
property :observed_data_refs, coerce:
|
10
|
-
property :where_sighted_refs, coerce:
|
11
|
-
property :summary, coerce: ->(v){ Stix2.to_bool(v) }
|
9
|
+
property :observed_data_refs, coerce: [String]
|
10
|
+
property :where_sighted_refs, coerce: [String]
|
11
|
+
property :summary, coerce: ->(v) { Stix2.to_bool(v) }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/stix2/version.rb
CHANGED
data/lib/stix2.rb
CHANGED
@@ -1,118 +1,118 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "hashie"
|
2
|
+
require "json"
|
3
|
+
require "time"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
5
|
+
require "stix2/version"
|
6
|
+
require "stix2/ov"
|
7
|
+
require "stix2/enum"
|
8
|
+
require "stix2/base"
|
9
|
+
require "stix2/languages"
|
10
|
+
require "stix2/external_reference"
|
11
|
+
require "stix2/identifier"
|
12
|
+
require "stix2/kill_chain_phase"
|
13
13
|
|
14
|
-
require
|
15
|
-
require
|
14
|
+
require "stix2/meta_objects/data_markings/granular_marking"
|
15
|
+
require "stix2/meta_objects/data_markings/object_marking"
|
16
16
|
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require
|
35
|
-
require
|
36
|
-
require
|
17
|
+
require "stix2/common"
|
18
|
+
require "stix2/domain_objects/base"
|
19
|
+
require "stix2/domain_objects/attack_pattern"
|
20
|
+
require "stix2/domain_objects/campaign"
|
21
|
+
require "stix2/domain_objects/course_of_action"
|
22
|
+
require "stix2/domain_objects/grouping"
|
23
|
+
require "stix2/domain_objects/identity"
|
24
|
+
require "stix2/domain_objects/indicator"
|
25
|
+
require "stix2/domain_objects/infrastructure"
|
26
|
+
require "stix2/domain_objects/intrusion-set"
|
27
|
+
require "stix2/domain_objects/location"
|
28
|
+
require "stix2/domain_objects/malware"
|
29
|
+
require "stix2/domain_objects/malware_analysis"
|
30
|
+
require "stix2/domain_objects/note"
|
31
|
+
require "stix2/domain_objects/observed_data"
|
32
|
+
require "stix2/domain_objects/opinion"
|
33
|
+
require "stix2/domain_objects/report"
|
34
|
+
require "stix2/domain_objects/threat_actor"
|
35
|
+
require "stix2/domain_objects/tool"
|
36
|
+
require "stix2/domain_objects/vulnerability"
|
37
37
|
|
38
|
-
require
|
39
|
-
require
|
40
|
-
require
|
38
|
+
require "stix2/relationship_objects/base"
|
39
|
+
require "stix2/relationship_objects/relationship"
|
40
|
+
require "stix2/relationship_objects/sighting"
|
41
41
|
|
42
|
-
require
|
43
|
-
require
|
44
|
-
require
|
45
|
-
require
|
46
|
-
require
|
47
|
-
require
|
48
|
-
require
|
49
|
-
require
|
50
|
-
require
|
51
|
-
require
|
52
|
-
require
|
53
|
-
require
|
54
|
-
require
|
55
|
-
require
|
56
|
-
require
|
57
|
-
require
|
58
|
-
require
|
59
|
-
require
|
60
|
-
require
|
61
|
-
require
|
62
|
-
require
|
42
|
+
require "stix2/cyberobservable_objects/base"
|
43
|
+
require "stix2/cyberobservable_objects/artifact"
|
44
|
+
require "stix2/cyberobservable_objects/autonomous_system"
|
45
|
+
require "stix2/cyberobservable_objects/directory"
|
46
|
+
require "stix2/cyberobservable_objects/domain_name"
|
47
|
+
require "stix2/cyberobservable_objects/email_addr"
|
48
|
+
require "stix2/cyberobservable_objects/email_mime_part_type"
|
49
|
+
require "stix2/cyberobservable_objects/email_message"
|
50
|
+
require "stix2/cyberobservable_objects/file"
|
51
|
+
require "stix2/cyberobservable_objects/ipv4_addr"
|
52
|
+
require "stix2/cyberobservable_objects/ipv6_addr"
|
53
|
+
require "stix2/cyberobservable_objects/mac_addr"
|
54
|
+
require "stix2/cyberobservable_objects/mutex"
|
55
|
+
require "stix2/cyberobservable_objects/network_traffic"
|
56
|
+
require "stix2/cyberobservable_objects/process"
|
57
|
+
require "stix2/cyberobservable_objects/software"
|
58
|
+
require "stix2/cyberobservable_objects/url"
|
59
|
+
require "stix2/cyberobservable_objects/user_account"
|
60
|
+
require "stix2/cyberobservable_objects/windows_registry_value"
|
61
|
+
require "stix2/cyberobservable_objects/windows_registry_key"
|
62
|
+
require "stix2/cyberobservable_objects/x509_certificate"
|
63
63
|
|
64
|
-
require
|
65
|
-
require
|
64
|
+
require "stix2/meta_objects/base"
|
65
|
+
require "stix2/meta_objects/language_content"
|
66
66
|
|
67
|
-
require
|
68
|
-
require
|
67
|
+
require "stix2/meta_objects/data_markings/base"
|
68
|
+
require "stix2/meta_objects/data_markings/marking_definition"
|
69
69
|
|
70
|
-
require
|
71
|
-
require
|
72
|
-
require
|
73
|
-
require
|
74
|
-
require
|
75
|
-
require
|
76
|
-
require
|
77
|
-
require
|
78
|
-
require
|
79
|
-
require
|
80
|
-
require
|
81
|
-
require
|
82
|
-
require
|
70
|
+
require "stix2/extension_definition"
|
71
|
+
require "stix2/extensions/archive_file"
|
72
|
+
require "stix2/extensions/socket"
|
73
|
+
require "stix2/extensions/icmp"
|
74
|
+
require "stix2/extensions/http_request"
|
75
|
+
require "stix2/extensions/ntfs"
|
76
|
+
require "stix2/extensions/tcp"
|
77
|
+
require "stix2/extensions/windows_process"
|
78
|
+
require "stix2/extensions/windows_service"
|
79
|
+
require "stix2/extensions/unix_account"
|
80
|
+
require "stix2/extensions/pdf"
|
81
|
+
require "stix2/extensions/raster_image"
|
82
|
+
require "stix2/extensions/windows_pebinary"
|
83
83
|
|
84
|
-
require
|
85
|
-
require
|
86
|
-
require
|
84
|
+
require "stix2/custom_object"
|
85
|
+
require "stix2/bundle"
|
86
|
+
require "stix2/confidence_scale"
|
87
87
|
|
88
|
-
require
|
88
|
+
require "stix2/storage"
|
89
89
|
|
90
90
|
class Time
|
91
|
-
class <<self
|
92
|
-
|
91
|
+
class << self
|
92
|
+
alias_method :coerce, :parse
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
96
|
module Stix2
|
97
97
|
def self.parse(options)
|
98
|
-
case options
|
98
|
+
options_ = case options
|
99
99
|
when String
|
100
|
-
|
100
|
+
JSON.parse(options)
|
101
101
|
when Hash
|
102
|
-
|
102
|
+
options.clone
|
103
103
|
else
|
104
|
-
|
104
|
+
JSON.parse(options.to_s)
|
105
105
|
end
|
106
106
|
Hashie.symbolize_keys!(options_)
|
107
107
|
type = options_[:type]
|
108
108
|
raise("Property 'type' is missing") if !type
|
109
109
|
# Let's try to guess the domain of the object, among the known ones
|
110
|
-
[nil,
|
111
|
-
|
112
|
-
if type.start_with?(
|
113
|
-
|
110
|
+
[nil, "DomainObject", "RelationshipObject", "CyberobservableObject", "MetaObject",
|
111
|
+
"MetaObject::DataMarking"].each do |family|
|
112
|
+
class_name = if type.start_with?("x-")
|
113
|
+
"Stix2::CustomObject"
|
114
114
|
else
|
115
|
-
|
115
|
+
["Stix2", family, type.split("-").map(&:capitalize).join].compact.join("::")
|
116
116
|
end
|
117
117
|
return Module.const_get(class_name).new(options_) if Module.const_defined?(class_name)
|
118
118
|
end
|
@@ -120,7 +120,7 @@ module Stix2
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def self.to_bool(value)
|
123
|
-
(value == true) || (value ==
|
123
|
+
(value == true) || (value == "true")
|
124
124
|
end
|
125
125
|
|
126
126
|
def self.is_hex?(value)
|
data/ruby-stix2.gemspec
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
3
|
+
require "stix2/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.summary
|
6
|
+
spec.name = "ruby-stix2"
|
7
|
+
spec.version = Stix2::VERSION
|
8
|
+
spec.summary = "Ruby implementation for the STIX protocol version 2.1"
|
10
9
|
spec.description = "Ruby implementation for the STIX protocol version 2.1. Full specs: https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html"
|
11
|
-
spec.authors
|
12
|
-
spec.email
|
10
|
+
spec.authors = ["Dario Lombardo"]
|
11
|
+
spec.email = "lomato@gmail.com"
|
13
12
|
|
14
|
-
spec.require_paths = [
|
15
|
-
spec.files
|
16
|
-
spec.homepage
|
17
|
-
spec.license
|
18
|
-
spec.require_paths = ['lib']
|
13
|
+
spec.require_paths = ["lib"]
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
|
+
spec.homepage = "https://github.com/crondaemon/ruby-stix2"
|
16
|
+
spec.license = "GPL-2.0-or-later"
|
19
17
|
|
20
|
-
spec.required_ruby_version =
|
18
|
+
spec.required_ruby_version = ">= 2.7"
|
21
19
|
|
22
|
-
spec.add_dependency
|
20
|
+
spec.add_dependency "hashie", "~> 5.0.0"
|
23
21
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
31
|
-
|
22
|
+
spec.add_development_dependency "bundler", "~> 2.3"
|
23
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
24
|
+
spec.add_development_dependency "pry", "~> 0.13.0"
|
25
|
+
spec.add_development_dependency "pry-byebug", "~> 3.10.1"
|
26
|
+
spec.add_development_dependency "minitest", "~> 5.18.1"
|
27
|
+
spec.add_development_dependency "simplecov", "~> 0.22.0"
|
28
|
+
spec.add_development_dependency "irb", "~> 1.7.0"
|
29
|
+
spec.add_development_dependency "mutex_m", "~> 0.2.0"
|
30
|
+
spec.add_development_dependency "standardrb", "~> 1.0.1"
|
31
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-stix2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dario Lombardo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -122,6 +122,34 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 1.7.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: mutex_m
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.2.0
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.2.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: standardrb
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.0.1
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.1
|
125
153
|
description: 'Ruby implementation for the STIX protocol version 2.1. Full specs: https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html'
|
126
154
|
email: lomato@gmail.com
|
127
155
|
executables: []
|
@@ -216,7 +244,7 @@ files:
|
|
216
244
|
- lib/stix2/storage.rb
|
217
245
|
- lib/stix2/version.rb
|
218
246
|
- ruby-stix2.gemspec
|
219
|
-
homepage: https://
|
247
|
+
homepage: https://github.com/crondaemon/ruby-stix2
|
220
248
|
licenses:
|
221
249
|
- GPL-2.0-or-later
|
222
250
|
metadata: {}
|
@@ -235,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
263
|
- !ruby/object:Gem::Version
|
236
264
|
version: '0'
|
237
265
|
requirements: []
|
238
|
-
rubygems_version: 3.
|
266
|
+
rubygems_version: 3.5.16
|
239
267
|
signing_key:
|
240
268
|
specification_version: 4
|
241
269
|
summary: Ruby implementation for the STIX protocol version 2.1
|