ctf-party 1.3.3 → 1.3.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5b53f3731ce007357cb7033f6758bbb8136bd7f66deddc1d519aa246f9aee6c
4
- data.tar.gz: 5c17753bd1e9bbf34e82f639531c9fe496ca8dffc68a83b30d32cc05b5c0cc5d
3
+ metadata.gz: 588a5007de92c7e4c3fe7654f755eb9d1f9c81a738739455b3f9b89eb87ea9fa
4
+ data.tar.gz: 85bad8baf276cfa5315dc59f1804b4b21e21f46c8061d1d1bb2e5068e82167ad
5
5
  SHA512:
6
- metadata.gz: 2788b1c3b60d2f5ed5a3d05c1971e013f3c02317219368a408b0f375ce9bc3e92d9d67090ca92a39f4dfc908d8c6775d90e4a8cee91736474fd8f3b0ea9e0870
7
- data.tar.gz: eae30b24bf35a6f6a8caab27bf13f496cc262abefd3d348f7c5e58835141c0a36261162045a17d86236277a0576b64ed9670d66812e82d3536d066fad4b59807
6
+ metadata.gz: b0894030c2104ef8cd1421c8ec579e36760af961ad8782ff9ae9cab279a2ebd62dab7e19560d68b69bfabb616f5f84020735546d1470716cea0cf1e6ba6417ff
7
+ data.tar.gz: 923114873849d37ef0a3b1f5bd4a087e1a385c95e28dcd87761ecc247f51eda936ee058a977c6b25d7c35592133e40a602e89097cea68f8f36cdd61f2759d42d
data/lib/ctf_party.rb CHANGED
@@ -9,3 +9,4 @@ require 'ctf_party/hex'
9
9
  require 'ctf_party/case'
10
10
  require 'ctf_party/cgi'
11
11
  require 'ctf_party/binary'
12
+ require 'ctf_party/leet'
data/lib/ctf_party/hex.rb CHANGED
@@ -33,6 +33,8 @@ class String
33
33
  # string. Example of values: +0x+, +\x+.
34
34
  # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
35
35
  # Other valid value +:upper+.
36
+ # @option opts [Symbol] :padding Minimum size of the hexadecimal display
37
+ # (number of characters). Eg. 10 -> 0xA or 0x0A
36
38
  # @return [String] the hexadecimal encoded string
37
39
  # @example
38
40
  # '255'.dec2hex # => "ff"
@@ -40,8 +42,11 @@ class String
40
42
  def dec2hex(opts = {})
41
43
  opts[:prefix] ||= ''
42
44
  opts[:case] ||= :lower
45
+ opts[:padding] ||= 1
43
46
  # convert
44
47
  out = to_i.to_s(16)
48
+ # padding
49
+ out = ('0' * (opts[:padding] - 1)) + out if out.size < opts[:padding]
45
50
  # char case management
46
51
  out = out.upcase if opts[:case] == :upper
47
52
  # adding prefix must be done after case change
@@ -209,4 +214,63 @@ class String
209
214
  def bin2hex!(opts = {})
210
215
  replace(bin2hex(opts))
211
216
  end
217
+
218
+ # Decode a hexadecimal IP string into a dotted decimal one
219
+ # @param opts [Hash] optional parameters
220
+ # @option opts [String] :prefix Prefix of the input. Default value is a void
221
+ # string. Example of values: +0x+, +\x+.
222
+ # @option opts [Symbol] :nibble Display input with high nibble first
223
+ # (+:high+ default) or low nibble first (+:low+, used on Unix +/proc/net/tcp+).
224
+ # @return [String] the dotted decimal IP
225
+ # @example
226
+ # '0100007F'.from_hexip(nibble: :low) # => "127.0.0.1"
227
+ # '0x7f000001'.from_hexip(prefix: '0x') # => "127.0.0.1"
228
+ def from_hexip(opts = {})
229
+ opts[:prefix] ||= ''
230
+ opts[:nibble] ||= :high
231
+ # remove prefix
232
+ out = sub(opts[:prefix], '')
233
+ # convert
234
+ out = out.scan(/.{2}/).map(&:hex2dec)
235
+ out = out.reverse if opts[:nibble] == :low
236
+ out.join('.')
237
+ end
238
+
239
+ # Decode a hexadecimal IP string into a dotted decimal one in place as described
240
+ # for {String#from_hexip}.
241
+ def from_hexip!(opts = {})
242
+ replace(from_hexip(opts))
243
+ end
244
+
245
+ # Encode a dotted decimal IP into a hexadecimal one
246
+ # @param opts [Hash] optional parameters
247
+ # @option opts [String] :prefix Prefix of the output. Default value is a void
248
+ # string. Example of values: +0x+, +\x+.
249
+ # @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
250
+ # Other valid value +:upper+.
251
+ # @option opts [Symbol] :nibble Display output with high nibble first
252
+ # (+:high+ default) or low nibble first (+:low+, used on Unix +/proc/net/tcp+).
253
+ # @return [String] the hexadecimal encoded IP
254
+ # @example
255
+ # '127.0.0.1'.to_hexip # => "7f000001"
256
+ # '127.0.0.1'.to_hexip(nibble: :low) # => "0100007f"
257
+ def to_hexip(opts = {})
258
+ opts[:prefix] ||= ''
259
+ opts[:case] ||= :lower
260
+ opts[:nibble] ||= :high
261
+ # convert
262
+ out = split('.').map { |x| x.dec2hex(padding: 2) }
263
+ out = out.reverse if opts[:nibble] == :low
264
+ out = out.join
265
+ # char case management
266
+ out = out.upcase if opts[:case] == :upper
267
+ # adding prefix must be done after case change
268
+ return opts[:prefix] + out
269
+ end
270
+
271
+ # Encode a dotted decimal IP into a hexadecimal one in place as described
272
+ # for {String#to_hexip}.
273
+ def to_hexip!(opts = {})
274
+ replace(to_hexip(opts))
275
+ end
212
276
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ # Transform into leet speak (l337 5p34k)
5
+ # @example
6
+ # 'The quick brown fox jumps over the lazy dog'.leet # => "7h3 qu1ck 8r0wn f0x jump5 0v3r 7h3 14zy d06"
7
+ # 'leet speak'.leet # => "1337 5p34k"
8
+ def leet
9
+ tr = {
10
+ 'T' => '7',
11
+ 'E' => '3',
12
+ 'I' => '1',
13
+ 'L' => '1',
14
+ 'O' => '0',
15
+ 'S' => '5',
16
+ 'A' => '4',
17
+ 'G' => '6',
18
+ 'B' => '8'
19
+ }
20
+ tr.merge! tr.transform_keys(&:downcase)
21
+ gsub(/[#{tr.keys.join}]/i, **tr)
22
+ end
23
+
24
+ # Transform into leet speak (l337 5p34k) in place as described
25
+ # for {String#leet}.
26
+ def leet!
27
+ replace(leet)
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Version
4
- VERSION = '1.3.3'
4
+ VERSION = '1.3.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ctf-party
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre ZANNI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-03 00:00:00.000000000 Z
11
+ date: 2021-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-skip
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -141,6 +155,7 @@ files:
141
155
  - lib/ctf_party/digest.rb
142
156
  - lib/ctf_party/flag.rb
143
157
  - lib/ctf_party/hex.rb
158
+ - lib/ctf_party/leet.rb
144
159
  - lib/ctf_party/rot.rb
145
160
  - lib/ctf_party/version.rb
146
161
  homepage: https://noraj.github.io/ctf-party/