ruby-stix2 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +4 -3
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +47 -0
  5. data/README.md +1 -1
  6. data/lib/stix2/bundle.rb +1 -2
  7. data/lib/stix2/common.rb +47 -30
  8. data/lib/stix2/confidence_scale.rb +38 -38
  9. data/lib/stix2/custom_object.rb +5 -5
  10. data/lib/stix2/cyberobservable_objects/artifact.rb +1 -1
  11. data/lib/stix2/cyberobservable_objects/directory.rb +1 -1
  12. data/lib/stix2/cyberobservable_objects/domain_name.rb +1 -1
  13. data/lib/stix2/cyberobservable_objects/email_message.rb +7 -7
  14. data/lib/stix2/cyberobservable_objects/file.rb +2 -2
  15. data/lib/stix2/cyberobservable_objects/ipv4_addr.rb +4 -4
  16. data/lib/stix2/cyberobservable_objects/ipv6_addr.rb +4 -4
  17. data/lib/stix2/cyberobservable_objects/network_traffic.rb +3 -3
  18. data/lib/stix2/cyberobservable_objects/process.rb +3 -3
  19. data/lib/stix2/cyberobservable_objects/software.rb +1 -1
  20. data/lib/stix2/cyberobservable_objects/user_account.rb +4 -4
  21. data/lib/stix2/cyberobservable_objects/x509_certificate.rb +3 -3
  22. data/lib/stix2/domain_objects/attack_pattern.rb +3 -3
  23. data/lib/stix2/domain_objects/campaign.rb +1 -1
  24. data/lib/stix2/domain_objects/grouping.rb +1 -1
  25. data/lib/stix2/domain_objects/identity.rb +1 -1
  26. data/lib/stix2/domain_objects/indicator.rb +2 -2
  27. data/lib/stix2/domain_objects/infrastructure.rb +3 -3
  28. data/lib/stix2/domain_objects/intrusion-set.rb +3 -3
  29. data/lib/stix2/domain_objects/malware.rb +9 -9
  30. data/lib/stix2/domain_objects/malware_analysis.rb +3 -3
  31. data/lib/stix2/domain_objects/note.rb +2 -2
  32. data/lib/stix2/domain_objects/observed_data.rb +1 -1
  33. data/lib/stix2/domain_objects/opinion.rb +2 -2
  34. data/lib/stix2/domain_objects/report.rb +2 -2
  35. data/lib/stix2/domain_objects/threat_actor.rb +6 -6
  36. data/lib/stix2/domain_objects/tool.rb +3 -3
  37. data/lib/stix2/enum.rb +60 -60
  38. data/lib/stix2/extension_definition.rb +2 -2
  39. data/lib/stix2/extensions/alternate_data_stream_type.rb +1 -1
  40. data/lib/stix2/extensions/archive_file.rb +2 -2
  41. data/lib/stix2/extensions/icmp.rb +2 -2
  42. data/lib/stix2/extensions/ntfs.rb +2 -2
  43. data/lib/stix2/extensions/pdf.rb +2 -2
  44. data/lib/stix2/extensions/socket.rb +3 -3
  45. data/lib/stix2/extensions/unix_account.rb +1 -1
  46. data/lib/stix2/extensions/windows_pe_optional_header_type.rb +7 -7
  47. data/lib/stix2/extensions/windows_pe_section_type.rb +1 -1
  48. data/lib/stix2/extensions/windows_pebinary.rb +7 -7
  49. data/lib/stix2/extensions/windows_process.rb +2 -2
  50. data/lib/stix2/extensions/windows_service.rb +2 -2
  51. data/lib/stix2/external_reference.rb +1 -1
  52. data/lib/stix2/languages.rb +233 -233
  53. data/lib/stix2/meta_objects/data_markings/granular_marking.rb +1 -1
  54. data/lib/stix2/meta_objects/data_markings/marking_definition.rb +2 -2
  55. data/lib/stix2/meta_objects/data_markings/object_marking.rb +1 -1
  56. data/lib/stix2/meta_objects/language_content.rb +1 -1
  57. data/lib/stix2/ov.rb +263 -258
  58. data/lib/stix2/relationship_objects/relationship.rb +155 -2
  59. data/lib/stix2/relationship_objects/sighting.rb +3 -3
  60. data/lib/stix2/version.rb +1 -1
  61. data/lib/stix2.rb +90 -90
  62. data/ruby-stix2.gemspec +23 -23
  63. metadata +35 -7
@@ -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: Array[String]
10
- property :where_sighted_refs, coerce: Array[String]
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
@@ -1,3 +1,3 @@
1
1
  module Stix2
2
- VERSION = '0.1.1'
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/stix2.rb CHANGED
@@ -1,118 +1,118 @@
1
- require 'hashie'
2
- require 'json'
3
- require 'time'
1
+ require "hashie"
2
+ require "json"
3
+ require "time"
4
4
 
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'
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 'stix2/meta_objects/data_markings/granular_marking'
15
- require 'stix2/meta_objects/data_markings/object_marking'
14
+ require "stix2/meta_objects/data_markings/granular_marking"
15
+ require "stix2/meta_objects/data_markings/object_marking"
16
16
 
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'
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 'stix2/relationship_objects/base'
39
- require 'stix2/relationship_objects/relationship'
40
- require 'stix2/relationship_objects/sighting'
38
+ require "stix2/relationship_objects/base"
39
+ require "stix2/relationship_objects/relationship"
40
+ require "stix2/relationship_objects/sighting"
41
41
 
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'
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 'stix2/meta_objects/base'
65
- require 'stix2/meta_objects/language_content'
64
+ require "stix2/meta_objects/base"
65
+ require "stix2/meta_objects/language_content"
66
66
 
67
- require 'stix2/meta_objects/data_markings/base'
68
- require 'stix2/meta_objects/data_markings/marking_definition'
67
+ require "stix2/meta_objects/data_markings/base"
68
+ require "stix2/meta_objects/data_markings/marking_definition"
69
69
 
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'
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 'stix2/custom_object'
85
- require 'stix2/bundle'
86
- require 'stix2/confidence_scale'
84
+ require "stix2/custom_object"
85
+ require "stix2/bundle"
86
+ require "stix2/confidence_scale"
87
87
 
88
- require 'stix2/storage'
88
+ require "stix2/storage"
89
89
 
90
90
  class Time
91
- class <<self
92
- alias :coerce :parse
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
- options_ = JSON.parse(options)
100
+ JSON.parse(options)
101
101
  when Hash
102
- options_ = options.clone
102
+ options.clone
103
103
  else
104
- options_ = JSON.parse(options.to_s)
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, 'DomainObject', 'RelationshipObject', 'CyberobservableObject', 'MetaObject',
111
- 'MetaObject::DataMarking'].each do |family|
112
- if type.start_with?('x-')
113
- class_name = 'Stix2::CustomObject'
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
- class_name = ['Stix2', family, type.split('-').map(&:capitalize).join].compact.join('::')
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 == 'true')
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
- # coding: utf-8
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 'stix2/version'
3
+ require "stix2/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "ruby-stix2"
8
- spec.version = Stix2::VERSION
9
- spec.summary = "Ruby implementation for the STIX protocol version 2.1"
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 = ["Dario Lombardo"]
12
- spec.email = "lomato@gmail.com"
10
+ spec.authors = ["Dario Lombardo"]
11
+ spec.email = "lomato@gmail.com"
13
12
 
14
- spec.require_paths = ['lib']
15
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- spec.homepage = "https://rubygemspec.org/gems/stix2"
17
- spec.license = "GPL-2.0-or-later"
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 = '>= 2.7'
18
+ spec.required_ruby_version = ">= 2.7"
21
19
 
22
- spec.add_dependency 'hashie', '~> 5.0.0'
20
+ spec.add_dependency "hashie", "~> 5.0.0"
23
21
 
24
- spec.add_development_dependency 'bundler', '~> 2.3'
25
- spec.add_development_dependency 'rake', '~> 13.0'
26
- spec.add_development_dependency 'pry', '~> 0.13.0'
27
- spec.add_development_dependency 'pry-byebug', '~> 3.10.1'
28
- spec.add_development_dependency 'minitest', '~> 5.18.1'
29
- spec.add_development_dependency 'simplecov', '~> 0.22.0'
30
- spec.add_development_dependency 'irb', '~> 1.7.0'
31
- end
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"
30
+ spec.add_development_dependency "standardrb"
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.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dario Lombardo
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-26 00:00:00.000000000 Z
11
+ date: 2024-09-02 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'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '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: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
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,11 +244,11 @@ files:
216
244
  - lib/stix2/storage.rb
217
245
  - lib/stix2/version.rb
218
246
  - ruby-stix2.gemspec
219
- homepage: https://rubygemspec.org/gems/stix2
247
+ homepage: https://github.com/crondaemon/ruby-stix2
220
248
  licenses:
221
249
  - GPL-2.0-or-later
222
250
  metadata: {}
223
- post_install_message:
251
+ post_install_message:
224
252
  rdoc_options: []
225
253
  require_paths:
226
254
  - lib
@@ -235,8 +263,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
263
  - !ruby/object:Gem::Version
236
264
  version: '0'
237
265
  requirements: []
238
- rubygems_version: 3.3.26
239
- signing_key:
266
+ rubygems_version: 3.4.19
267
+ signing_key:
240
268
  specification_version: 4
241
269
  summary: Ruby implementation for the STIX protocol version 2.1
242
270
  test_files: []