ciphr 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e70f6b9ae3a9a53aa202128b800df0272bc0f9d0
4
+ data.tar.gz: 750425aee3a673a2f97cfc17e4a50332f45cdf43
5
+ SHA512:
6
+ metadata.gz: 612d14a6513c7656311c132cb6b58a8babfd0bbc9bd81958daa4d40e9dd8adfd504df37c6e2fe919fd6f6455f9109afb1dba5d1d32503c11d3aa8ad9c8f18eca
7
+ data.tar.gz: 6dc7c4137ce5b4adf216f4b808f25b16825eddad0a6b3944179fed4c899680ae52d1532991ab51388ebdcf27c6f0468032a9e335e9ff061ecede2d84c5b27dcf
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ciphr.gemspec
4
+ gemspec
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ciphr (0.0.1)
5
+ base32 (~> 0.3.2)
6
+ parslet (~> 1.5.0)
7
+ slop (~> 3.6.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ base32 (0.3.2)
13
+ blankslate (2.1.2.4)
14
+ diff-lcs (1.2.5)
15
+ parslet (1.5.0)
16
+ blankslate (~> 2.0)
17
+ rake (10.5.0)
18
+ rspec (3.4.0)
19
+ rspec-core (~> 3.4.0)
20
+ rspec-expectations (~> 3.4.0)
21
+ rspec-mocks (~> 3.4.0)
22
+ rspec-core (3.4.2)
23
+ rspec-support (~> 3.4.0)
24
+ rspec-expectations (3.4.0)
25
+ diff-lcs (>= 1.2.0, < 2.0)
26
+ rspec-support (~> 3.4.0)
27
+ rspec-mocks (3.4.1)
28
+ diff-lcs (>= 1.2.0, < 2.0)
29
+ rspec-support (~> 3.4.0)
30
+ rspec-support (3.4.1)
31
+ slop (3.6.0)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ bundler (~> 1.3)
38
+ ciphr!
39
+ rake (~> 10.5.0)
40
+ rspec (~> 3.4.0)
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Chris Frohoff
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,316 @@
1
+ # Ciphr
2
+
3
+ Ciphr is a CLI tool for performing and composing encoding, decoding, encryption,
4
+ decryption, hashing, and other various operations on streams of data. It takes
5
+ provided data, file data, or data from stdin, and executes a pipeline of
6
+ functions on the data stream, writing the resulting data to stdout. It was
7
+ designed primarily for use in the information security domain, mostly for quick
8
+ or casual data manipulation for forensics, penetration testing, or
9
+ capture-the-flag events; it likely could have other unforseen uses, but should
10
+ be presumed to be an experimental toy as no effort was made to make included
11
+ cryptographic functions robust against attacks (timing attacks, etc), and it is
12
+ recommended not to use any included functions in any on-line security
13
+ mechanisms.
14
+
15
+ ## Examples
16
+
17
+ ```console
18
+ $ ciphr '"abc"'
19
+ abc
20
+ $ ciphr '"abc"' hex
21
+ 616263
22
+ $ ciphr '"abc"' hex ~hex
23
+ abc
24
+ $ ciphr '"616263"' ~hex
25
+ abc
26
+ $ ciphr 0x616263
27
+ abc
28
+ $ ciphr 0x616263 hex
29
+ 616263
30
+ $ ciphr 0b10101010 bin
31
+ 10101010
32
+ $ ciphr 0b10101010 hex
33
+ aa
34
+ $ ciphr 255 hex
35
+ ff
36
+ $ ciphr 65
37
+ A
38
+ $ ciphr '""' md5 hex
39
+ d41d8cd98f00b204e9800998ecf8427e
40
+ $ echo -n "" | ciphr md5 hex
41
+ d41d8cd98f00b204e9800998ecf8427e
42
+ $ ciphr '"abc"' sha1 hex
43
+ a9993e364706816aba3e25717850c26c9cd0d89d
44
+ $ echo -n "abc" | ciphr sha1 | xxd -ps
45
+ a9993e364706816aba3e25717850c26c9cd0d89d
46
+ $ echo -n "abc" | ciphr 'xor["abc"] hex'
47
+ 000000
48
+ $ echo -n "abc" | ciphr xor[0x01] hex
49
+ 606362
50
+ $ echo -n "abc" | ciphr xor[0x01]
51
+ `cb
52
+ $ echo -n "abc" | ciphr xor[0x020304]
53
+ cag
54
+ $ echo -n "abc" | ciphr 'aes128cbc["super secret key"] hex'
55
+ 1e98110410ea0aa59a31ddc462d720d07e1e01268e405ee9fba29b3f91752e0c
56
+ $ echo -n "abc" | ciphr 'aes128cbc["super secret key"] hex ~hex ~aes128cbc["super secret key"]'
57
+ abc
58
+ $ ciphr @/etc/hosts
59
+ 127.0.0.1 localhost
60
+ $ ciphr @/etc/hosts md5 hex
61
+ 8f4491642052129e98cc211b4f32d9c5
62
+ $ ciphr @/etc/hosts xor[0x01]
63
+ 036/1/1/mnb`minru
64
+ $ ciphr @/etc/hosts aes-128-cbc[@/etc/hosts] hex
65
+ 3033c8627781ae2152d0b25f1acd3397161d5e8462164716539502ad908163e13eec1a73ee03ba89a877ac49fd04d7a3
66
+ $ ciphr @/etc/hosts aes-128-cbc[@/etc/hosts] ~aes-128-cbc[@/etc/hosts]
67
+ 127.0.0.1 localhost
68
+ $ ciphr @/etc/hosts aes-128-cbc[0xdeadbeefdeadbeefdeadbeefdeadbeef] hex
69
+ 92638d3f10a303938b48bd4a108744ed4216c99b005ddc19cce752af53ef089be1e43a446fda55c4e76036f31612459f
70
+ $ ciphr @/etc/hosts aes-128-cbc[0xdeadbeefdeadbeefdeadbeefdeadbeef] ~aes-128-cbc[0xdeadbeefdeadbeefdeadbeefdeadbeef]
71
+ 127.0.0.1 localhost
72
+ ```
73
+
74
+ ## Installation
75
+
76
+ Must be cloned and installed until it gets into rubygems.org after being cleaned
77
+ up
78
+
79
+ Requires bundler to be installed (`gem install bundler`)
80
+
81
+ ```shell
82
+ git clone https://github.com/frohoff/ciphr.git
83
+ cd ciphr
84
+ bundle install
85
+ bundle exec rake install
86
+ ```
87
+
88
+ ## Usage
89
+
90
+ ```shell
91
+ $ ciphr -v -h
92
+ Usage: ciphr [options] [spec]
93
+ -h, --help
94
+ -v, --verbose
95
+ -n, --no-newline
96
+ -N, --newline
97
+ -x, --xargs-mode
98
+ -0, --null
99
+ Available Functions: aliases ([args])
100
+ md4 (input)
101
+ md5 (input)
102
+ sha (input)
103
+ sha1 (input)
104
+ sha224 (input)
105
+ sha256 (input)
106
+ sha384 (input)
107
+ sha512 (input)
108
+ hmac-md4, hmacmd4 (input, key)
109
+ hmac-md5, hmacmd5 (input, key)
110
+ hmac-sha, hmacsha (input, key)
111
+ hmac-sha1, hmacsha1 (input, key)
112
+ hmac-sha224, hmacsha224 (input, key)
113
+ hmac-sha256, hmacsha256 (input, key)
114
+ hmac-sha384, hmacsha384 (input, key)
115
+ hmac-sha512, hmacsha512 (input, key)
116
+ aes-128-cbc, aes128cbc (input, key)
117
+ aes-128-cbc-hmac-sha1, aes128cbchmacsha1 (input, key)
118
+ aes-128-cbc-hmac-sha256, aes128cbchmacsha256 (input, key)
119
+ aes-128-cfb, aes128cfb (input, key)
120
+ aes-128-cfb1, aes128cfb1 (input, key)
121
+ aes-128-cfb8, aes128cfb8 (input, key)
122
+ aes-128-ctr, aes128ctr (input, key)
123
+ aes-128-ecb, aes128ecb (input, key)
124
+ aes-128-ofb, aes128ofb (input, key)
125
+ aes-128-xts, aes128xts (input, key)
126
+ aes-192-cbc, aes192cbc (input, key)
127
+ aes-192-cfb, aes192cfb (input, key)
128
+ aes-192-cfb1, aes192cfb1 (input, key)
129
+ aes-192-cfb8, aes192cfb8 (input, key)
130
+ aes-192-ctr, aes192ctr (input, key)
131
+ aes-192-ecb, aes192ecb (input, key)
132
+ aes-192-ofb, aes192ofb (input, key)
133
+ aes-256-cbc, aes256cbc (input, key)
134
+ aes-256-cbc-hmac-sha1, aes256cbchmacsha1 (input, key)
135
+ aes-256-cbc-hmac-sha256, aes256cbchmacsha256 (input, key)
136
+ aes-256-cfb, aes256cfb (input, key)
137
+ aes-256-cfb1, aes256cfb1 (input, key)
138
+ aes-256-cfb8, aes256cfb8 (input, key)
139
+ aes-256-ctr, aes256ctr (input, key)
140
+ aes-256-ecb, aes256ecb (input, key)
141
+ aes-256-ofb, aes256ofb (input, key)
142
+ aes-256-xts, aes256xts (input, key)
143
+ aes128 (input, key)
144
+ aes192 (input, key)
145
+ aes256 (input, key)
146
+ bf (input, key)
147
+ bf-cbc, bfcbc (input, key)
148
+ bf-cfb, bfcfb (input, key)
149
+ bf-ecb, bfecb (input, key)
150
+ bf-ofb, bfofb (input, key)
151
+ camellia-128-cbc, camellia128cbc (input, key)
152
+ camellia-128-cfb, camellia128cfb (input, key)
153
+ camellia-128-cfb1, camellia128cfb1 (input, key)
154
+ camellia-128-cfb8, camellia128cfb8 (input, key)
155
+ camellia-128-ecb, camellia128ecb (input, key)
156
+ camellia-128-ofb, camellia128ofb (input, key)
157
+ camellia-192-cbc, camellia192cbc (input, key)
158
+ camellia-192-cfb, camellia192cfb (input, key)
159
+ camellia-192-cfb1, camellia192cfb1 (input, key)
160
+ camellia-192-cfb8, camellia192cfb8 (input, key)
161
+ camellia-192-ecb, camellia192ecb (input, key)
162
+ camellia-192-ofb, camellia192ofb (input, key)
163
+ camellia-256-cbc, camellia256cbc (input, key)
164
+ camellia-256-cfb, camellia256cfb (input, key)
165
+ camellia-256-cfb1, camellia256cfb1 (input, key)
166
+ camellia-256-cfb8, camellia256cfb8 (input, key)
167
+ camellia-256-ecb, camellia256ecb (input, key)
168
+ camellia-256-ofb, camellia256ofb (input, key)
169
+ camellia128 (input, key)
170
+ camellia192 (input, key)
171
+ camellia256 (input, key)
172
+ cast (input, key)
173
+ cast-cbc, castcbc (input, key)
174
+ cast5-cbc, cast5cbc (input, key)
175
+ cast5-cfb, cast5cfb (input, key)
176
+ cast5-ecb, cast5ecb (input, key)
177
+ cast5-ofb, cast5ofb (input, key)
178
+ des (input, key)
179
+ des-cbc, descbc (input, key)
180
+ des-cfb, descfb (input, key)
181
+ des-cfb1, descfb1 (input, key)
182
+ des-cfb8, descfb8 (input, key)
183
+ des-ecb, desecb (input, key)
184
+ des-ede, desede (input, key)
185
+ des-ede-cbc, desedecbc (input, key)
186
+ des-ede-cfb, desedecfb (input, key)
187
+ des-ede-ofb, desedeofb (input, key)
188
+ des-ede3, desede3 (input, key)
189
+ des-ede3-cbc, desede3cbc (input, key)
190
+ des-ede3-cfb, desede3cfb (input, key)
191
+ des-ede3-cfb1, desede3cfb1 (input, key)
192
+ des-ede3-cfb8, desede3cfb8 (input, key)
193
+ des-ede3-ofb, desede3ofb (input, key)
194
+ des-ofb, desofb (input, key)
195
+ des3 (input, key)
196
+ desx (input, key)
197
+ desx-cbc, desxcbc (input, key)
198
+ rc2 (input, key)
199
+ rc2-40-cbc, rc240cbc (input, key)
200
+ rc2-64-cbc, rc264cbc (input, key)
201
+ rc2-cbc, rc2cbc (input, key)
202
+ rc2-cfb, rc2cfb (input, key)
203
+ rc2-ecb, rc2ecb (input, key)
204
+ rc2-ofb, rc2ofb (input, key)
205
+ rc4 (input, key)
206
+ rc4-40, rc440 (input, key)
207
+ rc4-hmac-md5, rc4hmacmd5 (input, key)
208
+ seed (input, key)
209
+ seed-cbc, seedcbc (input, key)
210
+ seed-cfb, seedcfb (input, key)
211
+ seed-ecb, seedecb (input, key)
212
+ seed-ofb, seedofb (input, key)
213
+ aes-128-ccm, aes128ccm (input, key)
214
+ aes-128-gcm, aes128gcm (input, key)
215
+ aes-192-ccm, aes192ccm (input, key)
216
+ aes-192-gcm, aes192gcm (input, key)
217
+ aes-256-ccm, aes256ccm (input, key)
218
+ aes-256-gcm, aes256gcm (input, key)
219
+ blowfish (input, key)
220
+ id-aes128-ccm, idaes128ccm (input, key)
221
+ id-aes128-gcm, idaes128gcm (input, key)
222
+ id-aes128-wrap, idaes128wrap (input, key)
223
+ id-aes192-ccm, idaes192ccm (input, key)
224
+ id-aes192-gcm, idaes192gcm (input, key)
225
+ id-aes192-wrap, idaes192wrap (input, key)
226
+ id-aes256-ccm, idaes256ccm (input, key)
227
+ id-aes256-gcm, idaes256gcm (input, key)
228
+ id-aes256-wrap, idaes256wrap (input, key)
229
+ id-smime-alg-cms3deswrap, idsmimealgcms3deswrap (input, key)
230
+ b2, base2, bin, binary (input)
231
+ b8, base8, oct, octal (input)
232
+ b16, base16, hex, hexidecimal (input)
233
+ b32, base32, b32-std, base32-std (input)
234
+ b64, base64, b64-psq, b64-std, base64-psq, base64-std (input)
235
+ b64-ps, b64-utf7, base64-ps, base64-utf7 (input)
236
+ b64-ph, b64-file, base64-ph, base64-file (input)
237
+ b64-hu, b64-url, base64-hu, base64-url (input)
238
+ b64-duh, b64-yui, base64-duh, base64-yui (input)
239
+ b64-dh, b64-xml-name, base64-dh, base64-xml-name (input)
240
+ b64-uc, b64-xml-id, base64-uc, base64-xml-id (input)
241
+ b64-uh, b64-prog-id-1, base64-uh, base64-prog-id-1 (input)
242
+ b64-du, b64-prog-id-2, base64-du, base64-prog-id-2 (input)
243
+ b64-xh, b64-regex, base64-xh, base64-regex (input)
244
+ r2, rad2, radix2 (input)
245
+ r3, rad3, radix3 (input)
246
+ r4, rad4, radix4 (input)
247
+ r5, rad5, radix5 (input)
248
+ r6, rad6, radix6 (input)
249
+ r7, rad7, radix7 (input)
250
+ r8, rad8, radix8 (input)
251
+ r9, rad9, radix9 (input)
252
+ r10, rad10, radix10 (input)
253
+ r11, rad11, radix11 (input)
254
+ r12, rad12, radix12 (input)
255
+ r13, rad13, radix13 (input)
256
+ r14, rad14, radix14 (input)
257
+ r15, rad15, radix15 (input)
258
+ r16, rad16, radix16 (input)
259
+ r17, rad17, radix17 (input)
260
+ r18, rad18, radix18 (input)
261
+ r19, rad19, radix19 (input)
262
+ r20, rad20, radix20 (input)
263
+ r21, rad21, radix21 (input)
264
+ r22, rad22, radix22 (input)
265
+ r23, rad23, radix23 (input)
266
+ r24, rad24, radix24 (input)
267
+ r25, rad25, radix25 (input)
268
+ r26, rad26, radix26 (input)
269
+ r27, rad27, radix27 (input)
270
+ r28, rad28, radix28 (input)
271
+ r29, rad29, radix29 (input)
272
+ r30, rad30, radix30 (input)
273
+ r31, rad31, radix31 (input)
274
+ r32, rad32, radix32 (input)
275
+ r33, rad33, radix33 (input)
276
+ r34, rad34, radix34 (input)
277
+ r35, rad35, radix35 (input)
278
+ r36, rad36, radix36 (input)
279
+ deflate (input)
280
+ gzip, gz (input)
281
+ and-trunc (input, input)
282
+ or-trunc (input, input)
283
+ xor-trunc (input, input)
284
+ and (input, input)
285
+ or (input, input)
286
+ xor (input, input)
287
+ not (input)
288
+ url, uri, cgi (input)
289
+ cat, catenate (input)
290
+ repack (input, ch1, ch2)
291
+ tr, translate (input, ch1, ch2)
292
+ repl, replace (input, search, replace)
293
+ rc4-ruby (input, key)
294
+
295
+
296
+ ```
297
+
298
+ ## Developing
299
+ Check out code:
300
+ ```shell
301
+ git clone https://github.com/frohoff/ciphr.git
302
+ cd ciphr
303
+ ```
304
+
305
+ Run command from exploded gem/project directory:
306
+ ```shell
307
+ bundle exec ruby -Ilib bin/ciphr [args]
308
+ ```
309
+
310
+ ## Contributing
311
+
312
+ 1. Fork it
313
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
314
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
315
+ 4. Push to the branch (`git push origin my-new-feature`)
316
+ 5. Create new Pull Request
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
data/TODO ADDED
@@ -0,0 +1,320 @@
1
+ TODO:
2
+ ==========================
3
+
4
+ Document use of bash anon named pipes with @ syntax
5
+ spaces in various places in grammar (between @ and filename, spaces inside of [] and () for calls)
6
+
7
+ xor hangs with large keyfiles
8
+ Context objects, Classes method_missing delegate to singleton instance
9
+ TTY handling: default trailing newline, colors/escapes for non-printable
10
+ tr, replace functions
11
+ interleave/concat multiple streams
12
+ vararg functions
13
+ switch endianness
14
+
15
+ fix
16
+ -----------
17
+ bug in b64 decoding of HFF= => HFE=
18
+
19
+ robustness
20
+ -----------
21
+ * graceful handling of mismatched data size (key size, base64 chunks, xor)
22
+ * errors for bad function name or args
23
+ * case insensitivity for ~b16
24
+ * high level classification of functions (util, bitwise, hash, cipher, mac, etc)
25
+ * handling of optional arguments (IVs/nonces, # rounds, etc) without breaking pipe argument prepending
26
+ * escape/encode non-printable chars if outputting to tty http://blog.bogojoker.com/2009/04/check-if-your-ruby-script-is-in-a-pipe/
27
+ * description for functions in help
28
+
29
+ completeness
30
+ -----------
31
+ base64 variants
32
+ * %/url, b32, ascii85, escape-sequence (\x, String.dump), xml/html
33
+ * bitwise ops: variants for mismatched lengths?
34
+
35
+
36
+ features
37
+ ---------------
38
+ functions
39
+ bitwise ops
40
+ shift right/left (circular rotate vs fill)
41
+ not/and/or (similar to xor)
42
+ hashes
43
+ crc/adler
44
+ crypt/scrypt/bcrypt/pbkdf
45
+ ciphers
46
+ substitution: caeser/rot/dvorak/vigenère/affine/atbash/avgad/albam
47
+ physical: rotor/enigma
48
+ byte ops
49
+ prepend/append
50
+ indexed head/tail/substring
51
+ reverse bits/nibbles/bytes
52
+ repeat bytes
53
+ compression
54
+ gzip/deflate/lz*/bzip2/snappy/rle
55
+ http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv
56
+ generators
57
+ random bytes
58
+
59
+ revamp streams
60
+ http://readruby.io/io
61
+ https://github.com/javanthropus/io-like
62
+ https://github.com/javanthropus/stream
63
+ https://github.com/rubygems/rubygems/blob/master/lib/rubygems/package/digest_io.rb
64
+ https://github.com/krypt/binyo
65
+ https://gist.github.com/tlrobinson/967710
66
+ https://www.ruby-forum.com/topic/58563
67
+ https://github.com/jdleesmiller/event_state
68
+ https://github.com/slagyr/statemachine/
69
+ namespacing in case of simple name collisions
70
+ string literals
71
+ alternative quotes (a la ruby/perl/python, %q[] %Q{} qq() """ ''') http://en.wikibooks.org/wiki/Ruby_Programming/Alternate_quotes
72
+ allow \xXX escaping
73
+ extension mechanism (via other gems or simple files)
74
+ varargs for functions
75
+ non pipe statements variable writing/reading
76
+
77
+
78
+ random ideas
79
+ -------------
80
+ `strings` extraction
81
+ regex search/replace support
82
+ fn for executing shell/ruby
83
+ multi-round hash support
84
+
85
+
86
+ cleanliness
87
+ -----------
88
+ refactor variable buffering (probably will improve perf)
89
+ break up functions
90
+
91
+ goals and philosophy
92
+ ==========================
93
+ functions on streams of bytes
94
+ kiss: crypto, hashes, bitwise ops, encodings, compression, simple transforms
95
+ most complex use case: generate rails cookie from marshalled data and secret
96
+ strive for streaming impls and low memory usage even for large input documents
97
+ pull/read (vs push/write) based API
98
+ shell friendly syntax
99
+ maximum portability, no native gem deps
100
+ extensible via external gems adding functions
101
+
102
+
103
+
104
+ scratch notes
105
+ ==========================
106
+
107
+
108
+ reverse(input,chunksize=1,boundarysize=nil)
109
+ cat(input1,input2,...,inputn)
110
+
111
+ ruby -e 'puts ["c","s"].product(["i","y"]).product(["ph","f"]).product(["r","er","yr","ir"]).map{|a| a.flatten.join}'
112
+ ciphr
113
+ cipher
114
+ ciphyr
115
+ ciphir
116
+ cifr
117
+ cifer
118
+ cifyr
119
+ cifir
120
+ cyphr
121
+ cypher
122
+ cyphyr
123
+ cyphir
124
+ cyfr
125
+ cyfer
126
+ cyfyr
127
+ cyfir
128
+ siphr
129
+ sipher
130
+ siphyr
131
+ siphir
132
+ sifr
133
+ sifer
134
+ sifyr
135
+ sifir
136
+ syphr
137
+ sypher
138
+ syphyr
139
+ syphir
140
+ syfr
141
+ syfer
142
+ syfyr
143
+ syfir
144
+
145
+
146
+
147
+
148
+ Gem::Specification.find_all.to_a.select{|s| s.dependencies.any?{|d| d.name=='slop'}}.map{|s| s.name}
149
+ https://codeclimate.com/github/cloudfoundry/vmc/VMC::Plugin/source_listing.js?line_end=53&line_start=11&path=lib%2Fvmc%2Fplugin.rb
150
+ https://github.com/mmozuras/pronto
151
+ http://stackoverflow.com/questions/11827950/create-an-extensible-ruby-gem
152
+ https://bitbucket.org/ged/strelka/src/dc4b6998813161ab4c94656ce144aa36a85ab65e/lib/strelka/discovery.rb
153
+
154
+
155
+
156
+
157
+ http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices/
158
+ https://gist.github.com/rtomayko/54177
159
+
160
+
161
+
162
+
163
+ 11111111 | 11111111 | 11111111
164
+ 111 | 111 | 111 | 111 | 111 | 111 | 111 | 111
165
+
166
+ 1 2 3 4 5 6 7 8*1 2 3 4 5 6 7 8*1 2 3 4 5 6 7 8
167
+ 1 2 3*1 2 3*1 2 3*1 2 3*1 2 3*1 2 3*1 2 3*1 2 3
168
+
169
+
170
+ ~b64,hmac(abcd,~b64),b16,xor(deef,~b64)
171
+ ~des
172
+
173
+ =abcd/^hex/b64/hmac[=abcd/^b64]=/
174
+
175
+ {abcd},~hex,b64/hmac-sha1[[{abcd},b64]]
176
+
177
+ =abcd ~hex hmac[=foo] ?key
178
+
179
+ ~[],?@^#{}
180
+
181
+
182
+ 0x01
183
+
184
+
185
+
186
+ foo#bar^baz[]
187
+ foo;bar|baz()
188
+
189
+ (foo|bar)|baz
190
+
191
+ ((foo)|bar)|baz
192
+
193
+ assign var: ?varname
194
+ ref var: #varname
195
+ literal: =value
196
+ separator: " "
197
+ file reference: @filepath
198
+
199
+ % in url
200
+ used in b64: _-:!/.+=
201
+ shell ok: ~,.-_{}[]/?%#@^+=:
202
+ shell not ok: ()|!$&*\;'"<>`
203
+
204
+ sh b64
205
+ ` x
206
+ ~ x x
207
+ !
208
+ @ x x
209
+ # x x
210
+ $ x
211
+ % x x
212
+ ^ x x
213
+ & x
214
+ * x
215
+ () x
216
+ - x
217
+ _ x
218
+ = x b
219
+ + x
220
+ [] x x
221
+ {} x x
222
+ ; x
223
+ : x
224
+ ' x
225
+ " x
226
+ , x x
227
+ . x
228
+ / x
229
+ <> x
230
+ ? x x
231
+
232
+
233
+
234
+ x(a)|y(b)|z(c)
235
+
236
+
237
+
238
+ z
239
+
240
+ y c
241
+
242
+ x b
243
+
244
+ a
245
+
246
+
247
+
248
+
249
+
250
+
251
+ file
252
+ |
253
+ V
254
+ ~hex
255
+ |
256
+ V
257
+ stdin --> aes --> hex --> stdout
258
+
259
+
260
+ file1 file2
261
+ | |
262
+ V V
263
+ ~hex ~hex
264
+ | |
265
+ V V
266
+ stdin --> aes --> aes -> hex --> stdout
267
+
268
+
269
+ stdin --> md5 --> hex --> stdout
270
+
271
+
272
+ stdin --> md5 --> md5 --> ... -> md5 --> hex --> stdout
273
+
274
+
275
+
276
+
277
+ base64: read multiple loop
278
+ input.read(4) {|bytes,eof|
279
+ output.write(encode(bytes))
280
+ }
281
+
282
+ cipher: read full init, read arbitrary loop, special end
283
+ key.read() {|bytes,eof|
284
+ @bytes = bytes
285
+ }
286
+ input.read(256) {|bytes,eof|
287
+ output.write(cipher.update)
288
+ }
289
+
290
+ xor-repeat: read full init, read arbitrary loop
291
+ key.read() {|bytes,eof|}
292
+
293
+
294
+ xor-trunc: read arbitrary loop
295
+ key.read(1) && input.read(1) {
296
+
297
+ }
298
+
299
+
300
+ md5: read arbitrary loop, special end
301
+
302
+ hmac: read full init, read arbitrary loop, special end
303
+
304
+ def pump
305
+ if input.size >= 1 && key.size >= 1
306
+ output.write(input.read(1) ^ key.read(1))
307
+ end
308
+ end
309
+
310
+
311
+
312
+ IDEAS:
313
+
314
+ method_missing for arguments in function body
315
+
316
+
317
+ + for concat
318
+ * for repeat
319
+ ^ for recurse
320
+