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.
- data/.gitignore +18 -0
- data/.rspec +4 -0
- data/.travis.yml +14 -0
- data/CHANGES.md +3 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +122 -0
- data/Rakefile +9 -0
- data/ext/red25519/api.h +4 -0
- data/ext/red25519/crypto_int32.h +6 -0
- data/ext/red25519/crypto_sign.h +13 -0
- data/ext/red25519/crypto_uint32.h +6 -0
- data/ext/red25519/crypto_verify_32.h +7 -0
- data/ext/red25519/ed25519.c +136 -0
- data/ext/red25519/extconf.rb +4 -0
- data/ext/red25519/fe25519.c +326 -0
- data/ext/red25519/fe25519.h +63 -0
- data/ext/red25519/ge25519.c +311 -0
- data/ext/red25519/ge25519.h +35 -0
- data/ext/red25519/ge25519_base.data +850 -0
- data/ext/red25519/red25519_engine.c +82 -0
- data/ext/red25519/sc25519.c +298 -0
- data/ext/red25519/sc25519.h +73 -0
- data/ext/red25519/sha512-blocks.c +239 -0
- data/ext/red25519/sha512-hash.c +72 -0
- data/ext/red25519/sha512.h +4 -0
- data/ext/red25519/verify.c +40 -0
- data/lib/red25519.rb +40 -0
- data/lib/red25519/keys.rb +73 -0
- data/lib/red25519/version.rb +3 -0
- data/red25519.gemspec +25 -0
- data/spec/red25519/engine_spec.rb +33 -0
- data/spec/red25519/keys_spec.rb +65 -0
- data/spec/spec_helper.rb +3 -0
- data/tasks/extension.rake +5 -0
- data/tasks/rspec.rake +7 -0
- metadata +130 -0
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
|
data/spec/spec_helper.rb
ADDED
data/tasks/rspec.rake
ADDED
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
|