ruby-rc4 0.1.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.
Files changed (4) hide show
  1. data/README +39 -0
  2. data/Rakefile +115 -0
  3. data/lib/rc4.rb +44 -0
  4. metadata +83 -0
data/README ADDED
@@ -0,0 +1,39 @@
1
+ == RC4
2
+
3
+ RC4 is a pure Ruby implementation of the Rc4 algorithm.
4
+
5
+
6
+ == Usage
7
+
8
+ First require the gem:
9
+
10
+ require 'rc4'
11
+
12
+ To encrypt:
13
+
14
+ key = "nuff rspec"
15
+ enc = RC4.new(key)
16
+ encrypted = enc.encrypt("super-cool-test")
17
+
18
+ To decrypt:
19
+
20
+ dec = RC4.new(key)
21
+ decrypted = dec.decrypt(encrypted)
22
+
23
+ Since encrypt method is used for encryption and decryption, decrypt is
24
+ just an alias to encrypt in order to make the usage more intuitive.
25
+
26
+ == Note
27
+
28
+ The original algorithm implementation in Ruby by Max Prokopiev
29
+ <max-prokopiev@yandex.ru>.
30
+
31
+ Aleksandar Simic then modified it to include a test suite and gem
32
+ packaged it using gem-this.
33
+ <asimic@gmail.com>
34
+
35
+
36
+ I switched the project to use rspec2.
37
+
38
+ Thanks,
39
+ Caige Nichols <caigesn@gmail.com>
@@ -0,0 +1,115 @@
1
+ require "rubygems"
2
+ require "rake/gempackagetask"
3
+ require "rake/rdoctask"
4
+ require "rspec"
5
+ require "rspec/core/rake_task"
6
+
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.rspec_opts = %w(--format nested --colour)
9
+ t.pattern = './spec'
10
+ end
11
+
12
+
13
+ task :default => ["spec"]
14
+
15
+ # This builds the actual gem. For details of what all these options
16
+ # mean, and other ones you can add, check the documentation here:
17
+ #
18
+ # http://rubygems.org/read/chapter/20
19
+ #
20
+ spec = Gem::Specification.new do |s|
21
+
22
+ # Change these as appropriate
23
+ s.name = "ruby-rc4"
24
+ s.version = "0.1.1"
25
+ s.summary = "RubyRC4 is a pure Ruby implementation of the RC4 algorithm."
26
+ s.author = "Caige Nichols"
27
+ s.email = "caigesn@gmail.com"
28
+ s.homepage = "http://www.caigenichols.com/"
29
+
30
+ s.has_rdoc = false
31
+ s.extra_rdoc_files = %w(README)
32
+ s.rdoc_options = %w(--main README)
33
+
34
+ # Add any extra files to include in the gem
35
+ s.files = %w(README Rakefile) + Dir.glob("{spec,lib/**/*}")
36
+ s.require_paths = ["lib"]
37
+
38
+ # If you want to depend on other gems, add them here, along with any
39
+ # relevant versions
40
+ # s.add_dependency("some_other_gem", "~> 0.1.0")
41
+
42
+ # If your tests use any gems, include them here
43
+ s.add_development_dependency("rspec")
44
+
45
+ # If you want to publish automatically to rubyforge, you'll may need
46
+ # to tweak this, and the publishing task below too.
47
+ s.rubyforge_project = "ruby-rc4"
48
+ end
49
+
50
+ # This task actually builds the gem. We also regenerate a static
51
+ # .gemspec file, which is useful if something (i.e. GitHub) will
52
+ # be automatically building a gem for this project. If you're not
53
+ # using GitHub, edit as appropriate.
54
+ Rake::GemPackageTask.new(spec) do |pkg|
55
+ pkg.gem_spec = spec
56
+
57
+ # Generate the gemspec file for github.
58
+ file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
59
+ File.open(file, "w") {|f| f << spec.to_ruby }
60
+ end
61
+
62
+ # Generate documentation
63
+ Rake::RDocTask.new do |rd|
64
+ rd.main = "README"
65
+ rd.rdoc_files.include("README", "lib/**/*.rb")
66
+ rd.rdoc_dir = "rdoc"
67
+ end
68
+
69
+ desc 'Clear out RDoc and generated packages'
70
+ task :clean => [:clobber_rdoc, :clobber_package] do
71
+ rm "#{spec.name}.gemspec"
72
+ end
73
+
74
+ # If you want to publish to RubyForge automatically, here's a simple
75
+ # task to help do that. If you don't, just get rid of this.
76
+ # Be sure to set up your Rubyforge account details with the Rubyforge
77
+ # gem; you'll need to run `rubyforge setup` and `rubyforge config` at
78
+ # the very least.
79
+ begin
80
+ require "rake/contrib/sshpublisher"
81
+ namespace :rubyforge do
82
+
83
+ desc "Release gem and RDoc documentation to RubyForge"
84
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
85
+
86
+ namespace :release do
87
+ desc "Release a new version of this gem"
88
+ task :gem => [:package] do
89
+ require 'rubyforge'
90
+ rubyforge = RubyForge.new
91
+ rubyforge.configure
92
+ rubyforge.login
93
+ rubyforge.userconfig['release_notes'] = spec.summary
94
+ path_to_gem = File.join(File.dirname(__FILE__), "pkg", "#{spec.name}-#{spec.version}.gem")
95
+ puts "Publishing #{spec.name}-#{spec.version.to_s} to Rubyforge..."
96
+ rubyforge.add_release(spec.rubyforge_project, spec.name, spec.version.to_s, path_to_gem)
97
+ end
98
+
99
+ desc "Publish RDoc to RubyForge."
100
+ task :docs => [:rdoc] do
101
+ config = YAML.load(
102
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
103
+ )
104
+
105
+ host = "#{config['username']}@rubyforge.org"
106
+ remote_dir = "/var/www/gforge-projects/ruby-rc4/" # Should be the same as the rubyforge project name
107
+ local_dir = 'rdoc'
108
+
109
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
110
+ end
111
+ end
112
+ end
113
+ rescue LoadError
114
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
115
+ end
@@ -0,0 +1,44 @@
1
+ class RC4
2
+
3
+ def initialize(str)
4
+ begin
5
+ raise SyntaxError, "RC4: Key supplied is blank" if str.eql?('')
6
+
7
+ @q1, @q2 = 0, 0
8
+ @key = []
9
+ str.each_byte {|elem| @key << elem} while @key.size < 256
10
+ @key.slice!(256..@key.size-1) if @key.size >= 256
11
+ @s = (0..255).to_a
12
+ j = 0
13
+ 0.upto(255) do |i|
14
+ j = (j + @s[i] + @key[i] )%256
15
+ @s[i], @s[j] = @s[j], @s[i]
16
+ end
17
+ end
18
+ end
19
+
20
+ def encrypt!(text)
21
+ process text
22
+ end
23
+
24
+ def encrypt(text)
25
+ process text.dup
26
+ end
27
+
28
+ alias_method :decrypt, :encrypt
29
+
30
+ private
31
+
32
+ def process(text)
33
+ 0.upto(text.length-1) {|i| text[i] = text[i] ^ round}
34
+ text
35
+ end
36
+
37
+ def round
38
+ @q1 = (@q1 + 1)%256
39
+ @q2 = (@q2 + @s[@q1])%256
40
+ @s[@q1], @s[@q2] = @s[@q2], @s[@q1]
41
+ @s[(@s[@q1]+@s[@q2])%256]
42
+ end
43
+
44
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-rc4
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Caige Nichols
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-25 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description:
36
+ email: caigesn@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README
43
+ files:
44
+ - README
45
+ - Rakefile
46
+ - lib/rc4.rb
47
+ has_rdoc: true
48
+ homepage: http://www.caigenichols.com/
49
+ licenses: []
50
+
51
+ post_install_message:
52
+ rdoc_options:
53
+ - --main
54
+ - README
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements: []
76
+
77
+ rubyforge_project: ruby-rc4
78
+ rubygems_version: 1.5.0
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: RubyRC4 is a pure Ruby implementation of the RC4 algorithm.
82
+ test_files: []
83
+