cf-ruby-libecp 0.2.0 → 0.2.2
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 +5 -13
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/README.md +3 -1
- data/Rakefile +6 -0
- data/bin/console +8 -0
- data/lib/libecp.rb +11 -2
- data/libecp.gemspec +6 -1
- data/spec/libecp/libecp_spec.rb +40 -0
- data/spec/spec_helper.rb +6 -0
- metadata +73 -11
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
N2U5NTU1NzQyMDI4NmJiMDc0ODhmYTc5MmU2NWYyNDhlMTg2ZTBmNA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8dd57ce470ce52c97d77b1e7676656b577b26f63
|
4
|
+
data.tar.gz: ecd54d40dcdd125ea0bce6390232658f0ff3cadf
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NjFkNDJmYmU1YWNhOTE4NjJlMWIzMTUwNTRiNjk3MWRjMzJmYWYwNDk5NjM0
|
11
|
-
MGE3Nzk4MmE1NDY0OWU5ZDhjNDczMzc3YTIyMDEzNjE4MjhlNDQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MjJkZmE5ZWNjYjA5ZDk3MjU1YjRkMWM1ODllNzUwNzQ2NzgxOWYyZWQ4Y2I3
|
14
|
-
YzI0YzQwMDU1NTY1ZWI4OGMzM2MxN2ViNWNkZTUwOTg4NGY3ZDgxZTBkM2Vi
|
15
|
-
MzAzZWZiNmNlZmEzZGQyODU4MWI5Nzc0ZTkyOWIwMjU4ZDc3NWI=
|
6
|
+
metadata.gz: 4d9e7a9435fbf696a4ba2601dca1391452f94c2f42e6b077269b383ca35a5b2711e71c43b1c24f4556b4609c85b09d67e98ac38a517d572ee8099572d83739ab
|
7
|
+
data.tar.gz: af12ed6d16b99295749d6055fc2e85cf9db9eed9de800edd08b85883df6632bf6307f5e2d82c7d82646c8af998787fe80bdd898d48823619e5a8ee4bbd28a78e
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -27,7 +27,9 @@ used in Unix.
|
|
27
27
|
|
28
28
|
#### OS X with Homebrew
|
29
29
|
|
30
|
-
$ brew
|
30
|
+
$ brew tap homebrew/versions
|
31
|
+
$ brew install gmp4
|
32
|
+
$ CPPFLAGS=-I/usr/local/opt/gmp4/include LDFLAGS=-L/usr/local/opt/gmp4/lib gem install cf-ruby-libecp
|
31
33
|
|
32
34
|
#### OS X with MacPorts
|
33
35
|
|
data/Rakefile
ADDED
data/bin/console
ADDED
data/lib/libecp.rb
CHANGED
@@ -37,12 +37,21 @@ module LibEcp
|
|
37
37
|
|
38
38
|
# Generates user id as a bytestring
|
39
39
|
def self.gen_uid(user_id)
|
40
|
-
(
|
40
|
+
(
|
41
|
+
(user_id >> 56 & 0xFF).chr +
|
42
|
+
(user_id >> 48 & 0xFF).chr +
|
43
|
+
(user_id >> 40 & 0xFF).chr +
|
44
|
+
(user_id >> 32 & 0xFF).chr +
|
45
|
+
(user_id >> 24 & 0xFF).chr +
|
46
|
+
(user_id >> 16 & 0xFF).chr +
|
47
|
+
(user_id >> 8 & 0xFF).chr +
|
48
|
+
(user_id & 0xFF).chr
|
49
|
+
).encode("ASCII-8BIT")
|
41
50
|
end
|
42
51
|
|
43
52
|
# Generates users private key, Arguments: user id bytestring (from gen_uid), password String
|
44
53
|
def self.private_key(uid, pass)
|
45
|
-
OpenSSL::Digest.digest("SHA224", uid + pass)
|
54
|
+
OpenSSL::Digest.digest("SHA224", uid + pass.encode("UTF-8").force_encoding("ASCII-8BIT"))
|
46
55
|
end
|
47
56
|
|
48
57
|
# Generates public key from private key
|
data/libecp.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cf-ruby-libecp"
|
3
|
-
s.version = "0.2.
|
3
|
+
s.version = "0.2.2"
|
4
4
|
s.summary = "Ruby LibECP Wrapper"
|
5
5
|
s.description = "Ruby LibECP is a wrapper around LibECP, an elliptic-curve cryptography library for producing and verifying ECDSA signatures."
|
6
6
|
s.email = "development@coinfloor.co.uk"
|
@@ -16,4 +16,9 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.add_dependency "ffi", "~> 1.9", ">= 1.9.3"
|
17
17
|
|
18
18
|
s.required_ruby_version = ">= 1.9.3"
|
19
|
+
|
20
|
+
s.add_development_dependency "bundler", "~> 1.13"
|
21
|
+
s.add_development_dependency "rake"
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
s.add_development_dependency "pry"
|
19
24
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LibEcp do
|
4
|
+
let(:libecp) { described_class }
|
5
|
+
|
6
|
+
describe '.gen_uid' do
|
7
|
+
subject { libecp.gen_uid(1) }
|
8
|
+
|
9
|
+
it 'generates uid as bytestring and ensures ASCII-8BIT encoding' do
|
10
|
+
expect(subject).to eq("\x00\x00\x00\x00\x00\x00\x00\x01")
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'ensures right encoding' do
|
14
|
+
expect(subject.encoding).to be Encoding::ASCII_8BIT
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.private_key' do
|
19
|
+
let(:user_id) { 1 }
|
20
|
+
let(:password) { 'password' }
|
21
|
+
let(:sha224_hash) { "\xD6i\xB5\"\xC6ea\n\xB6\x99\xA1h\x97V\xA87R\"\xC4\x88/\x15\x86\xD1\x86\xB0\x83\xB0".force_encoding('ASCII-8BIT') }
|
22
|
+
|
23
|
+
subject { libecp.private_key(libecp.gen_uid(user_id), password) }
|
24
|
+
|
25
|
+
it 'generates private key using SHA224' do
|
26
|
+
expect(subject).to eq(sha224_hash)
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when providing special characters' do
|
30
|
+
let(:user_id) { 128 }
|
31
|
+
let(:password) { "COPAú€rowentaú€#£ęćżźłów~!@#$%^&*()_+`-=[]{}:\";'<>?,./!\"£eqQWRTYEYUIOPLKJHGFDSAZXCVBNM#£ęćżźłów" }
|
32
|
+
let(:sha224_hash) { "\x9C\xC7\xB56D5|\x14\f\x80;\x9AI}2>') \x10\x1C\xC3\\1\xF7\x84\xDE\x01".force_encoding('ASCII-8BIT') }
|
33
|
+
|
34
|
+
it 'ensures proper processing' do
|
35
|
+
expect(subject).to eq(sha224_hash)
|
36
|
+
expect(subject.encoding).to be Encoding::ASCII_8BIT
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,35 +1,91 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cf-ruby-libecp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Coinfloor LTD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.9'
|
20
|
-
- -
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.9.3
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ~>
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.9'
|
30
|
-
- -
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.9.3
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.13'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.13'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
33
89
|
description: Ruby LibECP is a wrapper around LibECP, an elliptic-curve cryptography
|
34
90
|
library for producing and verifying ECDSA signatures.
|
35
91
|
email: development@coinfloor.co.uk
|
@@ -38,11 +94,15 @@ extensions:
|
|
38
94
|
- configure
|
39
95
|
extra_rdoc_files: []
|
40
96
|
files:
|
41
|
-
- .gitignore
|
42
|
-
- .gitmodules
|
97
|
+
- ".gitignore"
|
98
|
+
- ".gitmodules"
|
99
|
+
- ".rspec"
|
100
|
+
- Gemfile
|
43
101
|
- LICENCE
|
44
102
|
- Makefile
|
45
103
|
- README.md
|
104
|
+
- Rakefile
|
105
|
+
- bin/console
|
46
106
|
- configure
|
47
107
|
- ext/libecp/.gitignore
|
48
108
|
- ext/libecp/Makefile
|
@@ -53,6 +113,8 @@ files:
|
|
53
113
|
- ext/libecp/libecp.h
|
54
114
|
- lib/libecp.rb
|
55
115
|
- libecp.gemspec
|
116
|
+
- spec/libecp/libecp_spec.rb
|
117
|
+
- spec/spec_helper.rb
|
56
118
|
homepage: https://github.com/coinfloor/ruby-libecp
|
57
119
|
licenses:
|
58
120
|
- Apache License Version 2.0
|
@@ -63,17 +125,17 @@ require_paths:
|
|
63
125
|
- lib
|
64
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
65
127
|
requirements:
|
66
|
-
- -
|
128
|
+
- - ">="
|
67
129
|
- !ruby/object:Gem::Version
|
68
130
|
version: 1.9.3
|
69
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
132
|
requirements:
|
71
|
-
- -
|
133
|
+
- - ">="
|
72
134
|
- !ruby/object:Gem::Version
|
73
135
|
version: '0'
|
74
136
|
requirements: []
|
75
137
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.5.1
|
77
139
|
signing_key:
|
78
140
|
specification_version: 4
|
79
141
|
summary: Ruby LibECP Wrapper
|