crypt-rot13 1.0.2 → 1.0.3
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.
- data/CHANGES +5 -0
- data/MANIFEST +1 -1
- data/README +6 -6
- data/test/{tc_rot13.rb → test_crypt_rot13.rb} +12 -12
- metadata +46 -39
- data/Rakefile +0 -22
- data/lib/crypt/rot13.rb +0 -48
data/CHANGES
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
== 1.0.3 - 1-Aug-2009
|
|
2
|
+
* Changed license to Artistic 2.0.
|
|
3
|
+
* Some gemspec updates, including license update.
|
|
4
|
+
* Changed test file name to test_crypt_rot13.rb.
|
|
5
|
+
|
|
1
6
|
== 1.0.2 - 25-Jul-2007
|
|
2
7
|
* Changed Rot13Error to Rot13::Error
|
|
3
8
|
* Added a Rakefile with tasks for installation and testing
|
data/MANIFEST
CHANGED
data/README
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
== Description
|
|
2
|
-
A
|
|
3
|
-
encryption.
|
|
2
|
+
A library for performing simple character rotation (i.e. Caesar Cipher)
|
|
3
|
+
encryption. There are many like it, but this one is mine.
|
|
4
4
|
|
|
5
5
|
== Installation
|
|
6
6
|
=== Manual Installation
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
== Notes
|
|
22
22
|
Not unicode friendly. Only works on ASCII values 65-90 and 97-122.
|
|
23
23
|
|
|
24
|
+
See http://en.wikipedia.org/wiki/ROT13 for more on ROT13
|
|
25
|
+
|
|
24
26
|
== Acknowledgements
|
|
25
27
|
Thanks go to Gaius Julius Caesar (d. 44 BC) for creating one of the first,
|
|
26
28
|
and most simple, encryption schemes. Hail Caesar!
|
|
@@ -32,10 +34,10 @@
|
|
|
32
34
|
http://www.rubyforge.org/projects/shards.
|
|
33
35
|
|
|
34
36
|
== License
|
|
35
|
-
|
|
37
|
+
Artistic 2.0
|
|
36
38
|
|
|
37
39
|
== Copyright
|
|
38
|
-
(C) 2005-
|
|
40
|
+
(C) 2005-2009, Daniel J. Berger, All Rights Reserved
|
|
39
41
|
|
|
40
42
|
== Warranty
|
|
41
43
|
This package is provided "as is" and without any express or
|
|
@@ -44,5 +46,3 @@
|
|
|
44
46
|
|
|
45
47
|
== Author
|
|
46
48
|
Daniel J. Berger
|
|
47
|
-
djberg96 at nospam at gmail dot com
|
|
48
|
-
imperator on IRC (irc.freenode.net)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
###############################################################
|
|
2
|
-
#
|
|
2
|
+
# test_crypt_rot13.rb
|
|
3
3
|
#
|
|
4
|
-
# Test suite for the crypt-rot13
|
|
4
|
+
# Test suite for the crypt-rot13 library. You should run this
|
|
5
5
|
# test case via the 'rake test' task.
|
|
6
6
|
###############################################################
|
|
7
7
|
require 'crypt/rot13'
|
|
@@ -15,21 +15,21 @@ class TC_Rot13 < Test::Unit::TestCase
|
|
|
15
15
|
@r3 = Rot13.new('xyz')
|
|
16
16
|
@r4 = Rot13.new('XYZ')
|
|
17
17
|
@r5 = Rot13.new('a1b2c3@#$')
|
|
18
|
-
@r6 = Rot13.new('abc',3)
|
|
19
|
-
@r7 = Rot13.new('ABC',3)
|
|
20
|
-
@r8 = Rot13.new('xyz',23)
|
|
21
|
-
@r9 = Rot13.new('XYZ',23)
|
|
18
|
+
@r6 = Rot13.new('abc', 3)
|
|
19
|
+
@r7 = Rot13.new('ABC', 3)
|
|
20
|
+
@r8 = Rot13.new('xyz', 23)
|
|
21
|
+
@r9 = Rot13.new('XYZ', 23)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def test_version
|
|
25
|
-
assert_equal('1.0.
|
|
25
|
+
assert_equal('1.0.3', Rot13::VERSION)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def test_constructor
|
|
29
29
|
assert_respond_to(Rot13,:new)
|
|
30
30
|
assert_nothing_raised{ Rot13.new }
|
|
31
|
-
assert_nothing_raised{ Rot13.new(
|
|
32
|
-
assert_nothing_raised{ Rot13.new(
|
|
31
|
+
assert_nothing_raised{ Rot13.new('foo') }
|
|
32
|
+
assert_nothing_raised{ Rot13.new('foo', 7) }
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def test_available_methods
|
|
@@ -37,9 +37,9 @@ class TC_Rot13 < Test::Unit::TestCase
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def test_degree
|
|
40
|
-
assert_raises(Rot13::Error){ Rot13.new(
|
|
41
|
-
assert_raises(Rot13::Error){ Rot13.new(
|
|
42
|
-
assert_nothing_raised{ Rot13.new(
|
|
40
|
+
assert_raises(Rot13::Error){ Rot13.new('foo', 26) }
|
|
41
|
+
assert_raises(Rot13::Error){ Rot13.new('foo', 52) }
|
|
42
|
+
assert_nothing_raised{ Rot13.new('foo', 25) }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def test_string_class
|
metadata
CHANGED
|
@@ -1,53 +1,60 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
|
-
rubygems_version: 0.9.4
|
|
3
|
-
specification_version: 1
|
|
4
2
|
name: crypt-rot13
|
|
5
3
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 1.0.
|
|
7
|
-
date: 2007-07-25 00:00:00 -06:00
|
|
8
|
-
summary: Character rotation encryption, i.e. Caesar Cipher
|
|
9
|
-
require_paths:
|
|
10
|
-
- lib
|
|
11
|
-
email: djberg96@gmail.com
|
|
12
|
-
homepage: http://www.rubyforge.org/projects/shards
|
|
13
|
-
rubyforge_project:
|
|
14
|
-
description:
|
|
15
|
-
autorequire:
|
|
16
|
-
default_executable:
|
|
17
|
-
bindir: bin
|
|
18
|
-
has_rdoc: true
|
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
20
|
-
requirements:
|
|
21
|
-
- - ">"
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: 0.0.0
|
|
24
|
-
version:
|
|
4
|
+
version: 1.0.3
|
|
25
5
|
platform: ruby
|
|
26
|
-
signing_key:
|
|
27
|
-
cert_chain:
|
|
28
|
-
post_install_message:
|
|
29
6
|
authors:
|
|
30
7
|
- Daniel J. Berger
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-08-01 00:00:00 -06:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: " The crypt-rot13 library provides an interface for a simple character\n substitution cipher known as ROT13, a variation on the Caesar cipher.\n"
|
|
17
|
+
email: djberg96@gmail.com
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
41
21
|
|
|
42
22
|
extra_rdoc_files:
|
|
43
23
|
- README
|
|
44
24
|
- CHANGES
|
|
45
25
|
- MANIFEST
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
26
|
+
files:
|
|
27
|
+
- test/test_crypt_rot13.rb
|
|
28
|
+
- README
|
|
29
|
+
- CHANGES
|
|
30
|
+
- MANIFEST
|
|
31
|
+
has_rdoc: true
|
|
32
|
+
homepage: http://www.rubyforge.org/projects/shards
|
|
33
|
+
licenses:
|
|
34
|
+
- Artistic 2.0
|
|
35
|
+
post_install_message:
|
|
36
|
+
rdoc_options: []
|
|
49
37
|
|
|
38
|
+
require_paths:
|
|
39
|
+
- lib
|
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
41
|
+
requirements:
|
|
42
|
+
- - ">="
|
|
43
|
+
- !ruby/object:Gem::Version
|
|
44
|
+
version: "0"
|
|
45
|
+
version:
|
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
|
+
requirements:
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: "0"
|
|
51
|
+
version:
|
|
50
52
|
requirements: []
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
rubyforge_project: shards
|
|
55
|
+
rubygems_version: 1.3.5
|
|
56
|
+
signing_key:
|
|
57
|
+
specification_version: 3
|
|
58
|
+
summary: Character rotation encryption, i.e. Caesar Cipher
|
|
59
|
+
test_files:
|
|
60
|
+
- test/test_crypt_rot13.rb
|
data/Rakefile
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
require 'rake'
|
|
2
|
-
require 'rake/testtask'
|
|
3
|
-
|
|
4
|
-
desc "Install the crypt-rot13 package (non-gem)"
|
|
5
|
-
task :install do
|
|
6
|
-
dest = File.join(Config::CONFIG['sitelibdir'], 'crypt')
|
|
7
|
-
Dir.mkdir(dest) unless File.exists? dest
|
|
8
|
-
cp 'lib/crypt/rot13.rb', dest, :verbose => true
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
desc "Install the crypt-rot13 package as a gem"
|
|
12
|
-
task :install_gem do
|
|
13
|
-
ruby 'crypt-rot13.gemspec'
|
|
14
|
-
file = Dir["*.gem"].first
|
|
15
|
-
sh "gem install #{file}"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
Rake::TestTask.new do |t|
|
|
19
|
-
t.libs << 'lib'
|
|
20
|
-
t.warning = true
|
|
21
|
-
t.test_files = FileList['test/tc*']
|
|
22
|
-
end
|
data/lib/crypt/rot13.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
module Crypt
|
|
2
|
-
class Rot13 < String
|
|
3
|
-
class Error < ArgumentError; end
|
|
4
|
-
|
|
5
|
-
VERSION = '1.0.2'
|
|
6
|
-
|
|
7
|
-
# Returns a new Rot13 object. The object is a string with the letters
|
|
8
|
-
# each rotated by +degree+.
|
|
9
|
-
#
|
|
10
|
-
# You cannot use a multiple of 26 as the degree or a Rot13::Error will
|
|
11
|
-
# be raised. So, your days of double rot13 encryption are over.
|
|
12
|
-
#
|
|
13
|
-
def initialize(str='', degree=13)
|
|
14
|
-
unless str.empty?
|
|
15
|
-
str = rotate_string(str, degree)
|
|
16
|
-
end
|
|
17
|
-
super(str)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Rotates the object by +degree+.
|
|
21
|
-
#
|
|
22
|
-
def rotate(degree)
|
|
23
|
-
rotate_string(self, degree)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def rotate_string(str,degree)
|
|
29
|
-
case degree.modulo(26)
|
|
30
|
-
when 0
|
|
31
|
-
raise Error, "degree must not be a multiple of 26"
|
|
32
|
-
when 13
|
|
33
|
-
str.tr!("a-zA-Z","n-za-mN-ZA-M")
|
|
34
|
-
else
|
|
35
|
-
str = str.unpack("C"*str.length).map!{ |e|
|
|
36
|
-
if e >= 97 && e <= 122
|
|
37
|
-
e = ((e - 97 + degree) % 26) + 97
|
|
38
|
-
elsif e >= 65 && e <= 90
|
|
39
|
-
e = ((e - 65 + degree) % 26) + 65
|
|
40
|
-
else
|
|
41
|
-
e = e
|
|
42
|
-
end
|
|
43
|
-
}.pack("C"*str.length)
|
|
44
|
-
end
|
|
45
|
-
return str
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|