ronin-support 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +14 -0
  3. data/.rubocop.yml +109 -0
  4. data/ChangeLog.md +33 -1
  5. data/Gemfile +8 -4
  6. data/README.md +1 -1
  7. data/Rakefile +2 -2
  8. data/examples/ssl_proxy.rb +2 -1
  9. data/examples/tcp_proxy.rb +6 -4
  10. data/lib/ronin/support/archive/core_ext/file.rb +43 -0
  11. data/lib/ronin/support/archive/core_ext.rb +1 -1
  12. data/lib/ronin/support/archive/tar/writer.rb +2 -2
  13. data/lib/ronin/support/archive/tar.rb +4 -4
  14. data/lib/ronin/support/archive/zip/reader.rb +2 -2
  15. data/lib/ronin/support/binary/array.rb +5 -8
  16. data/lib/ronin/support/binary/bit_flip.rb +7 -1
  17. data/lib/ronin/support/binary/buffer.rb +25 -25
  18. data/lib/ronin/support/binary/byte_slice.rb +17 -17
  19. data/lib/ronin/support/binary/core_ext.rb +2 -0
  20. data/lib/ronin/support/binary/cstring.rb +50 -4
  21. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +4 -0
  22. data/lib/ronin/support/binary/ctypes/arch/arm.rb +3 -0
  23. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +4 -0
  24. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +3 -0
  25. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +4 -0
  26. data/lib/ronin/support/binary/ctypes/arch/mips.rb +3 -0
  27. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +4 -0
  28. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +3 -0
  29. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +3 -0
  30. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +3 -0
  31. data/lib/ronin/support/binary/ctypes/arch/x86.rb +3 -0
  32. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +3 -0
  33. data/lib/ronin/support/binary/ctypes/array_type.rb +2 -2
  34. data/lib/ronin/support/binary/ctypes/big_endian.rb +3 -0
  35. data/lib/ronin/support/binary/ctypes/enum_type.rb +2 -2
  36. data/lib/ronin/support/binary/ctypes/little_endian.rb +3 -0
  37. data/lib/ronin/support/binary/ctypes/native.rb +3 -0
  38. data/lib/ronin/support/binary/ctypes/os/bsd.rb +1 -1
  39. data/lib/ronin/support/binary/ctypes/scalar_type.rb +2 -2
  40. data/lib/ronin/support/binary/ctypes/struct_type.rb +3 -3
  41. data/lib/ronin/support/binary/ctypes/type_resolver.rb +7 -8
  42. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +2 -2
  43. data/lib/ronin/support/binary/ctypes/union_type.rb +3 -3
  44. data/lib/ronin/support/binary/ctypes.rb +3 -3
  45. data/lib/ronin/support/binary/memory.rb +2 -2
  46. data/lib/ronin/support/binary/packet.rb +80 -0
  47. data/lib/ronin/support/binary/stack.rb +6 -7
  48. data/lib/ronin/support/binary/struct/member.rb +5 -3
  49. data/lib/ronin/support/binary/struct.rb +81 -79
  50. data/lib/ronin/support/binary/template.rb +2 -5
  51. data/lib/ronin/support/binary/unhexdump/parser.rb +11 -11
  52. data/lib/ronin/support/binary/union.rb +22 -22
  53. data/lib/ronin/support/binary.rb +1 -0
  54. data/lib/ronin/support/cli/ansi.rb +0 -1
  55. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
  56. data/lib/ronin/support/cli/io_shell.rb +4 -4
  57. data/lib/ronin/support/cli/printing.rb +3 -3
  58. data/lib/ronin/support/compression/core_ext/file.rb +16 -0
  59. data/lib/ronin/support/compression/zlib.rb +1 -1
  60. data/lib/ronin/support/core_ext/enumerable.rb +0 -2
  61. data/lib/ronin/support/core_ext/file.rb +1 -1
  62. data/lib/ronin/support/core_ext/kernel.rb +6 -9
  63. data/lib/ronin/support/core_ext/string.rb +2 -2
  64. data/lib/ronin/support/crypto/cert.rb +11 -15
  65. data/lib/ronin/support/crypto/cert_chain.rb +1 -1
  66. data/lib/ronin/support/crypto/cipher/aes.rb +3 -0
  67. data/lib/ronin/support/crypto/cipher/aes128.rb +4 -1
  68. data/lib/ronin/support/crypto/cipher/aes256.rb +4 -1
  69. data/lib/ronin/support/crypto/cipher.rb +1 -1
  70. data/lib/ronin/support/crypto/core_ext/file.rb +33 -1
  71. data/lib/ronin/support/crypto/core_ext/string.rb +34 -2
  72. data/lib/ronin/support/crypto/key/methods.rb +4 -1
  73. data/lib/ronin/support/crypto/key.rb +5 -2
  74. data/lib/ronin/support/crypto/openssl.rb +1 -1
  75. data/lib/ronin/support/crypto.rb +0 -1
  76. data/lib/ronin/support/encoding/base16.rb +2 -2
  77. data/lib/ronin/support/encoding/base32.rb +29 -18
  78. data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
  79. data/lib/ronin/support/encoding/c/core_ext/string.rb +1 -1
  80. data/lib/ronin/support/encoding/c.rb +6 -6
  81. data/lib/ronin/support/encoding/core_ext/string.rb +2 -2
  82. data/lib/ronin/support/encoding/hex/core_ext/string.rb +1 -1
  83. data/lib/ronin/support/encoding/hex.rb +4 -4
  84. data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
  85. data/lib/ronin/support/encoding/js.rb +5 -5
  86. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +2 -2
  87. data/lib/ronin/support/encoding/powershell.rb +5 -6
  88. data/lib/ronin/support/encoding/quoted_printable.rb +3 -1
  89. data/lib/ronin/support/encoding/ruby.rb +5 -5
  90. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +2 -2
  91. data/lib/ronin/support/encoding/shell.rb +3 -3
  92. data/lib/ronin/support/encoding/sql.rb +1 -1
  93. data/lib/ronin/support/encoding/uuencoding.rb +3 -1
  94. data/lib/ronin/support/encoding/xml.rb +3 -3
  95. data/lib/ronin/support/encoding.rb +95 -0
  96. data/lib/ronin/support/network/asn/list.rb +6 -1
  97. data/lib/ronin/support/network/asn/record.rb +3 -0
  98. data/lib/ronin/support/network/asn/record_set.rb +3 -0
  99. data/lib/ronin/support/network/asn.rb +167 -6
  100. data/lib/ronin/support/network/dns/mixin.rb +2 -10
  101. data/lib/ronin/support/network/dns/resolver.rb +3 -0
  102. data/lib/ronin/support/network/domain.rb +21 -21
  103. data/lib/ronin/support/network/email_address.rb +1 -5
  104. data/lib/ronin/support/network/esmtp/mixin.rb +1 -0
  105. data/lib/ronin/support/network/ftp/mixin.rb +1 -1
  106. data/lib/ronin/support/network/host.rb +75 -47
  107. data/lib/ronin/support/network/http/core_ext/uri/http.rb +8 -0
  108. data/lib/ronin/support/network/http/core_ext.rb +1 -1
  109. data/lib/ronin/support/network/http.rb +317 -80
  110. data/lib/ronin/support/network/ip.rb +49 -23
  111. data/lib/ronin/support/network/ip_range/cidr.rb +1 -5
  112. data/lib/ronin/support/network/ip_range/glob.rb +1 -0
  113. data/lib/ronin/support/network/ip_range/range.rb +1 -1
  114. data/lib/ronin/support/network/ip_range.rb +5 -7
  115. data/lib/ronin/support/network/proxy.rb +4 -4
  116. data/lib/ronin/support/network/public_suffix/list.rb +10 -8
  117. data/lib/ronin/support/network/public_suffix/suffix_set.rb +3 -0
  118. data/lib/ronin/support/network/public_suffix.rb +9 -4
  119. data/lib/ronin/support/network/smtp/email.rb +0 -9
  120. data/lib/ronin/support/network/smtp/mixin.rb +2 -2
  121. data/lib/ronin/support/network/ssl/local_cert.rb +1 -3
  122. data/lib/ronin/support/network/ssl/mixin.rb +13 -13
  123. data/lib/ronin/support/network/ssl/openssl.rb +1 -1
  124. data/lib/ronin/support/network/ssl/proxy.rb +14 -16
  125. data/lib/ronin/support/network/ssl.rb +4 -2
  126. data/lib/ronin/support/network/tcp/proxy.rb +3 -3
  127. data/lib/ronin/support/network/tcp.rb +10 -12
  128. data/lib/ronin/support/network/telnet/mixin.rb +14 -14
  129. data/lib/ronin/support/network/tld/list.rb +2 -1
  130. data/lib/ronin/support/network/tld.rb +7 -4
  131. data/lib/ronin/support/network/tls/proxy.rb +1 -1
  132. data/lib/ronin/support/network/tls.rb +0 -2
  133. data/lib/ronin/support/network/udp/proxy.rb +5 -5
  134. data/lib/ronin/support/network/udp.rb +14 -16
  135. data/lib/ronin/support/path.rb +4 -4
  136. data/lib/ronin/support/text/erb/mixin.rb +3 -0
  137. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +33 -0
  138. data/lib/ronin/support/text/homoglyph/table.rb +3 -3
  139. data/lib/ronin/support/text/patterns/credentials.rb +2 -2
  140. data/lib/ronin/support/text/patterns/crypto.rb +1 -1
  141. data/lib/ronin/support/text/patterns/file_system.rb +3 -4
  142. data/lib/ronin/support/text/patterns/network.rb +21 -21
  143. data/lib/ronin/support/text/patterns/numeric.rb +1 -1
  144. data/lib/ronin/support/text/patterns/source_code.rb +2 -2
  145. data/lib/ronin/support/text/random/mixin.rb +17 -17
  146. data/lib/ronin/support/text/random.rb +25 -25
  147. data/lib/ronin/support/text/typo/core_ext/string.rb +24 -0
  148. data/lib/ronin/support/text/typo/generator.rb +2 -2
  149. data/lib/ronin/support/version.rb +1 -1
  150. data/ronin-support.gemspec +6 -5
  151. metadata +3 -2
@@ -27,7 +27,7 @@ module Ronin
27
27
  # protocols.
28
28
  #
29
29
  # ## Example
30
- #
30
+ #
31
31
  # require 'ronin/support/network/tls/proxy'
32
32
  # require 'hexdump'
33
33
  #
@@ -16,7 +16,6 @@
16
16
  # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
17
17
  #
18
18
 
19
-
20
19
  require 'ronin/support/network/tls/proxy'
21
20
  require 'ronin/support/network/ssl'
22
21
 
@@ -46,7 +45,6 @@ module Ronin
46
45
  def self.context(version: 1.2, **kwargs)
47
46
  SSL.context(version: version, **kwargs)
48
47
  end
49
-
50
48
  end
51
49
  end
52
50
  end
@@ -44,7 +44,7 @@ module Ronin
44
44
  # puts "#{host}:#{port} <- #{proxy}"
45
45
  # hex.dump(data)
46
46
  # end
47
- #
47
+ #
48
48
  # end
49
49
  #
50
50
  # @since 0.5.0
@@ -70,7 +70,7 @@ module Ronin
70
70
  def poll
71
71
  sockets = [@socket] + server_connections
72
72
 
73
- readable, writtable, errors = IO.select(sockets,nil,sockets)
73
+ readable, _writtable, errors = IO.select(sockets,nil,sockets)
74
74
 
75
75
  (errors & server_connections).each do |server_socket|
76
76
  client_socket = client_connection_for(server_socket)
@@ -79,8 +79,8 @@ module Ronin
79
79
  end
80
80
 
81
81
  (readable & server_connections).each do |server_socket|
82
- client_socket = client_connection_for(server_socket)
83
- data, addrinfo = recv(server_socket)
82
+ client_socket = client_connection_for(server_socket)
83
+ data, _addrinfo = recv(server_socket)
84
84
 
85
85
  server_data(client_socket,server_socket,data)
86
86
  end
@@ -133,7 +133,7 @@ module Ronin
133
133
  def recv(connection)
134
134
  case connection
135
135
  when Array
136
- socket, (host, port) = connection
136
+ socket, _host_and_port = connection
137
137
 
138
138
  socket.recvfrom(@buffer_size)
139
139
  when UDPSocket
@@ -67,24 +67,22 @@ module Ronin
67
67
  # @since 0.5.0
68
68
  #
69
69
  def self.open?(host,port, timeout: 5, **kwargs)
70
- begin
71
- Timeout.timeout(timeout) do
72
- connect(host,port,**kwargs) do |socket|
73
- # send an empty UDP packet, just like nmap
74
- socket.syswrite('')
70
+ Timeout.timeout(timeout) do
71
+ connect(host,port,**kwargs) do |socket|
72
+ # send an empty UDP packet, just like nmap
73
+ socket.syswrite('')
75
74
 
76
- # send an empty UDP packet again, to elicit an
77
- # Errno::ECONNREFUSED
78
- socket.syswrite('')
79
- end
75
+ # send an empty UDP packet again, to elicit an
76
+ # Errno::ECONNREFUSED
77
+ socket.syswrite('')
80
78
  end
81
-
82
- return true
83
- rescue Timeout::Error
84
- return nil
85
- rescue SocketError, SystemCallError
86
- return false
87
79
  end
80
+
81
+ return true
82
+ rescue Timeout::Error
83
+ return nil
84
+ rescue SocketError, SystemCallError
85
+ return false
88
86
  end
89
87
 
90
88
  #
@@ -328,7 +326,7 @@ module Ronin
328
326
  #
329
327
  def self.server_session(**kwargs,&block)
330
328
  server = server(**kwargs,&block)
331
- server.close()
329
+ server.close
332
330
  return nil
333
331
  end
334
332
 
@@ -54,8 +54,8 @@ module Ronin
54
54
  # @return [Path]
55
55
  # The root path.
56
56
  #
57
- def Path.root
58
- Path.new('/')
57
+ def self.root
58
+ new('/')
59
59
  end
60
60
 
61
61
  #
@@ -89,7 +89,7 @@ module Ronin
89
89
  separator
90
90
  elsif n > 0
91
91
  path = new('..',separator)
92
- path.join(*(['..'] * (n-1)))
92
+ path.join(*(['..'] * (n - 1)))
93
93
  else
94
94
  raise(ArgumentError,"negative argument")
95
95
  end
@@ -115,7 +115,7 @@ module Ronin
115
115
  # # => #<Ronin::Support::Path:../../../../../../../etc/passwd>
116
116
  #
117
117
  def join(*names)
118
- joined_path = if root? then String.new
118
+ joined_path = if root? then String.new(encoding: Encoding::UTF_8)
119
119
  else self.to_s
120
120
  end
121
121
 
@@ -22,6 +22,9 @@ module Ronin
22
22
  module Support
23
23
  module Text
24
24
  module ERB
25
+ #
26
+ # Mixin which adds `erb` helper methods.
27
+ #
25
28
  module Mixin
26
29
  #
27
30
  # Renders the ERB template file.
@@ -39,6 +39,10 @@ class String
39
39
  # @raise [Ronin::Support::Text::Homoglyph::NotViable]
40
40
  # No homoglyph replaceable characters were found in the String.
41
41
  #
42
+ # @example
43
+ # "microsoft".homoglyph
44
+ # # => "microsoft"
45
+ #
42
46
  # @see Ronin::Support::Text::Homoglyph.substitute
43
47
  #
44
48
  # @api public
@@ -68,6 +72,11 @@ class String
68
72
  # @return [Enumerator]
69
73
  # If no block is given, an Enumerator object will be returned.
70
74
  #
75
+ # @example
76
+ # "microsoft".each_homoglyph do |homoglyph|
77
+ # # ...
78
+ # end
79
+ #
71
80
  # @see Ronin::Support::Text::Homoglyph.each_substitution
72
81
  #
73
82
  # @api public
@@ -95,6 +104,30 @@ class String
95
104
  # @return [Array<String>]
96
105
  # All variation of the given String.
97
106
  #
107
+ # @example
108
+ # "microsoft".homoglyphs
109
+ # # =>
110
+ # # ["ⅿicrosoft",
111
+ # # "microsoft",
112
+ # # "mіcrosoft",
113
+ # # "mⅰcrosoft",
114
+ # # "microsoft",
115
+ # # "miϲrosoft",
116
+ # # "miсrosoft",
117
+ # # "miⅽrosoft",
118
+ # # "microsoft",
119
+ # # "microsoft",
120
+ # # "micrοsoft",
121
+ # # "microsοft",
122
+ # # "micrоsoft",
123
+ # # "microsоft",
124
+ # # "microsoft",
125
+ # # "microsoft",
126
+ # # "microѕoft",
127
+ # # "microsoft",
128
+ # # "microsoft",
129
+ # # "microsoft"]
130
+ #
98
131
  # @see Ronin::Support::Text::Homoglyph.each_substitution
99
132
  #
100
133
  # @api public
@@ -61,7 +61,7 @@ module Ronin
61
61
  # @api private
62
62
  #
63
63
  def self.load_file(path)
64
- table = new()
64
+ table = new
65
65
 
66
66
  File.open(path) do |file|
67
67
  file.each_line(chomp: true) do |line|
@@ -211,11 +211,11 @@ module Ronin
211
211
  offset = 0
212
212
 
213
213
  while (index = string.index(replaceable_char,offset))
214
- homoglyph = string.dup
214
+ homoglyph = string.dup
215
215
  homoglyph[index] = substitute_char
216
216
 
217
217
  yield homoglyph
218
- offset = index+1
218
+ offset = index + 1
219
219
  end
220
220
  end
221
221
  end
@@ -59,10 +59,10 @@ module Ronin
59
59
  # @since 1.0.0
60
60
  AWS_ACCESS_KEY_ID = /(?<=[^A-Z0-9]|^)[A-Z0-9]{20}(?=[^A-Z0-9]|$)/
61
61
 
62
- # Regular expression for finding all AWS secret access key
62
+ # Regular expression for finding all AWS secret access key
63
63
  #
64
64
  # @since 1.0.0
65
- AWS_SECRET_ACCESS_KEY = /(?<=[^A-Za-z0-9\/+=]|^)[A-Za-z0-9\/+=]{40}(?=[^A-Za-z0-9\/+=]|$)/
65
+ AWS_SECRET_ACCESS_KEY = %r{(?<=[^A-Za-z0-9/+=]|^)[A-Za-z0-9/+=]{40}(?=[^A-Za-z0-9/+=]|$)}
66
66
 
67
67
  # Regular expression for finding all API keys (md5, sha1, sha256,
68
68
  # sha512, AWS access key ID or AWS secret access key).
@@ -60,7 +60,7 @@ module Ronin
60
60
  # Regular expression for finding all SSH public keys in text.
61
61
  #
62
62
  # @since 1.0.0
63
- SSH_PUBLIC_KEY = /(?:ssh-(?:rsa|dss|ed25519(?:@openssh.com)?)|ecdsa-sha2-nistp(?:256|384|521)(?:@openssh.com)?) AAAA[A-Za-z0-9+\/]+[=]{0,3} [^@\s]+@[^@\s]+/
63
+ SSH_PUBLIC_KEY = %r{(?:ssh-(?:rsa|dss|ed25519(?:@openssh.com)?)|ecdsa-sha2-nistp(?:256|384|521)(?:@openssh.com)?) AAAA[A-Za-z0-9+/]+(?:=){0,3} [^@\s]+@[^@\s]+}
64
64
  end
65
65
  end
66
66
  end
@@ -35,7 +35,7 @@ module Ronin
35
35
  # Regular expression to find file names in text
36
36
  #
37
37
  # @since 0.4.0
38
- FILE_NAME = /(?:[^\/\\\. ]|\\[\/\\ ])+(?:#{FILE_EXT})?/
38
+ FILE_NAME = %r{(?:[^/\\\. ]|\\[/\\ ])+(?:#{FILE_EXT})?}
39
39
 
40
40
  # Regular expression to find Directory names in text
41
41
  #
@@ -45,12 +45,12 @@ module Ronin
45
45
  # Regular expression to find local UNIX Paths in text
46
46
  #
47
47
  # @since 0.4.0
48
- RELATIVE_UNIX_PATH = /(?:#{DIR_NAME}\/)+#{DIR_NAME}\/?/
48
+ RELATIVE_UNIX_PATH = %r{(?:#{DIR_NAME}/)+#{DIR_NAME}/?}
49
49
 
50
50
  # Regular expression to find absolute UNIX Paths in text
51
51
  #
52
52
  # @since 0.4.0
53
- ABSOLUTE_UNIX_PATH = /(?:\/#{FILE_NAME})+\/?/
53
+ ABSOLUTE_UNIX_PATH = %r{(?:/#{FILE_NAME})+/?}
54
54
 
55
55
  # Regular expression to find UNIX Paths in text
56
56
  #
@@ -86,7 +86,6 @@ module Ronin
86
86
  #
87
87
  # @since 0.4.0
88
88
  PATH = /#{UNIX_PATH}|#{WINDOWS_PATH}/
89
-
90
89
  end
91
90
  end
92
91
  end
@@ -40,31 +40,31 @@ module Ronin
40
40
  # A regular expression for matching IPv4 Addresses.
41
41
  #
42
42
  # @since 1.0.0
43
- IPV4_ADDR = /#{decimal_octet}(?:\.#{decimal_octet}){3}(?:\/\d{1,2})?/
43
+ IPV4_ADDR = %r{#{decimal_octet}(?:\.#{decimal_octet}){3}(?:/\d{1,2})?}
44
44
 
45
45
  # A regular expression for matching IPv6 Addresses.
46
46
  #
47
47
  # @since 1.0.0
48
- IPV6_ADDR = Regexp.union(
49
- /(?:[0-9a-f]{1,4}:){6}#{IPV4_ADDR}/,
50
- /(?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:#{IPV4_ADDR}/,
51
- /(?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:#{IPV4_ADDR}/,
52
- /(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:#{IPV4_ADDR}/,
53
- /(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:#{IPV4_ADDR}/,
54
- /(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:#{IPV4_ADDR}/,
55
- /(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:#{IPV4_ADDR}/,
56
- /:(?::[0-9a-f]{1,4}){1,5}:#{IPV4_ADDR}/,
57
- /(?:(?:[0-9a-f]{1,4}:){1,5}|:):#{IPV4_ADDR}/,
58
- /(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}(?:\/\d{1,3})?/,
59
- /(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}(?:\/\d{1,3})?/,
60
- /(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}(?:\/\d{1,3})?/,
61
- /(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}(?:\/\d{1,3})?/,
62
- /(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}(?:\/\d{1,3})?/,
63
- /(?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1}(?:\/\d{1,3})?/,
64
- /[0-9a-f]{1,4}(?::[0-9a-f]{1,4}){7}(?:\/\d{1,3})?/,
65
- /:(?::[0-9a-f]{1,4}){1,7}(?:\/\d{1,3})?/,
66
- /(?:(?:[0-9a-f]{1,4}:){1,7}|:):(?:\/\d{1,3})?/
67
- )
48
+ IPV6_ADDR = %r{
49
+ (?:[0-9a-f]{1,4}:){6}#{IPV4_ADDR}|
50
+ (?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:#{IPV4_ADDR}|
51
+ (?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:#{IPV4_ADDR}|
52
+ (?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:#{IPV4_ADDR}|
53
+ (?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:#{IPV4_ADDR}|
54
+ (?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:#{IPV4_ADDR}|
55
+ (?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:#{IPV4_ADDR}|
56
+ :(?::[0-9a-f]{1,4}){1,5}:#{IPV4_ADDR}|
57
+ (?:(?:[0-9a-f]{1,4}:){1,5}|:):#{IPV4_ADDR}|
58
+ (?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}(?:/\d{1,3})?|
59
+ (?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}(?:/\d{1,3})?|
60
+ (?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}(?:/\d{1,3})?|
61
+ (?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}(?:/\d{1,3})?|
62
+ (?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}(?:/\d{1,3})?|
63
+ (?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1}(?:/\d{1,3})?|
64
+ [0-9a-f]{1,4}(?::[0-9a-f]{1,4}){7}(?:/\d{1,3})?|
65
+ :(?::[0-9a-f]{1,4}){1,7}(?:/\d{1,3})?|
66
+ (?:(?:[0-9a-f]{1,4}:){1,7}|:):(?:/\d{1,3})?
67
+ }x
68
68
 
69
69
  # A regular expression for matching IP Addresses.
70
70
  #
@@ -26,7 +26,7 @@ module Ronin
26
26
  #
27
27
  # @group Numeric Patterns
28
28
  #
29
-
29
+
30
30
  # Regular expression for finding all numbers in text.
31
31
  #
32
32
  # @since 1.0.0
@@ -35,7 +35,7 @@ module Ronin
35
35
  # Regular expression to find identifier in text
36
36
  #
37
37
  # @since 0.4.0
38
- IDENTIFIER = /[_]*[a-zA-Z]+[a-zA-Z0-9_-]*/
38
+ IDENTIFIER = /_*[a-zA-Z]+[a-zA-Z0-9_-]*/
39
39
 
40
40
  # Regular expression to find all variable names in text.
41
41
  #
@@ -77,7 +77,7 @@ module Ronin
77
77
  # Regular expression to find all Base64 encoded strings in the text.
78
78
  #
79
79
  # @since 1.0.0
80
- BASE64 = /(?:[A-Za-z0-9+\/]{4}\n?)+(?:[A-Za-z0-9+\/]{2}==\n?|[A-Za-z0-9+\/]{3}=\n?)?|[A-Za-z0-9+\/]{2}==\n?|[A-Za-z0-9+\/]{3}=\n?/
80
+ BASE64 = %r{(?:[A-Za-z0-9+/]{4}\n?)+(?:[A-Za-z0-9+/]{2}==\n?|[A-Za-z0-9+/]{3}=\n?)?|[A-Za-z0-9+/]{2}==\n?|[A-Za-z0-9+/]{3}=\n?}
81
81
 
82
82
  # Regular expression to match any single-line or multi-line C-style
83
83
  # comments.
@@ -31,7 +31,7 @@ module Ronin
31
31
  #
32
32
  # Generates a random String of numeric characters.
33
33
  #
34
- # @param [Integer] n
34
+ # @param [Integer, Range<Integer>] n
35
35
  # The desired length of the String.
36
36
  #
37
37
  # @return [String]
@@ -56,7 +56,7 @@ module Ronin
56
56
  #
57
57
  # A random octal-digit string.
58
58
  #
59
- # @param [Integer] n
59
+ # @param [Integer, Range<Integer>] n
60
60
  # The desired length of the String.
61
61
  #
62
62
  # @return [String]
@@ -79,7 +79,7 @@ module Ronin
79
79
  #
80
80
  # The upper-case hexadecimal character set.
81
81
  #
82
- # @param [Integer] n
82
+ # @param [Integer, Range<Integer>] n
83
83
  # The desired length of the String.
84
84
  #
85
85
  # @return [String]
@@ -104,7 +104,7 @@ module Ronin
104
104
  #
105
105
  # The lower-case hexadecimal character set.
106
106
  #
107
- # @param [Integer] n
107
+ # @param [Integer, Range<Integer>] n
108
108
  # The desired length of the String.
109
109
  #
110
110
  # @return [String]
@@ -129,7 +129,7 @@ module Ronin
129
129
  #
130
130
  # A random hexadecimal string.
131
131
  #
132
- # @param [Integer] n
132
+ # @param [Integer, Range<Integer>] n
133
133
  # The desired length of the String.
134
134
  #
135
135
  # @return [String]
@@ -152,7 +152,7 @@ module Ronin
152
152
  #
153
153
  # The upper-case alphabetic character set.
154
154
  #
155
- # @param [Integer] n
155
+ # @param [Integer, Range<Integer>] n
156
156
  # The desired length of the String.
157
157
  #
158
158
  # @return [String]
@@ -177,7 +177,7 @@ module Ronin
177
177
  #
178
178
  # The lower-case alphabetic character set.
179
179
  #
180
- # @param [Integer] n
180
+ # @param [Integer, Range<Integer>] n
181
181
  # The desired length of the String.
182
182
  #
183
183
  # @return [String]
@@ -202,7 +202,7 @@ module Ronin
202
202
  #
203
203
  # A random alphabetic string.
204
204
  #
205
- # @param [Integer] n
205
+ # @param [Integer, Range<Integer>] n
206
206
  # The desired length of the String.
207
207
  #
208
208
  # @return [String]
@@ -225,7 +225,7 @@ module Ronin
225
225
  #
226
226
  # A random alpha-numeric string.
227
227
  #
228
- # @param [Integer] n
228
+ # @param [Integer, Range<Integer>] n
229
229
  # The desired length of the String.
230
230
  #
231
231
  # @return [String]
@@ -248,7 +248,7 @@ module Ronin
248
248
  #
249
249
  # A random punctuation string.
250
250
  #
251
- # @param [Integer] n
251
+ # @param [Integer, Range<Integer>] n
252
252
  # The desired length of the String.
253
253
  #
254
254
  # @return [String]
@@ -271,7 +271,7 @@ module Ronin
271
271
  #
272
272
  # A random symbolic string.
273
273
  #
274
- # @param [Integer] n
274
+ # @param [Integer, Range<Integer>] n
275
275
  # The desired length of the String.
276
276
  #
277
277
  # @return [String]
@@ -294,7 +294,7 @@ module Ronin
294
294
  #
295
295
  # A random whitespace string.
296
296
  #
297
- # @param [Integer] n
297
+ # @param [Integer, Range<Integer>] n
298
298
  # The desired length of the String.
299
299
  #
300
300
  # @return [String]
@@ -319,7 +319,7 @@ module Ronin
319
319
  #
320
320
  # The set of printable characters, not including spaces.
321
321
  #
322
- # @param [Integer] n
322
+ # @param [Integer, Range<Integer>] n
323
323
  # The desired length of the String.
324
324
  #
325
325
  # @return [String]
@@ -342,7 +342,7 @@ module Ronin
342
342
  #
343
343
  # The set of printable characters, including spaces.
344
344
  #
345
- # @param [Integer] n
345
+ # @param [Integer, Range<Integer>] n
346
346
  # The desired length of the String.
347
347
  #
348
348
  # @return [String]
@@ -365,7 +365,7 @@ module Ronin
365
365
  #
366
366
  # A random control-character string.
367
367
  #
368
- # @param [Integer] n
368
+ # @param [Integer, Range<Integer>] n
369
369
  # The desired length of the String.
370
370
  #
371
371
  # @return [String]
@@ -388,7 +388,7 @@ module Ronin
388
388
  #
389
389
  # The signed ASCII character set.
390
390
  #
391
- # @param [Integer] n
391
+ # @param [Integer, Range<Integer>] n
392
392
  # The desired length of the String.
393
393
  #
394
394
  # @return [String]
@@ -411,7 +411,7 @@ module Ronin
411
411
  #
412
412
  # A random ASCII string.
413
413
  #
414
- # @param [Integer] n
414
+ # @param [Integer, Range<Integer>] n
415
415
  # The desired length of the String.
416
416
  #
417
417
  # @return [String]