rbsecp256k1 3.0.0 → 3.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: adc488ad0d13cd01f56ce39b7c323ea57d9226b9380d747ebb8ef0c4cc62d6d1
4
- data.tar.gz: 3118c92e72f09ff255483f7c90665236b9b060a881eb4c7d54b9d3a2791df747
3
+ metadata.gz: 529c72afdaa5cd79bc685fd28661d367be89a019366e9b9d46bb9db7dd99e499
4
+ data.tar.gz: 21d2af92f7c0c696f2a36b6a6de4c330f0dac30078a1d61327e3e22bb80bd4ef
5
5
  SHA512:
6
- metadata.gz: 5863c53473f0a162fffc82e319ab255b3e234acd0d425637783177e4c47e38768992b9d712f8957369e2ed53241eee377c31510e486d887e2cb6e9b12bb667b2
7
- data.tar.gz: 046edbc96b3864969015ea02b2016fb167ae0c93172621801d7788ea484d3418a5868a8396aea57b4fbd21298157aa5a383b990dce00f2cceff68dd9f12106f0
6
+ metadata.gz: 2d32348b294c9e75ac950f1be1ae2dc0de0c1a31a3038da397426dc56f5cde637a453037f0e5dab0c6bb7bc1761f9afc6934c2f804d328bb4f31279754ec1584
7
+ data.tar.gz: '03028eee4ffcf8d8df75488444a8fc963ffa2e10fceb0ac4ac9fb8762f5c403594d74eafedf110ff2c955091fb2d9f76257a5517c7f80fdd2bccc6e2274d6882'
@@ -0,0 +1,147 @@
1
+ # rbsecp256k1
2
+
3
+ [![Build Status](https://travis-ci.com/etscrivner/rbsecp256k1.svg?branch=master)](https://travis-ci.com/etscrivner/rbsecp256k1) [![Gem Version](https://badge.fury.io/rb/rbsecp256k1.svg)](https://badge.fury.io/rb/rbsecp256k1)
4
+
5
+ Compiled Ruby extension gem for [libsecp256k1](https://github.com/bitcoin-core/secp256k1). In rbsecp256k1 3.0.0
6
+ and later libsecp256k1 is bundled with the gem.
7
+
8
+ [Documentation](documentation/index.md)
9
+
10
+ ### Why wrap libsecp256k1?
11
+
12
+ [libsecp256k1](https://github.com/bitcoin-core/secp256k1) is an extremely optimized implementation of public key derivation,
13
+ signing, and verification with the secp256k1 elliptic curve. It comes with its
14
+ own set of benchmarks, but from [benchmarking done by Peter Wuille](https://www.reddit.com/r/Bitcoin/comments/2weymr/experiment_bitcoin_core_0100_initial_sync_time/coqghm2) it is ~4.9x
15
+ faster than the OpenSSL implementation of the same curve. It is the only library
16
+ that provides constant time signing of this curve and has been deployed as part
17
+ of Bitcoin since [v0.10.0](https://bitcoin.org/en/release/v0.10.0#improved-signing-security)
18
+
19
+ ## Installation
20
+
21
+ The simplest installation:
22
+
23
+ ```
24
+ gem install rbsecp256k1
25
+ ```
26
+
27
+ ## Requirements
28
+
29
+ If you want to use your system version of libsecp256k1 rather than the bundled
30
+ version use the `--with-system-libraries` flag:
31
+
32
+ ```
33
+ gem install rbsecp256k1 -- --with-system-libraries
34
+ ```
35
+
36
+ #### Linux
37
+
38
+ Install the dependencies for building libsecp256k1 and this library:
39
+
40
+ ```
41
+ sudo apt-get install build-essential automake pkg-config libtool \
42
+ libffi-dev libssl-dev libgmp-dev python-dev
43
+ ```
44
+
45
+ **NOTE:** If you have installed libsecp256k1 but the gem cannot find it. Ensure
46
+ you have run `ldconfig` so that your library load paths have been updated.
47
+
48
+ #### macOS
49
+
50
+ Dependencies for building libsecp256k1 and this library:
51
+
52
+ ```
53
+ brew install openssl libtool pkg-config gmp libffi
54
+ ```
55
+
56
+ ## Features
57
+
58
+ See [rbsecp256k1 documentation](documentation/index.md) for examples and complete list of supported functionality.
59
+
60
+ ## Development
61
+
62
+ ### Cloning
63
+
64
+ To clone the repository and its submodules you'll need to the following:
65
+
66
+ ```
67
+ git clone git@github.com:etscrivner/rbsecp256k1.git
68
+ ```
69
+
70
+ ### Setup
71
+
72
+ Development is largely facilitated by a makefile. After download you should run
73
+ the following command to set up your local environment:
74
+
75
+ ```
76
+ make setup
77
+ ```
78
+
79
+ ### Compiling Extension
80
+
81
+ To compile the extension gem run the following (this is required to run tests):
82
+
83
+ ```
84
+ make build
85
+ ```
86
+
87
+ ### Running Tests
88
+
89
+ ```
90
+ make test
91
+ ```
92
+
93
+ To test with recovery functionality disabled run:
94
+
95
+ ```
96
+ make test WITH_RECOVERY=0
97
+ ```
98
+
99
+ To test with ECDH functionality disabled run:
100
+
101
+ ```
102
+ make test WITH_ECDH=0
103
+ ```
104
+
105
+ To test with both disabled run:
106
+
107
+ ```
108
+ make test WITH_RECOVERY=0 WITH_ECDH=0
109
+ ```
110
+
111
+ ### Building Gem
112
+
113
+ ```
114
+ make gem
115
+ ```
116
+
117
+ ### Installing Gem Locally
118
+
119
+ To install the gem locally and verify builds you can run:
120
+
121
+ ```
122
+ make install
123
+ ```
124
+
125
+ ### Uninstall Gem Locally
126
+
127
+ You can similarly uninstall the local gem by running the following:
128
+
129
+ ```
130
+ make uninstall
131
+ ```
132
+
133
+ ### Cleaning Up
134
+
135
+ To clean up and do a fresh build:
136
+
137
+ ```
138
+ make clean
139
+ ```
140
+
141
+ ### Running YARD Documentation Server
142
+
143
+ To run the [YARD](https://yardoc.org/) documentation server:
144
+
145
+ ```
146
+ make docserver
147
+ ```
@@ -2,6 +2,19 @@ require 'mini_portile2'
2
2
  require 'mkmf'
3
3
  require 'zip'
4
4
 
5
+ # Indicates the platform on which the package is being installed
6
+ INSTALLING_OS =
7
+ if RUBY_PLATFORM =~ /darwin/
8
+ :macos
9
+ elsif RUBY_PLATFORM =~ /linux/
10
+ :linux
11
+ else
12
+ :unknown
13
+ end
14
+
15
+ # Fixed path to Homebrew OpenSSL pkgconfig file
16
+ HOMEBREW_OPENSSL_PKGCONFIG = '/usr/local/opt/openssl/lib/pkgconfig'.freeze
17
+
5
18
  # Recipe for downloading and building libsecp256k1 as part of installation
6
19
  class Secp256k1Recipe < MiniPortile
7
20
  # Hard-coded URL for libsecp256k1 zipfile (HEAD of master as of 26-11-2018)
@@ -70,13 +83,48 @@ class Secp256k1Recipe < MiniPortile
70
83
  end
71
84
 
72
85
  # OpenSSL flags
73
- print("checking for OpenSSL\n")
86
+ message("checking for OpenSSL\n")
74
87
  results = pkg_config('openssl')
88
+
89
+ # Failed to find package OpenSSL
90
+ unless results && results[1]
91
+ # Check if the user happens to have OpenSSL installed via Homebrew on a path
92
+ # we know about.
93
+ # rubocop:disable Style/GlobalVars
94
+ if INSTALLING_OS == :macos && File.exist?(HOMEBREW_OPENSSL_PKGCONFIG)
95
+ begin
96
+ require 'rubygems'
97
+ gem 'pkg-config', (gem_ver = '~> 1.3')
98
+ require 'pkg-config'
99
+ rescue LoadError
100
+ message(
101
+ "pkg-config could not be used to find openssl\n" \
102
+ "Please install either `pkg-config` or the pkg-config gem via\n" \
103
+ "gem install pkg-config -v #{gem_ver.inspect}\n\n"
104
+ )
105
+ else
106
+ message("Initial check failed. Trying homebrew openssl path...\n")
107
+ message("Using pkg-config gem version #{PKGConfig::VERSION}\n")
108
+ PKGConfig.add_path(HOMEBREW_OPENSSL_PKGCONFIG)
109
+
110
+ cflags = PKGConfig.cflags('openssl')
111
+ ldflags = PKGConfig.libs_only_L('openssl')
112
+ libs = PKGConfig.libs_only_l('openssl')
113
+
114
+ $CFLAGS += " " << cflags if cflags
115
+ $libs += " " << libs if libs
116
+ $LDFLAGS = [$LDFLAGS, ldflags].join(' ')
117
+
118
+ results = [cflags, libs, ldflags]
119
+ end
120
+ end
121
+ # rubocop:enable Style/GlobalVars
122
+ end
75
123
  abort "missing openssl pkg-config information" unless results && results[1]
76
124
 
77
125
  if with_config('system-library')
78
126
  # Require that libsecp256k1 be installed using `make install` or similar.
79
- print("checking for libsecp256k1\n")
127
+ message("checking for libsecp256k1\n")
80
128
  results = pkg_config('libsecp256k1')
81
129
  abort "missing libsecp256k1" unless results && results[1]
82
130
  else
@@ -1,3 +1,3 @@
1
1
  module Secp256k1
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '3.0.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbsecp256k1
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Scrivner
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pkg-config
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rubyzip
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +129,7 @@ extensions:
115
129
  - ext/rbsecp256k1/extconf.rb
116
130
  extra_rdoc_files: []
117
131
  files:
132
+ - README.md
118
133
  - Rakefile
119
134
  - ext/rbsecp256k1/extconf.rb
120
135
  - ext/rbsecp256k1/rbsecp256k1.c