crypt19-rb 1.2.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.
- checksums.yaml +7 -0
- data/.travis.yml +18 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +16 -0
- data/LICENSE +44 -0
- data/README.md +54 -0
- data/Rakefile +10 -0
- data/VERSION +1 -0
- data/crypt19.gemspec +21 -0
- data/lib/crypt/blowfish-tables.rb +187 -0
- data/lib/crypt/blowfish.rb +109 -0
- data/lib/crypt/bytes-compat.rb +15 -0
- data/lib/crypt/cbc.rb +119 -0
- data/lib/crypt/gost.rb +138 -0
- data/lib/crypt/idea.rb +190 -0
- data/lib/crypt/noise.rb +92 -0
- data/lib/crypt/rc6.rb +73 -0
- data/lib/crypt/rijndael-tables.rb +115 -0
- data/lib/crypt/rijndael.rb +267 -0
- data/lib/crypt/stringxor.rb +23 -0
- data/lib/crypt/version.rb +3 -0
- data/test/blowfish_test.rb +84 -0
- data/test/gost_test.rb +69 -0
- data/test/idea_test.rb +70 -0
- data/test/rc6_test.rb +72 -0
- data/test/rijndael_test.rb +61 -0
- metadata +91 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
module Crypt
|
2
|
+
module StringXor
|
3
|
+
|
4
|
+
def ^(a_string)
|
5
|
+
a = self.unpack('C'*(self.length))
|
6
|
+
b = a_string.unpack('C'*(a_string.length))
|
7
|
+
if (b.length < a.length)
|
8
|
+
(a.length - b.length).times { b << 0 }
|
9
|
+
end
|
10
|
+
xor = ""
|
11
|
+
0.upto(a.length-1) { |pos|
|
12
|
+
x = a[pos] ^ b[pos]
|
13
|
+
xor << x.chr()
|
14
|
+
}
|
15
|
+
return(xor)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class String
|
22
|
+
include Crypt::StringXor
|
23
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'crypt/blowfish'
|
3
|
+
require 'crypt/cbc'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
class TestBlowfish < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@bf = Crypt::Blowfish.new("Who is John Galt?") # Schneier's test key
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_block_size
|
13
|
+
assert_equal(8, @bf.block_size(), "Wrong block size")
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_initialize
|
17
|
+
assert_raise(RuntimeError) {
|
18
|
+
b0 = Crypt::Blowfish.new("")
|
19
|
+
}
|
20
|
+
assert_nothing_raised() {
|
21
|
+
b1 = Crypt::Blowfish.new("1")
|
22
|
+
}
|
23
|
+
assert_nothing_raised() {
|
24
|
+
b56 = Crypt::Blowfish.new("1"*56)
|
25
|
+
}
|
26
|
+
assert_raise(RuntimeError) {
|
27
|
+
b57 = Crypt::Blowfish.new("1"*57)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_pair
|
32
|
+
bf = Crypt::Blowfish.new("Who is John Galt?")
|
33
|
+
orig_l, orig_r = [0xfedcba98, 0x76543210]
|
34
|
+
l, r = bf.encrypt_pair(orig_l, orig_r)
|
35
|
+
assert_equal(0xcc91732b, l)
|
36
|
+
assert_equal(0x8022f684, r)
|
37
|
+
l, r = bf.decrypt_pair(l, r)
|
38
|
+
assert_equal(orig_l, l)
|
39
|
+
assert_equal(orig_r, r)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_block
|
43
|
+
bf = Crypt::Blowfish.new("Who is John Galt?")
|
44
|
+
block = "norandom"
|
45
|
+
encrypted_block = bf.encrypt_block(block)
|
46
|
+
assert_equal("\236\353k\321&Q\"\220", encrypted_block)
|
47
|
+
decrypted_block = bf.decrypt_block(encrypted_block)
|
48
|
+
assert_equal(block, decrypted_block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_string
|
52
|
+
length = 30 + rand(26)
|
53
|
+
userkey = ""
|
54
|
+
length.times { userkey << rand(256).chr }
|
55
|
+
bf = Crypt::Blowfish.new(userkey)
|
56
|
+
string = "This is a string which is not a multiple of 8 characters long"
|
57
|
+
encrypted_string = bf.encrypt_string(string)
|
58
|
+
decrypted_string = bf.decrypt_string(encrypted_string)
|
59
|
+
assert_equal(string, decrypted_string)
|
60
|
+
secondstring = "This is another string to check repetitive use."
|
61
|
+
encrypted_string = bf.encrypt_string(secondstring)
|
62
|
+
decrypted_string = bf.decrypt_string(encrypted_string)
|
63
|
+
assert_equal(secondstring, decrypted_string)
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_file
|
68
|
+
plain_text = "This is a multi-line string\nwhich is not a multiple of 8 \ncharacters long."
|
69
|
+
plain_file = File.new('plain.txt', 'wb+')
|
70
|
+
plain_file.puts(plain_text)
|
71
|
+
plain_file.close()
|
72
|
+
bf = Crypt::Blowfish.new("Who is John Galt?")
|
73
|
+
bf.encrypt_file('plain.txt', 'crypt.txt')
|
74
|
+
bf.decrypt_file('crypt.txt', 'decrypt.txt')
|
75
|
+
decrypt_file = File.new('decrypt.txt', 'rb')
|
76
|
+
decrypt_text = decrypt_file.readlines().join('').chomp()
|
77
|
+
decrypt_file.close()
|
78
|
+
assert_equal(plain_text, decrypt_text)
|
79
|
+
FileUtils.rm('plain.txt')
|
80
|
+
FileUtils.rm('crypt.txt')
|
81
|
+
FileUtils.rm('decrypt.txt')
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/test/gost_test.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'crypt/gost'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class TestGost < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_init
|
8
|
+
assert_nothing_raised(RuntimeError) {
|
9
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri Gagarin?")
|
10
|
+
}
|
11
|
+
assert_nothing_raised(RuntimeError) {
|
12
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri?")
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_block_size
|
17
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri?")
|
18
|
+
assert_equal(8, gost.block_size(), "Wrong block size")
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_pair
|
22
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri?")
|
23
|
+
orig_l, orig_r = [0xfedcba98, 0x76543210]
|
24
|
+
l, r = gost.encrypt_pair(orig_l, orig_r)
|
25
|
+
assert_equal(0xaefaf8f4, l)
|
26
|
+
assert_equal(0xe24891b0, r)
|
27
|
+
l, r = gost.decrypt_pair(l, r)
|
28
|
+
assert_equal(orig_l, l)
|
29
|
+
assert_equal(orig_r, r)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_block
|
33
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri?")
|
34
|
+
block = "norandom"
|
35
|
+
encrypted_block = gost.encrypt_block(block)
|
36
|
+
assert_equal(".Vy\377\005\e3`", encrypted_block)
|
37
|
+
decrypted_block = gost.decrypt_block(encrypted_block)
|
38
|
+
assert_equal(block, decrypted_block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_string
|
42
|
+
length = 25 + rand(12)
|
43
|
+
userkey = ""
|
44
|
+
length.times { userkey << rand(256).chr }
|
45
|
+
gost = Crypt::Gost.new(userkey)
|
46
|
+
string = "This is a string which is not a multiple of 8 characters long"
|
47
|
+
encrypted_string = gost.encrypt_string(string)
|
48
|
+
decrypted_string = gost.decrypt_string(encrypted_string)
|
49
|
+
assert_equal(string, decrypted_string)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_file
|
53
|
+
plain_text = "This is a multi-line string\nwhich is not a multiple of 8 \ncharacters long."
|
54
|
+
plain_file = File.new('plain.txt', 'wb+')
|
55
|
+
plain_file.puts(plain_text)
|
56
|
+
plain_file.close()
|
57
|
+
gost = Crypt::Gost.new("Whatever happened to Yuri?")
|
58
|
+
gost.encrypt_file('plain.txt', 'crypt.txt')
|
59
|
+
gost.decrypt_file('crypt.txt', 'decrypt.txt')
|
60
|
+
decrypt_file = File.new('decrypt.txt', 'rb')
|
61
|
+
decrypt_text = decrypt_file.readlines().join('').chomp()
|
62
|
+
decrypt_file.close()
|
63
|
+
assert_equal(plain_text, decrypt_text)
|
64
|
+
FileUtils.rm('plain.txt')
|
65
|
+
FileUtils.rm('crypt.txt')
|
66
|
+
FileUtils.rm('decrypt.txt')
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
data/test/idea_test.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'crypt/idea'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class TestIdea < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_init
|
8
|
+
assert_nothing_raised(RuntimeError) {
|
9
|
+
idea_en = Crypt::IDEA.new("Who was John Galt and where's my breakfast?", Crypt::IDEA::ENCRYPT)
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_block_size
|
14
|
+
idea_en = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::ENCRYPT)
|
15
|
+
assert_equal(8, idea_en.block_size(), "Wrong block size")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_pair
|
19
|
+
idea_en = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::ENCRYPT)
|
20
|
+
orig_l, orig_r = [0xfedcba98, 0x76543210]
|
21
|
+
l, r = idea_en.crypt_pair(orig_l, orig_r)
|
22
|
+
assert_equal(0x05627e79, l)
|
23
|
+
assert_equal(0x69476521, r)
|
24
|
+
idea_de = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::DECRYPT)
|
25
|
+
l, r = idea_de.crypt_pair(l, r)
|
26
|
+
assert_equal(orig_l, l)
|
27
|
+
assert_equal(orig_r, r)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_block
|
31
|
+
idea_en = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::ENCRYPT)
|
32
|
+
block = "norandom"
|
33
|
+
encrypted_block = idea_en.encrypt_block(block)
|
34
|
+
assert_equal("\235\003\326u\001\330\361\t", encrypted_block)
|
35
|
+
idea_de = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::DECRYPT)
|
36
|
+
decrypted_block = idea_de.decrypt_block(encrypted_block)
|
37
|
+
assert_equal(block, decrypted_block)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_string
|
41
|
+
length = 25 + rand(12)
|
42
|
+
userkey = ""
|
43
|
+
length.times { userkey << rand(256).chr }
|
44
|
+
idea_en = Crypt::IDEA.new(userkey, Crypt::IDEA::ENCRYPT)
|
45
|
+
string = "This is a string which is not a multiple of 8 characters long"
|
46
|
+
encrypted_string = idea_en.encrypt_string(string)
|
47
|
+
idea_de = Crypt::IDEA.new(userkey, Crypt::IDEA::DECRYPT)
|
48
|
+
decryptedString = idea_de.decrypt_string(encrypted_string)
|
49
|
+
assert_equal(string, decryptedString)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_file
|
53
|
+
plain_text = "This is a multi-line string\nwhich is not a multiple of 8 \ncharacters long."
|
54
|
+
plain_file = File.new('plain.txt', 'wb+')
|
55
|
+
plain_file.puts(plain_text)
|
56
|
+
plain_file.close()
|
57
|
+
idea_en = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::ENCRYPT)
|
58
|
+
idea_en.encrypt_file('plain.txt', 'crypt.txt')
|
59
|
+
idea_de = Crypt::IDEA.new("Who is John Galt", Crypt::IDEA::DECRYPT)
|
60
|
+
idea_de.decrypt_file('crypt.txt', 'decrypt.txt')
|
61
|
+
decrypt_file = File.new('decrypt.txt', 'rb')
|
62
|
+
decrypt_text = decrypt_file.readlines().join('').chomp()
|
63
|
+
decrypt_file.close()
|
64
|
+
assert_equal(plain_text, decrypt_text)
|
65
|
+
FileUtils.rm('plain.txt')
|
66
|
+
FileUtils.rm('crypt.txt')
|
67
|
+
FileUtils.rm('decrypt.txt')
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/test/rc6_test.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'crypt/rc6'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class TestRC6 < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_block_size
|
8
|
+
assert_equal(16, Crypt::RC6.new([0]*32).block_size(), "Wrong block size")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_initialize
|
12
|
+
["","1", "qwe"].each do |key|
|
13
|
+
assert_raise(RuntimeError) {
|
14
|
+
Crypt::RC6.new(key)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
["1234567890123456","123456789012345678901234"].each do |key|
|
19
|
+
assert_nothing_raised() {
|
20
|
+
Crypt::RC6.new(key)
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_vectors
|
26
|
+
vectors = [
|
27
|
+
[[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
28
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
|
29
|
+
[0x00000000, 0x00000000, 0x00000000, 0x00000000],
|
30
|
+
[0x36a5c38f, 0x78f7b156, 0x4edf29c1, 0x1ea44898] ],
|
31
|
+
|
32
|
+
[[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
|
33
|
+
0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78],
|
34
|
+
[0x35241302, 0x79685746, 0xbdac9b8a, 0xf1e0dfce],
|
35
|
+
[0x2f194e52, 0x23c61547, 0x36f6511f, 0x183fa47e]],
|
36
|
+
|
37
|
+
[[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
38
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
39
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
|
40
|
+
[0x00000000, 0x00000000, 0x00000000, 0x00000000],
|
41
|
+
[0xcb1bd66c, 0x38300b19, 0x163f8a4e, 0x82ae9086] ],
|
42
|
+
|
43
|
+
[[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
|
44
|
+
0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78,
|
45
|
+
0x89, 0x9a, 0xab, 0xbc, 0xcd, 0xde, 0xef, 0xf0],
|
46
|
+
[0x35241302, 0x79685746, 0xbdac9b8a, 0xf1e0dfce],
|
47
|
+
[0xd0298368, 0x0405e519, 0x2ae9521e, 0xd49152f9]],
|
48
|
+
|
49
|
+
[[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
50
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
51
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
52
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
|
53
|
+
[0x00000000, 0x00000000, 0x00000000, 0x00000000],
|
54
|
+
[0x05bd5f8f, 0xa85fd110, 0xda3ffa93, 0xc27e856e] ],
|
55
|
+
|
56
|
+
[[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
|
57
|
+
0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78,
|
58
|
+
0x89, 0x9a, 0xab, 0xbc, 0xcd, 0xde, 0xef, 0xf0,
|
59
|
+
0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe],
|
60
|
+
[0x35241302, 0x79685746, 0xbdac9b8a, 0xf1e0dfce],
|
61
|
+
[0x161824c8, 0x89e4d7f0, 0xa116ad20, 0x485d4e67]],
|
62
|
+
]
|
63
|
+
|
64
|
+
vectors.each_with_index do |vector, i|
|
65
|
+
rc6 = Crypt::RC6.new(vector[0])
|
66
|
+
assert_equal(rc6.encrypt_block(vector[1].pack('N*')), vector[2].pack('N*'))
|
67
|
+
assert_equal(rc6.decrypt_block(vector[2].pack('N*')), vector[1].pack('N*'))
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'crypt/rijndael'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class TestRijndael < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_init
|
8
|
+
assert_raise(RuntimeError) {
|
9
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 64)
|
10
|
+
}
|
11
|
+
assert_raise(RuntimeError) {
|
12
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 128, 64)
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_block_size
|
17
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 128, 256)
|
18
|
+
assert_equal(32, rijndael.block_size)
|
19
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 256, 128)
|
20
|
+
assert_equal(16, rijndael.block_size)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_block
|
24
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 128, 128)
|
25
|
+
block = "\341q\214NIj\023u\343\330s\323\354$g\277"
|
26
|
+
encrypted_block = rijndael.encrypt_block(block)
|
27
|
+
assert_equal("\024\246^\332T\323x`\323yB\352\2159\212R", encrypted_block)
|
28
|
+
decrypted_block = rijndael.decrypt_block(encrypted_block)
|
29
|
+
assert_equal(block, decrypted_block)
|
30
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?", 128, 256)
|
31
|
+
assert_raise(RuntimeError) {
|
32
|
+
encrypted_block = rijndael.encrypt_block(block)
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_string
|
37
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?")
|
38
|
+
string = "This is a string which is not a multiple of 8 characters long"
|
39
|
+
encrypted_string = rijndael.encrypt_string(string)
|
40
|
+
decrypted_string = rijndael.decrypt_string(encrypted_string)
|
41
|
+
assert_equal(string, decrypted_string)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_file
|
45
|
+
plain_text = "This is a multi-line string\nwhich is not a multiple of 8 \ncharacters long."
|
46
|
+
plain_file = File.new('plain.txt', 'wb+')
|
47
|
+
plain_file.puts(plain_text)
|
48
|
+
plain_file.close()
|
49
|
+
rijndael = Crypt::Rijndael.new("Who is this John Galt guy, anyway?")
|
50
|
+
rijndael.encrypt_file('plain.txt', 'crypt.txt')
|
51
|
+
rijndael.decrypt_file('crypt.txt', 'decrypt.txt')
|
52
|
+
decrypt_file = File.new('decrypt.txt', 'rb')
|
53
|
+
decrypt_text = decrypt_file.readlines().join('').chomp()
|
54
|
+
decrypt_file.close()
|
55
|
+
assert_equal(plain_text, decrypt_text)
|
56
|
+
FileUtils.rm('plain.txt')
|
57
|
+
FileUtils.rm('crypt.txt')
|
58
|
+
FileUtils.rm('decrypt.txt')
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crypt19-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonathan Rudenberg
|
8
|
+
- Richard Kernahan
|
9
|
+
- Maximilian Haack
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-02-26 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 10.0.3
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 10.0.3
|
29
|
+
description: Crypt is a pure-ruby implementation of a number of popular encryption
|
30
|
+
algorithms. Block cyphers currently include Blowfish, GOST, IDEA, Rijndael (AES),
|
31
|
+
and RC6. Cypher Block Chaining (CBC) has been implemented.
|
32
|
+
email:
|
33
|
+
- mxhaack@gmail.com
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- .travis.yml
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
41
|
+
- LICENSE
|
42
|
+
- README.md
|
43
|
+
- Rakefile
|
44
|
+
- VERSION
|
45
|
+
- crypt19.gemspec
|
46
|
+
- lib/crypt/blowfish-tables.rb
|
47
|
+
- lib/crypt/blowfish.rb
|
48
|
+
- lib/crypt/bytes-compat.rb
|
49
|
+
- lib/crypt/cbc.rb
|
50
|
+
- lib/crypt/gost.rb
|
51
|
+
- lib/crypt/idea.rb
|
52
|
+
- lib/crypt/noise.rb
|
53
|
+
- lib/crypt/rc6.rb
|
54
|
+
- lib/crypt/rijndael-tables.rb
|
55
|
+
- lib/crypt/rijndael.rb
|
56
|
+
- lib/crypt/stringxor.rb
|
57
|
+
- lib/crypt/version.rb
|
58
|
+
- test/blowfish_test.rb
|
59
|
+
- test/gost_test.rb
|
60
|
+
- test/idea_test.rb
|
61
|
+
- test/rc6_test.rb
|
62
|
+
- test/rijndael_test.rb
|
63
|
+
homepage: https://github.com/coffeejunk/crypt19
|
64
|
+
licenses: []
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.0.0
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Crypt is a pure-ruby implementation of a number of popular encryption algorithms.
|
86
|
+
test_files:
|
87
|
+
- test/blowfish_test.rb
|
88
|
+
- test/gost_test.rb
|
89
|
+
- test/idea_test.rb
|
90
|
+
- test/rc6_test.rb
|
91
|
+
- test/rijndael_test.rb
|