red25519 1.0.0

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,3 @@
1
+ module Ed25519
2
+ VERSION = "1.0.0"
3
+ end
data/red25519.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/red25519/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Tony Arcieri"]
6
+ gem.email = ["tony.arcieri@gmail.com"]
7
+ gem.description = "Ruby wrappers for the Ed25519 public key signature system"
8
+ gem.summary = "Red25519 provides both C and Java bindings to the Ed25519 public key signature system"
9
+ gem.homepage = "https://github.com/tarcieri/red25519"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "red25519"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Ed25519::VERSION
17
+
18
+ gem.extensions = "ext/red25519/extconf.rb"
19
+
20
+ gem.add_runtime_dependency "hkdf"
21
+
22
+ gem.add_development_dependency "rake-compiler"
23
+ gem.add_development_dependency "rake"
24
+ gem.add_development_dependency "rspec"
25
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ed25519::Engine do
4
+ let(:seed_length) { Ed25519::SECRET_KEY_BYTES }
5
+ let(:message) { 'foobar' }
6
+
7
+ it "generates keypairs" do
8
+ ary = Ed25519::Engine.create_keypair("A" * seed_length)
9
+
10
+ ary.length.should eq 2
11
+ pubkey, privkey = ary
12
+
13
+ pubkey.should be_a String
14
+ pubkey.length.should eq Ed25519::PUBLIC_KEY_BYTES
15
+
16
+ privkey.should be_a String
17
+ privkey.length.should eq Ed25519::SECRET_KEY_BYTES * 2
18
+ end
19
+
20
+ it "raises ArgumentError if the seed is not #{Ed25519::SECRET_KEY_BYTES / 2} bytes long" do
21
+ expect { Ed25519::Engine.create_keypair("A" * (seed_length - 1)) }.to raise_exception ArgumentError
22
+ expect { Ed25519::Engine.create_keypair("A" * (seed_length + 1)) }.to raise_exception ArgumentError
23
+ end
24
+
25
+ it "signs and verifies messages" do
26
+ verify_key, signing_key = Ed25519::Engine.create_keypair("A" * seed_length)
27
+ signature = Ed25519::Engine.sign(signing_key, message)
28
+ Ed25519::Engine.verify(verify_key, signature, message).should be_true
29
+
30
+ bad_signature = signature[0...63] + "X"
31
+ Ed25519::Engine.verify(verify_key, bad_signature, message).should be_false
32
+ end
33
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ed25519::SigningKey do
4
+ let(:key) { Ed25519::SigningKey.generate }
5
+ let(:message) { "example message" }
6
+
7
+ it "generates keypairs" do
8
+ key.should be_a Ed25519::SigningKey
9
+ key.verify_key.should be_a Ed25519::VerifyKey
10
+ end
11
+
12
+ it "signs messages" do
13
+ key.sign(message).should be_a String
14
+ end
15
+
16
+ it "serializes to bytes" do
17
+ bytes = key.to_bytes
18
+ bytes.should be_a String
19
+ bytes.length.should eq 32
20
+ end
21
+
22
+ it "serializes to hex" do
23
+ hex = key.to_hex
24
+ hex.should be_a String
25
+ hex.length.should eq 64
26
+ end
27
+
28
+ it "initializes from hex" do
29
+ hex = key.to_hex
30
+ new_key = Ed25519::SigningKey.new(hex)
31
+ key.to_bytes.should == new_key.to_bytes
32
+ end
33
+ end
34
+
35
+ describe Ed25519::VerifyKey do
36
+ let(:signing_key) { Ed25519::SigningKey.generate }
37
+ let(:verify_key) { signing_key.verify_key }
38
+ let(:message) { "example message" }
39
+
40
+ it "verifies messages" do
41
+ signature = signing_key.sign(message)
42
+ verify_key.verify(signature, message).should be_true
43
+
44
+ bad_signature = signature[0...63] + "X"
45
+ verify_key.verify(bad_signature, message).should be_false
46
+ end
47
+
48
+ it "serializes to bytes" do
49
+ bytes = verify_key.to_bytes
50
+ bytes.should be_a String
51
+ bytes.length.should eq 32
52
+ end
53
+
54
+ it "serializes to hex" do
55
+ hex = verify_key.to_hex
56
+ hex.should be_a String
57
+ hex.length.should eq 64
58
+ end
59
+
60
+ it "initializes from hex" do
61
+ hex = verify_key.to_hex
62
+ new_key = Ed25519::VerifyKey.new(hex)
63
+ verify_key.to_bytes.should == new_key.to_bytes
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'red25519'
@@ -0,0 +1,5 @@
1
+ require 'rake/extensiontask'
2
+
3
+ Rake::ExtensionTask.new('red25519_engine') do |ext|
4
+ ext.ext_dir = 'ext/red25519'
5
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new
4
+
5
+ RSpec::Core::RakeTask.new(:rcov) do |task|
6
+ task.rcov = true
7
+ end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: red25519
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tony Arcieri
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hkdf
16
+ requirement: &70274577174300 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70274577174300
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake-compiler
27
+ requirement: &70274577173840 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70274577173840
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &70274577173420 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70274577173420
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &70274577173000 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70274577173000
58
+ description: Ruby wrappers for the Ed25519 public key signature system
59
+ email:
60
+ - tony.arcieri@gmail.com
61
+ executables: []
62
+ extensions:
63
+ - ext/red25519/extconf.rb
64
+ extra_rdoc_files: []
65
+ files:
66
+ - .gitignore
67
+ - .rspec
68
+ - .travis.yml
69
+ - CHANGES.md
70
+ - Gemfile
71
+ - LICENSE
72
+ - README.md
73
+ - Rakefile
74
+ - ext/red25519/api.h
75
+ - ext/red25519/crypto_int32.h
76
+ - ext/red25519/crypto_sign.h
77
+ - ext/red25519/crypto_uint32.h
78
+ - ext/red25519/crypto_verify_32.h
79
+ - ext/red25519/ed25519.c
80
+ - ext/red25519/extconf.rb
81
+ - ext/red25519/fe25519.c
82
+ - ext/red25519/fe25519.h
83
+ - ext/red25519/ge25519.c
84
+ - ext/red25519/ge25519.h
85
+ - ext/red25519/ge25519_base.data
86
+ - ext/red25519/red25519_engine.c
87
+ - ext/red25519/sc25519.c
88
+ - ext/red25519/sc25519.h
89
+ - ext/red25519/sha512-blocks.c
90
+ - ext/red25519/sha512-hash.c
91
+ - ext/red25519/sha512.h
92
+ - ext/red25519/verify.c
93
+ - lib/red25519.rb
94
+ - lib/red25519/keys.rb
95
+ - lib/red25519/version.rb
96
+ - red25519.gemspec
97
+ - spec/red25519/engine_spec.rb
98
+ - spec/red25519/keys_spec.rb
99
+ - spec/spec_helper.rb
100
+ - tasks/extension.rake
101
+ - tasks/rspec.rake
102
+ homepage: https://github.com/tarcieri/red25519
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 1.8.17
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Red25519 provides both C and Java bindings to the Ed25519 public key signature
126
+ system
127
+ test_files:
128
+ - spec/red25519/engine_spec.rb
129
+ - spec/red25519/keys_spec.rb
130
+ - spec/spec_helper.rb