cf-ruby-libecp 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|