From 0e98ca6455e7094d75a54dbfbbdc8e6e5325236e Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 23 Nov 2024 23:23:01 +0100 Subject: [PATCH 1/4] Cleanup gemspec --- x25519.gemspec | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/x25519.gemspec b/x25519.gemspec index a7f386a..fb5bf01 100644 --- a/x25519.gemspec +++ b/x25519.gemspec @@ -1,6 +1,6 @@ # frozen_string_literal: true -require File.expand_path("lib/x25519/version", __dir__) +require_relative "lib/x25519/version" Gem::Specification.new do |spec| spec.name = "x25519" @@ -16,12 +16,8 @@ Gem::Specification.new do |spec| spec.homepage = "https://github.com/RubyCrypto/x25519" spec.license = "BSD-3-Clause" # https://spdx.org/licenses/BSD-3-Clause.html spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } - spec.bindir = "exe" - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } - spec.require_paths = ["lib"] spec.platform = Gem::Platform::RUBY spec.extensions = ["ext/x25519_precomputed/extconf.rb", "ext/x25519_ref10/extconf.rb"] spec.required_ruby_version = ">= 2.5" - spec.add_development_dependency "bundler", "~> 2.1" end From d33a0d829558f6b4333c258c855f8fc3fea1b13c Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 23 Nov 2024 23:27:30 +0100 Subject: [PATCH 2/4] Bump to latest Rubocop version --- .rubocop.yml | 16 ++++++++++++++++ Gemfile | 5 ++++- ext/x25519_precomputed/extconf.rb | 2 +- spec/x25519/montgomery_u_spec.rb | 4 ++-- spec/x25519/scalar_spec.rb | 8 ++++---- spec/x25519_spec.rb | 4 ++-- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 8daa6b4..32c45ae 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,12 @@ +require: + - rubocop-performance + - rubocop-rake + - rubocop-rspec + AllCops: TargetRubyVersion: 2.5 DisplayCopNames: true + NewCops: enable # # Metrics @@ -36,3 +42,13 @@ Style/FrozenStringLiteralComment: Style/StringLiterals: EnforcedStyle: double_quotes + +# +# RSpec +# + +RSpec/MultipleExpectations: + Max: 3 + +RSpec/ExampleLength: + Max: 6 diff --git a/Gemfile b/Gemfile index b6de11b..b8fc712 100644 --- a/Gemfile +++ b/Gemfile @@ -8,5 +8,8 @@ group :development, :test do gem "rake", require: false gem "rake-compiler", "~> 1.0", require: false gem "rspec", "~> 3.10", require: false - gem "rubocop", "1.18", require: false + gem "rubocop", "1.68", require: false + gem "rubocop-performance", "1.23.0", require: false + gem "rubocop-rake", "0.6.0", require: false + gem "rubocop-rspec", "3.2.0", require: false end diff --git a/ext/x25519_precomputed/extconf.rb b/ext/x25519_precomputed/extconf.rb index b049f98..4771360 100644 --- a/ext/x25519_precomputed/extconf.rb +++ b/ext/x25519_precomputed/extconf.rb @@ -4,7 +4,7 @@ require "mkmf" -if RUBY_PLATFORM =~ /x86_64|x64/ +if RUBY_PLATFORM.match?(/x86_64|x64/) $CFLAGS << " -Wall -O3 -pedantic -std=c99 -mbmi -mbmi2 -march=haswell" create_makefile "x25519_precomputed" diff --git a/spec/x25519/montgomery_u_spec.rb b/spec/x25519/montgomery_u_spec.rb index b8c3beb..824b3a8 100644 --- a/spec/x25519/montgomery_u_spec.rb +++ b/spec/x25519/montgomery_u_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true RSpec.describe X25519::MontgomeryU do - let(:coordinate_hex) { "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c" } - subject(:point) { described_class.new(unhex(coordinate_hex)) } + let(:coordinate_hex) { "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c" } + describe "#to_bytes" do it "serializes #{described_class} as a Encoding::BINARY String" do bytes = point.to_bytes diff --git a/spec/x25519/scalar_spec.rb b/spec/x25519/scalar_spec.rb index 64a73ac..c809c59 100644 --- a/spec/x25519/scalar_spec.rb +++ b/spec/x25519/scalar_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true RSpec.describe X25519::Scalar do - let(:scalar_hex) { "a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4" } - subject(:scalar) { described_class.new(unhex(scalar_hex)) } + let(:scalar_hex) { "a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4" } + describe ".generate" do it "generates random keys" do # Not great, but better than nothing @@ -21,7 +21,7 @@ expect { scalar.multiply("derp") }.to raise_error(TypeError) end - context "RFC 7748 test vectors" do + context "with RFC 7748 test vectors" do it "passes the test vectors" do X25519::TestVectors::VARIABLE_BASE.each do |v| scalar = described_class.new(unhex(v.scalar)) @@ -35,7 +35,7 @@ end describe "#multiply_base" do - context "RFC 7748 test vectors" do + context "with RFC 7748 test vectors" do it "passes the test vectors" do X25519::TestVectors::FIXED_BASE.each do |v| scalar = described_class.new(unhex(v.scalar)) diff --git a/spec/x25519_spec.rb b/spec/x25519_spec.rb index 3c0dbf7..d943703 100644 --- a/spec/x25519_spec.rb +++ b/spec/x25519_spec.rb @@ -2,7 +2,7 @@ RSpec.describe X25519 do it "has a version number" do - expect(described_class::VERSION).not_to be nil + expect(described_class::VERSION).not_to be_nil end describe ".diffie_hellman" do @@ -24,7 +24,7 @@ end.to raise_error(X25519::InvalidKeyError) end - context "RFC 7748 test vectors" do + context "with RFC 7748 test vectors" do it "passes the test vectors" do X25519::TestVectors::VARIABLE_BASE.each do |v| shared_secret = described_class.diffie_hellman(unhex(v.scalar), unhex(v.input_coord)) From 113da41bdeebd77bb835453a4bba0f0f03344e87 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 23 Nov 2024 23:30:03 +0100 Subject: [PATCH 3/4] Test with latest Ruby versions --- .github/workflows/ci.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index efbe593..7b1db0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,6 @@ on: paths-ignore: - README.md push: - branches: main paths-ignore: - README.md @@ -16,14 +15,19 @@ jobs: test: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: ruby: - ruby-2.5 - ruby-2.6 - ruby-2.7 - ruby-3.0 + - ruby-3.1 + - ruby-3.2 + - ruby-3.3 + - ruby-head steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} @@ -34,7 +38,7 @@ jobs: rubocop: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: 2.5 From 1dc7e8a0e8f7aca3052d6749712828203e40437a Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 23 Nov 2024 23:36:12 +0100 Subject: [PATCH 4/4] Drop support for Ruby 2.5/2.6 --- .github/workflows/ci.yml | 4 +--- .rubocop.yml | 2 +- x25519.gemspec | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b1db0c..08c108d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,8 +18,6 @@ jobs: fail-fast: false matrix: ruby: - - ruby-2.5 - - ruby-2.6 - ruby-2.7 - ruby-3.0 - ruby-3.1 @@ -41,6 +39,6 @@ jobs: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.5 + ruby-version: 2.7 bundler-cache: true - run: bundle exec rubocop --format progress --color diff --git a/.rubocop.yml b/.rubocop.yml index 32c45ae..866e708 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -4,7 +4,7 @@ require: - rubocop-rspec AllCops: - TargetRubyVersion: 2.5 + TargetRubyVersion: 2.7 DisplayCopNames: true NewCops: enable diff --git a/x25519.gemspec b/x25519.gemspec index fb5bf01..dab8d83 100644 --- a/x25519.gemspec +++ b/x25519.gemspec @@ -19,5 +19,5 @@ Gem::Specification.new do |spec| spec.platform = Gem::Platform::RUBY spec.extensions = ["ext/x25519_precomputed/extconf.rb", "ext/x25519_ref10/extconf.rb"] - spec.required_ruby_version = ">= 2.5" + spec.required_ruby_version = ">= 2.7" end