cf-ruby-libecp 0.1.3 → 0.1.4
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 +4 -4
- data/lib/libecp.rb +24 -22
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dcfb0c06bc9cc0ad5dadf35f7b2571a5edc24c4
|
4
|
+
data.tar.gz: 74386da86512de41b0e8495645f752e7a0911c8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d669aa4b09bcb31e1842e04e1c1bf41784a1b08a86e92c53ff75e8238548d1c9b2300cbba91e5bbe53bd31f7117536c2fd19d14edeb084c0b78360d0942ae69
|
7
|
+
data.tar.gz: 49bfb6006923c877b2cffb459ca692ed9b1acdc05f61af11bdbc7ce36e94c14dc637c04cebb7082b1986c46eeedd3ae214e5c8620f074664bee9d4f6b02e1211
|
data/lib/libecp.rb
CHANGED
@@ -6,29 +6,30 @@ require "securerandom"
|
|
6
6
|
|
7
7
|
module LibEcp
|
8
8
|
extend FFI::Library
|
9
|
-
|
9
|
+
|
10
|
+
# Load the C++ shared library libecp.so
|
10
11
|
ffi_lib Gem.find_files("libecp.so")[0]
|
11
12
|
|
12
|
-
#
|
13
|
+
# Attached methods from the libecp C++ library
|
13
14
|
attach_function :ecp_pubkey_u8, [:pointer, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :size_t], :void
|
14
15
|
attach_function :ecp_sign_u8, [:pointer, :pointer, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :size_t], :void
|
15
16
|
attach_function :ecp_verify_u8, [:buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :buffer_in, :size_t], :bool
|
16
17
|
|
17
|
-
#
|
18
|
-
p="\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xFF\xFF\xE5m".force_encoding("ASCII-8BIT")
|
19
|
-
a="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding("ASCII-8BIT")
|
20
|
-
g="\x00\xA1E[3M\xF0\x99\xDF0\xFC(\xA1i\xA4g\xE9\xE4pu\xA9\x0F~e\x0E\xB6\xB7\xA4\\\x00~\b\x9F\xED\x7F\xBA4B\x82\xCA\xFB\xD6\xF7\xE3\x19\xF7\xC0\xB0\xBDY\xE2\xCAK\xDBUma\xA5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01".force_encoding("ASCII-8BIT")
|
21
|
-
n="\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xDC\xE8\xD2\xECa\x84\xCA\xF0\xA9qv\x9F\xB1\xF7".force_encoding("ASCII-8BIT")
|
18
|
+
# Get the byte string of a, g, p and n
|
19
|
+
p = "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xFF\xFF\xE5m".force_encoding("ASCII-8BIT")
|
20
|
+
a = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding("ASCII-8BIT")
|
21
|
+
g = "\x00\xA1E[3M\xF0\x99\xDF0\xFC(\xA1i\xA4g\xE9\xE4pu\xA9\x0F~e\x0E\xB6\xB7\xA4\\\x00~\b\x9F\xED\x7F\xBA4B\x82\xCA\xFB\xD6\xF7\xE3\x19\xF7\xC0\xB0\xBDY\xE2\xCAK\xDBUma\xA5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01".force_encoding("ASCII-8BIT")
|
22
|
+
n = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xDC\xE8\xD2\xECa\x84\xCA\xF0\xA9qv\x9F\xB1\xF7".force_encoding("ASCII-8BIT")
|
22
23
|
|
23
|
-
#
|
24
|
+
# Create the buffers
|
24
25
|
@@pb = FFI::MemoryPointer.new(:char, 29)
|
25
|
-
@@pb.put_bytes(0,p)
|
26
|
+
@@pb.put_bytes(0, p)
|
26
27
|
@@ab = FFI::MemoryPointer.new(:char, 29)
|
27
|
-
@@ab.put_bytes(0,a)
|
28
|
+
@@ab.put_bytes(0, a)
|
28
29
|
@@gb = FFI::MemoryPointer.new(:char, 29*3)
|
29
|
-
@@gb.put_bytes(0,g)
|
30
|
+
@@gb.put_bytes(0, g)
|
30
31
|
@@nb = FFI::MemoryPointer.new(:char, 29)
|
31
|
-
@@nb.put_bytes(0,n)
|
32
|
+
@@nb.put_bytes(0, n)
|
32
33
|
|
33
34
|
def self.gen_nonce
|
34
35
|
SecureRandom.random_bytes(16)
|
@@ -40,30 +41,31 @@ module LibEcp
|
|
40
41
|
end
|
41
42
|
|
42
43
|
# Generates users private key, Arguments: user id bytestring (from gen_uid), password String
|
43
|
-
def self.private_key(uid,pass)
|
44
|
-
|
44
|
+
def self.private_key(uid, pass)
|
45
|
+
OpenSSL::Digest.digest("SHA224", uid + pass)
|
45
46
|
end
|
46
47
|
|
47
48
|
# Generates public key from private key
|
48
49
|
def self.gen_pub(priv_key)
|
49
|
-
#create pointer
|
50
50
|
qbuf = FFI::MemoryPointer.new(:char, 29*3)
|
51
51
|
zbuf = FFI::MemoryPointer.new(:char, 29)
|
52
|
-
zbuf.put_bytes(1,priv_key)
|
52
|
+
zbuf.put_bytes(1, priv_key)
|
53
53
|
LibEcp::ecp_pubkey_u8 qbuf, @@pb, @@ab, @@gb, zbuf, 29
|
54
|
-
|
54
|
+
|
55
|
+
[Base64.encode64(qbuf.get_bytes(1, 28)).rstrip, Base64.encode64(qbuf.get_bytes(30, 28)).rstrip]
|
55
56
|
end
|
56
57
|
|
57
|
-
# Arguments: user id, server nonce, client nonce, users private key
|
58
|
-
|
58
|
+
# Arguments: user id, server nonce, client nonce, users private key.
|
59
|
+
# Returns an array with the two coordinates that is the signature.
|
60
|
+
def self.sign(user_id, snonce, cnonce, priv_key)
|
59
61
|
rbuf = FFI::MemoryPointer.new(:char, 29)
|
60
62
|
sbuf = FFI::MemoryPointer.new(:char, 29)
|
61
63
|
dbuf = FFI::MemoryPointer.new(:char, 29)
|
62
|
-
dbuf.put_bytes(1,priv_key)
|
64
|
+
dbuf.put_bytes(1, priv_key)
|
63
65
|
zbuf = FFI::MemoryPointer.new(:char, 29)
|
64
66
|
zbuf.put_bytes(1, OpenSSL::Digest.digest("SHA224", user_id + snonce + cnonce))
|
65
67
|
LibEcp::ecp_sign_u8 rbuf, sbuf, @@pb, @@ab, @@gb, @@nb, dbuf, zbuf, 29
|
66
|
-
|
67
|
-
|
68
|
+
|
69
|
+
[rbuf.get_bytes(1, 28), sbuf.get_bytes(1, 28)]
|
68
70
|
end
|
69
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cf-ruby-libecp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Coinfloor LTD
|
@@ -15,6 +15,9 @@ dependencies:
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.9'
|
20
|
+
- - ">="
|
18
21
|
- !ruby/object:Gem::Version
|
19
22
|
version: 1.9.3
|
20
23
|
type: :runtime
|
@@ -22,9 +25,12 @@ dependencies:
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.9'
|
30
|
+
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
26
32
|
version: 1.9.3
|
27
|
-
description:
|
33
|
+
description: LibECP is a C++ elliptic curve cryptography library for signing, verifying
|
28
34
|
signatures and generating keys.
|
29
35
|
email: development@coinfloor.co.uk
|
30
36
|
executables: []
|