ctf-party 1.0.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +2 -1
- data/bin/ctf_party_console +0 -0
- data/lib/ctf_party.rb +2 -0
- data/lib/ctf_party/base64.rb +6 -13
- data/lib/ctf_party/case.rb +35 -0
- data/lib/ctf_party/digest.rb +12 -10
- data/lib/ctf_party/flag.rb +1 -5
- data/lib/ctf_party/hex.rb +212 -0
- data/lib/ctf_party/rot.rb +2 -2
- data/lib/ctf_party/version.rb +1 -1
- metadata +28 -73
- data/.rubocop.yml +0 -29
- data/.yardopts +0 -4
- data/.yardopts-dev +0 -6
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -52
- data/README.md +0 -57
- data/Rakefile +0 -11
- data/bin/ctf_party_setup +0 -6
- data/docs/.nojekyll +0 -0
- data/docs/About.md +0 -5
- data/docs/CHANGELOG.md +0 -5
- data/docs/README.md +0 -52
- data/docs/_coverpage.md +0 -10
- data/docs/_media/logo.png +0 -0
- data/docs/_navbar.md +0 -3
- data/docs/_sidebar.md +0 -13
- data/docs/index.html +0 -31
- data/docs/pages/documentation.md +0 -30
- data/docs/pages/install.md +0 -84
- data/docs/pages/publishing.md +0 -39
- data/docs/pages/quick-start.md +0 -23
- data/docs/pages/usage.md +0 -61
- data/docs/vendor/docsify.js +0 -1
- data/docs/vendor/plugins/emoji.min.js +0 -1
- data/docs/vendor/plugins/search.min.js +0 -1
- data/docs/vendor/prismjs/components/prism-ruby.min.js +0 -1
- data/docs/vendor/themes/vue.css +0 -1
- data/docs/yard/String.html +0 -2909
- data/docs/yard/Version.html +0 -121
- data/docs/yard/_index.html +0 -123
- data/docs/yard/class_list.html +0 -51
- data/docs/yard/css/common.css +0 -1
- data/docs/yard/css/full_list.css +0 -58
- data/docs/yard/css/style.css +0 -496
- data/docs/yard/file.LICENSE.html +0 -70
- data/docs/yard/file.README.html +0 -124
- data/docs/yard/file_list.html +0 -61
- data/docs/yard/frames.html +0 -17
- data/docs/yard/index.html +0 -124
- data/docs/yard/js/app.js +0 -303
- data/docs/yard/js/full_list.js +0 -216
- data/docs/yard/js/jquery.js +0 -4
- data/docs/yard/method_list.html +0 -275
- data/docs/yard/top-level-namespace.html +0 -112
- data/test/test_string.rb +0 -134
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1bc032bfe7236e135eccd26e75a67d6b178b2486b1610741017d61e6cd78c16
|
4
|
+
data.tar.gz: 40ec92a25213dc22154190cf2e726ad87ce693e9f2e283c7b544c1e378634869
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d2fb3942843aafde1c157ec4ee598cdfdb9970a178f66fb291964d3f5e867838c94683068ab4a8e6bc02318e3e56336f3832315f7e0a8e01581649354cd7840
|
7
|
+
data.tar.gz: 91709a253527bec78f79cb45c5bf0611f09262dc0c25beacb0a153c534f4f4042e18977a3c020f961c7786551017a056b423114f72ee2ba7a794c09d8f5378ed
|
data/LICENSE.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2020-2020 Alexandre ZANNI
|
4
|
+
Copyright (c) 2019-2020 Alexandre ZANNI at Orange Cyberdefense
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
7
|
of this software and associated documentation files (the "Software"), to deal
|
data/bin/ctf_party_console
CHANGED
File without changes
|
data/lib/ctf_party.rb
CHANGED
data/lib/ctf_party/base64.rb
CHANGED
@@ -27,11 +27,7 @@ class String
|
|
27
27
|
# myStr.to_b64! # => nil
|
28
28
|
# myStr # => "UnVieQ=="
|
29
29
|
def to_b64!(opts = {})
|
30
|
-
opts
|
31
|
-
replace(to_b64) if opts[:mode] == :strict ||
|
32
|
-
opts[:mode] == :rfc4648
|
33
|
-
replace(to_b64(mode: :rfc2045)) if opts[:mode] == :rfc2045
|
34
|
-
replace(to_b64(mode: :urlsafe)) if opts[:mode] == :urlsafe
|
30
|
+
replace(to_b64(opts))
|
35
31
|
end
|
36
32
|
|
37
33
|
# Decode the string from base64
|
@@ -57,11 +53,7 @@ class String
|
|
57
53
|
# a.from_b64! # => nil
|
58
54
|
# a # => "Hello world!"
|
59
55
|
def from_b64!(opts = {})
|
60
|
-
opts
|
61
|
-
replace(from_b64) if opts[:mode] == :strict ||
|
62
|
-
opts[:mode] == :rfc4648
|
63
|
-
replace(from_b64(mode: :rfc2045)) if opts[:mode] == :rfc2045
|
64
|
-
replace(from_b64(mode: :urlsafe)) if opts[:mode] == :urlsafe
|
56
|
+
replace(from_b64(opts))
|
65
57
|
end
|
66
58
|
|
67
59
|
# Is the string encoded in base64?
|
@@ -82,14 +74,15 @@ class String
|
|
82
74
|
(?:[a-zA-Z0-9+/]{2}==)|(?:[a-zA-Z0-9+/]{1}===))\Z}xn
|
83
75
|
reg3 = /\A(?:[a-zA-Z0-9\-_]{4})*(?:|(?:[a-zA-Z0-9\-_]{3}=)|
|
84
76
|
(?:[a-zA-Z0-9\-_]{2}==)|(?:[a-zA-Z0-9\-_]{1}===))\Z/xn
|
85
|
-
|
77
|
+
case opts[:mode]
|
78
|
+
when :strict, :rfc4648
|
86
79
|
b64 = true if reg1.match?(self)
|
87
|
-
|
80
|
+
when :rfc2045
|
88
81
|
b64 = true
|
89
82
|
split("\n").each do |s|
|
90
83
|
b64 = false unless reg1.match?(s)
|
91
84
|
end
|
92
|
-
|
85
|
+
when :urlsafe
|
93
86
|
b64 = true if reg3.match?(self)
|
94
87
|
else
|
95
88
|
raise ArgumentError 'Wrong mode'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class String
|
4
|
+
# Change the case of characters randomly
|
5
|
+
# @return [String] the case modified string
|
6
|
+
# @example
|
7
|
+
# 'SELECT * FROM'.randomcase # => "SElECt * frOm"
|
8
|
+
# 'SELECT * FROM'.randomcase # => "selECT * FROm"
|
9
|
+
def randomcase
|
10
|
+
chars.map { |c| rand(0..1).zero? ? c.downcase : c.upcase }.join
|
11
|
+
end
|
12
|
+
|
13
|
+
# Change the case of characters randomly in place as described for
|
14
|
+
# {String#randomcase}.
|
15
|
+
def randomcase!
|
16
|
+
replace(randomcase)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Change one characte on two upcase and the other downcase
|
20
|
+
# @param shift [Integer] 0: 1st character will be downcase, 1: 1st character
|
21
|
+
# will be upcase
|
22
|
+
# @return [String] the case modified string
|
23
|
+
# @example
|
24
|
+
# 'SELECT * FROM'.alternatecase # => "sElEcT * FrOm"
|
25
|
+
# 'SELECT * FROM'.alternatecase(1) # => "SeLeCt * fRoM"
|
26
|
+
def alternatecase(shift = 0)
|
27
|
+
chars.each_with_index.map { |c, i| (i + shift).even? ? c.downcase : c.upcase }.join
|
28
|
+
end
|
29
|
+
|
30
|
+
# Change one characte on two upcase and the other downcase in place as
|
31
|
+
# described for {String#alternatecase}.
|
32
|
+
def alternatecase!(shift = 0)
|
33
|
+
replace(alternatecase(shift))
|
34
|
+
end
|
35
|
+
end
|
data/lib/ctf_party/digest.rb
CHANGED
@@ -13,7 +13,7 @@ class String
|
|
13
13
|
Digest::MD5.hexdigest self
|
14
14
|
end
|
15
15
|
|
16
|
-
# Calculate the md5 hash of the string in place as described for {#md5}.
|
16
|
+
# Calculate the md5 hash of the string in place as described for {String#md5}.
|
17
17
|
# @example
|
18
18
|
# a = '\o/' # => "\\o/"
|
19
19
|
# a.md5! # => "881419964e480e66162da521ccc25ebf"
|
@@ -31,7 +31,8 @@ class String
|
|
31
31
|
Digest::SHA1.hexdigest self
|
32
32
|
end
|
33
33
|
|
34
|
-
# Calculate the sha1 hash of the string in place as described for
|
34
|
+
# Calculate the sha1 hash of the string in place as described for
|
35
|
+
# {String#sha1}.
|
35
36
|
# @example
|
36
37
|
# bob = 'alice' # => "alice"
|
37
38
|
# bob.sha1! # => "522b276a356bdf39013dfabea2cd43e141ecc9e8"
|
@@ -55,7 +56,8 @@ class String
|
|
55
56
|
Digest::SHA2.new(opts[:bitlen]).hexdigest self
|
56
57
|
end
|
57
58
|
|
58
|
-
# Calculate the sha2 hash of the string in place as described for
|
59
|
+
# Calculate the sha2 hash of the string in place as described for
|
60
|
+
# {String#sha2}.
|
59
61
|
# @example
|
60
62
|
# th = 'try harder' # => "try harder"
|
61
63
|
# th.sha2!(bitlen: 384) # => "bb7f60b9562a19c3a83c23791440af11591c42ede9..."
|
@@ -64,32 +66,32 @@ class String
|
|
64
66
|
replace(sha2(opts))
|
65
67
|
end
|
66
68
|
|
67
|
-
# Alias for {#sha2} with default value ( +sha2(bitlen: 256)+ ).
|
69
|
+
# Alias for {String#sha2} with default value ( +sha2(bitlen: 256)+ ).
|
68
70
|
def sha2_256
|
69
71
|
sha2
|
70
72
|
end
|
71
73
|
|
72
|
-
# Alias for {#sha2!} with default value ( +sha2!(bitlen: 256)+ ).
|
74
|
+
# Alias for {String#sha2!} with default value ( +sha2!(bitlen: 256)+ ).
|
73
75
|
def sha2_256!
|
74
76
|
replace(sha2)
|
75
77
|
end
|
76
78
|
|
77
|
-
# Alias for {#sha2} with default value ( +sha2(bitlen: 384)+ ).
|
79
|
+
# Alias for {String#sha2} with default value ( +sha2(bitlen: 384)+ ).
|
78
80
|
def sha2_384
|
79
81
|
sha2(bitlen: 384)
|
80
82
|
end
|
81
83
|
|
82
|
-
# Alias for {#sha2!} with default value ( +sha2!(bitlen: 384)+ ).
|
84
|
+
# Alias for {String#sha2!} with default value ( +sha2!(bitlen: 384)+ ).
|
83
85
|
def sha2_384!
|
84
86
|
replace(sha2(bitlen: 384))
|
85
87
|
end
|
86
88
|
|
87
|
-
# Alias for {#sha2} with default value ( +sha2(bitlen: 512)+ ).
|
89
|
+
# Alias for {String#sha2} with default value ( +sha2(bitlen: 512)+ ).
|
88
90
|
def sha2_512
|
89
91
|
sha2(bitlen: 512)
|
90
92
|
end
|
91
93
|
|
92
|
-
# Alias for {#sha2!} with default value ( +sha2!(bitlen: 512)+ ).
|
94
|
+
# Alias for {String#sha2!} with default value ( +sha2!(bitlen: 512)+ ).
|
93
95
|
def sha2_512!
|
94
96
|
replace(sha2(bitlen: 512))
|
95
97
|
end
|
@@ -104,7 +106,7 @@ class String
|
|
104
106
|
end
|
105
107
|
|
106
108
|
# Calculate the RIPEMD-160 hash of the string in place as described for
|
107
|
-
# {#rmd160}.
|
109
|
+
# {String#rmd160}.
|
108
110
|
# @example
|
109
111
|
# pl = 'payload' # => "payload"
|
110
112
|
# pl.rmd160! # => "3c6255c112d409dafdb84d5b0edba98dfd27b44f"
|
data/lib/ctf_party/flag.rb
CHANGED
@@ -16,8 +16,6 @@ class String
|
|
16
16
|
@@flag
|
17
17
|
end
|
18
18
|
|
19
|
-
# rubocop:disable Metrics/LineLength
|
20
|
-
|
21
19
|
# Update the flag configuration.
|
22
20
|
# @param hash [Hash] flag configuration
|
23
21
|
# @option hash [String] :prefix prefix of the flag. Default: none.
|
@@ -40,8 +38,6 @@ class String
|
|
40
38
|
@@flag.merge!(hash)
|
41
39
|
end
|
42
40
|
|
43
|
-
# rubocop:enable Metrics/LineLength
|
44
|
-
|
45
41
|
# Format the current string into the configured flag format. See {.flag=}
|
46
42
|
# example.
|
47
43
|
# @return [String] the format flag.
|
@@ -72,7 +68,7 @@ class String
|
|
72
68
|
end
|
73
69
|
|
74
70
|
# Format the current string into the configured flag format in place as
|
75
|
-
# described for {#flag}.
|
71
|
+
# described for {String#flag}.
|
76
72
|
def flag!
|
77
73
|
replace(flag)
|
78
74
|
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class String
|
4
|
+
# Encode an hexadecimal string to a decimal string
|
5
|
+
# @param opts [Hash] optional parameters
|
6
|
+
# @option opts [String] :prefix Prefix of the input. Default value is a void
|
7
|
+
# string. Example of values: +0x+, +\x+.
|
8
|
+
# @return [String] the decimal encoded string
|
9
|
+
# @example
|
10
|
+
# 'ff'.hex2dec # => "255"
|
11
|
+
# '\xf3'.hex2dec(prefix: '\x') # => "243"
|
12
|
+
def hex2dec(opts = {})
|
13
|
+
opts[:prefix] ||= ''
|
14
|
+
# remove prefix
|
15
|
+
out = sub(opts[:prefix], '')
|
16
|
+
# convert
|
17
|
+
return out.hex.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
# Encode an hexadecimal string to a decimal string in place as described
|
21
|
+
# for {String#hex2dec}.
|
22
|
+
# @example
|
23
|
+
# a = 'ff'
|
24
|
+
# a.hex2dec!
|
25
|
+
# a # => "255"
|
26
|
+
def hex2dec!(opts = {})
|
27
|
+
replace(hex2dec(opts))
|
28
|
+
end
|
29
|
+
|
30
|
+
# Encode an decimal string to a hexadecimal string
|
31
|
+
# @param opts [Hash] optional parameters
|
32
|
+
# @option opts [String] :prefix Prefix of the output. Default value is a void
|
33
|
+
# string. Example of values: +0x+, +\x+.
|
34
|
+
# @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
|
35
|
+
# Other valid value +:upper+.
|
36
|
+
# @return [String] the hexadecimal encoded string
|
37
|
+
# @example
|
38
|
+
# '255'.dec2hex # => "ff"
|
39
|
+
# '255'.dec2hex({prefix: '0x', case: :upper}) # => "0xFF"
|
40
|
+
def dec2hex(opts = {})
|
41
|
+
opts[:prefix] ||= ''
|
42
|
+
opts[:case] ||= :lower
|
43
|
+
# convert
|
44
|
+
out = to_i.to_s(16)
|
45
|
+
# char case management
|
46
|
+
out = out.upcase if opts[:case] == :upper
|
47
|
+
# adding prefix must be done after case change
|
48
|
+
return opts[:prefix] + out
|
49
|
+
end
|
50
|
+
|
51
|
+
# Encode an decimal string to a hexadecimal string in place as described
|
52
|
+
# for {String#dec2hex}.
|
53
|
+
# @example
|
54
|
+
# a = '255'
|
55
|
+
# a.dec2hex!
|
56
|
+
# a # => "ff"
|
57
|
+
def dec2hex!(opts = {})
|
58
|
+
replace(dec2hex(opts))
|
59
|
+
end
|
60
|
+
|
61
|
+
# Encode a string into hexadecimal
|
62
|
+
# @param opts [Hash] optional parameters
|
63
|
+
# @option opts [String] :prefix Prefix of the output. Default value is a void
|
64
|
+
# string. Example of values: +0x+, +\x+.
|
65
|
+
# @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
|
66
|
+
# Other valid value +:upper+.
|
67
|
+
# @option opts [Symbol] :nibble Display output with high nibble first
|
68
|
+
# (+:high+ default) or low nibble first (+:low+).
|
69
|
+
# @return [String] the hexadecimal encoded string
|
70
|
+
# @example
|
71
|
+
# 'noraj'.to_hex # => "6e6f72616a"
|
72
|
+
# 'noraj'.to_hex(prefix: '0x') # => "0x6e6f72616a"
|
73
|
+
# 'noraj'.to_hex(case: :upper) # => "6E6F72616A"
|
74
|
+
# 'noraj'.to_hex(nibble: :low) # => "e6f62716a6"
|
75
|
+
def to_hex(opts = {})
|
76
|
+
opts[:prefix] ||= ''
|
77
|
+
opts[:case] ||= :lower
|
78
|
+
opts[:nibble] ||= :high
|
79
|
+
# convert
|
80
|
+
out = ''
|
81
|
+
case opts[:nibble]
|
82
|
+
when :high
|
83
|
+
out = unpack1('H*')
|
84
|
+
when :low
|
85
|
+
out = unpack1('h*')
|
86
|
+
end
|
87
|
+
# char case management
|
88
|
+
out = out.upcase if opts[:case] == :upper
|
89
|
+
# adding prefix must be done after case change
|
90
|
+
return opts[:prefix] + out
|
91
|
+
end
|
92
|
+
|
93
|
+
# Alias for {String#to_hex}.
|
94
|
+
def str2hex(opts = {})
|
95
|
+
to_hex(opts)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Encode a string into hexadecimal in place as described
|
99
|
+
# for {String#to_hex}.
|
100
|
+
# @example
|
101
|
+
# a = 'noraj'
|
102
|
+
# a.to_hex!
|
103
|
+
# a # => "6e6f72616a"
|
104
|
+
def to_hex!(opts = {})
|
105
|
+
replace(to_hex(opts))
|
106
|
+
end
|
107
|
+
|
108
|
+
# Alias for {String#to_hex!}.
|
109
|
+
def str2hex!(opts = {})
|
110
|
+
to_hex!(opts)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Decode a hexadecimal string
|
114
|
+
# @param opts [Hash] optional parameters
|
115
|
+
# @option opts [String] :prefix Prefix of the input. Default value is a void
|
116
|
+
# string. Example of values: +0x+, +\x+.
|
117
|
+
# @option opts [Symbol] :nibble Display input with high nibble first
|
118
|
+
# (+:high+ default) or low nibble first (+:low+).
|
119
|
+
# @return [String] the hexadecimal decoded string
|
120
|
+
# @example
|
121
|
+
# "6e6f72616a".from_hex # => "noraj"
|
122
|
+
# "0x6e6f72616a".from_hex(prefix: '0x') # => "noraj"
|
123
|
+
# "e6f62716a6".from_hex(nibble: :low) # => "noraj"
|
124
|
+
def from_hex(opts = {})
|
125
|
+
opts[:prefix] ||= ''
|
126
|
+
opts[:nibble] ||= :high
|
127
|
+
# remove prefix
|
128
|
+
out = sub(opts[:prefix], '')
|
129
|
+
# convert
|
130
|
+
return Array(out).pack('H*') if opts[:nibble] == :high
|
131
|
+
return Array(out).pack('h*') if opts[:nibble] == :low
|
132
|
+
|
133
|
+
raise ArgumentError ':nibble expects :high or :low'
|
134
|
+
end
|
135
|
+
|
136
|
+
# Alias for {String#from_hex}.
|
137
|
+
def hex2str(opts = {})
|
138
|
+
from_hex(opts)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Decode a hexadecimal string in place as described
|
142
|
+
# for {String#from_hex}.
|
143
|
+
# @example
|
144
|
+
# a = "6e6f72616a"
|
145
|
+
# a.from_hex!
|
146
|
+
# a # => "noraj"
|
147
|
+
def from_hex!(opts = {})
|
148
|
+
replace(from_hex(opts))
|
149
|
+
end
|
150
|
+
|
151
|
+
# Alias for {String#from_hex!}.
|
152
|
+
def hex2str!(opts = {})
|
153
|
+
from_hex!(opts)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Encode an hexadecimal string to a binary string
|
157
|
+
# @param opts [Hash] optional parameters
|
158
|
+
# @option opts [String] :prefix Prefix of the input. Default value is a void
|
159
|
+
# string. Example of values: +0x+, +\x+.
|
160
|
+
# @return [String] the binary encoded string
|
161
|
+
# @example
|
162
|
+
# 'ab'.hex2bin # => "10101011"
|
163
|
+
# '\xf3'.hex2bin(prefix: '\x') # => "11110011"
|
164
|
+
def hex2bin(opts = {})
|
165
|
+
opts[:prefix] ||= ''
|
166
|
+
# remove prefix
|
167
|
+
out = sub(opts[:prefix], '')
|
168
|
+
# convert
|
169
|
+
return out.to_i(16).to_s(2)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Encode an hexadecimal string to a binary string in place as described
|
173
|
+
# for {String#hex2bin}.
|
174
|
+
# @example
|
175
|
+
# a = 'ff'
|
176
|
+
# a.hex2bin!
|
177
|
+
# a # => => "11111111"
|
178
|
+
def hex2bin!(opts = {})
|
179
|
+
replace(hex2bin(opts))
|
180
|
+
end
|
181
|
+
|
182
|
+
# Encode an binary string to a hexadecimal string
|
183
|
+
# @param opts [Hash] optional parameters
|
184
|
+
# @option opts [String] :prefix Prefix of the output. Default value is a void
|
185
|
+
# string. Example of values: +0x+, +\x+.
|
186
|
+
# @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
|
187
|
+
# Other valid value +:upper+.
|
188
|
+
# @return [String] the hexadecimal encoded string
|
189
|
+
# @example
|
190
|
+
# '11110011'.bin2hex # => "f3"
|
191
|
+
# '11110011'.bin2hex({prefix: '0x', case: :upper}) # => "0xF3"
|
192
|
+
def bin2hex(opts = {})
|
193
|
+
opts[:prefix] ||= ''
|
194
|
+
opts[:case] ||= :lower
|
195
|
+
# convert
|
196
|
+
out = to_i(2).to_s(16)
|
197
|
+
# char case management
|
198
|
+
out = out.upcase if opts[:case] == :upper
|
199
|
+
# adding prefix must be done after case change
|
200
|
+
return opts[:prefix] + out
|
201
|
+
end
|
202
|
+
|
203
|
+
# Encode an binary string to a hexadecimal string in place as described
|
204
|
+
# for {String#bin2hex}.
|
205
|
+
# @example
|
206
|
+
# a = '11110011'
|
207
|
+
# a.bin2hex!
|
208
|
+
# a # => "f3"
|
209
|
+
def bin2hex!(opts = {})
|
210
|
+
replace(bin2hex(opts))
|
211
|
+
end
|
212
|
+
end
|
data/lib/ctf_party/rot.rb
CHANGED
@@ -35,12 +35,12 @@ class String
|
|
35
35
|
replace(rot(opts))
|
36
36
|
end
|
37
37
|
|
38
|
-
# Alias for {#rot} with default value ( +rot(shift: 13)+ ).
|
38
|
+
# Alias for {String#rot} with default value ( +rot(shift: 13)+ ).
|
39
39
|
def rot13
|
40
40
|
rot
|
41
41
|
end
|
42
42
|
|
43
|
-
# Alias for {#rot!} with default value ( +rot!(shift: 13)+ ).
|
43
|
+
# Alias for {String#rot!} with default value ( +rot!(shift: 13)+ ).
|
44
44
|
def rot13!
|
45
45
|
rot!
|
46
46
|
end
|
data/lib/ctf_party/version.rb
CHANGED