Hello community,
here is the log from the commit of package rubygem-aes_key_wrap for
openSUSE:Factory checked in at 2020-10-05 19:29:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-aes_key_wrap (Old)
and /work/SRC/openSUSE:Factory/.rubygem-aes_key_wrap.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-aes_key_wrap"
Mon Oct 5 19:29:40 2020 rev:2 rq:838018 version:1.1.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/rubygem-aes_key_wrap/rubygem-aes_key_wrap.changes
2018-05-08 13:37:18.605617826 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-aes_key_wrap.new.4249/rubygem-aes_key_wrap.changes
2020-10-05 19:29:48.152524165 +0200
@@ -1,0 +2,6 @@
+Fri Sep 25 13:24:52 UTC 2020 - Stephan Kulow <[email protected]>
+
+updated to version 1.1.0
+ no changelog found
+
+-------------------------------------------------------------------
Old:
----
aes_key_wrap-1.0.1.gem
New:
----
aes_key_wrap-1.1.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-aes_key_wrap.spec ++++++
--- /var/tmp/diff_new_pack.nBda30/_old 2020-10-05 19:29:49.916525868 +0200
+++ /var/tmp/diff_new_pack.nBda30/_new 2020-10-05 19:29:49.920525872 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-aes_key_wrap
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@@ -24,7 +24,7 @@
#
Name: rubygem-aes_key_wrap
-Version: 1.0.1
+Version: 1.1.0
Release: 0
%define mod_name aes_key_wrap
%define mod_full_name %{mod_name}-%{version}
@@ -32,7 +32,7 @@
BuildRequires: %{rubygem gem2rpm}
BuildRequires: %{ruby}
BuildRequires: ruby-macros >= 5
-Url: https://github.com/tomdalling/aes_key_wrap
+URL: https://github.com/tomdalling/aes_key_wrap
Source: https://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: A Ruby implementation of AES Key Wrap, a.k.a RFC 3394, a.k.a
NIST
@@ -48,7 +48,7 @@
%install
%gem_install \
- --doc-files="LICENSE.txt README.md" \
+ --doc-files="CHANGELOG.md LICENSE.txt README.md" \
-f
%gem_packages
++++++ aes_key_wrap-1.0.1.gem -> aes_key_wrap-1.1.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.rspec new/.rspec
--- old/.rspec 2015-04-24 16:55:59.000000000 +0200
+++ new/.rspec 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
---format documentation
---color
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.ruby-version new/.ruby-version
--- old/.ruby-version 2015-04-24 16:55:59.000000000 +0200
+++ new/.ruby-version 2020-07-11 17:11:09.000000000 +0200
@@ -1 +1 @@
-2.2.0
+2.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2015-04-24 16:55:59.000000000 +0200
+++ new/.travis.yml 2020-07-11 17:11:09.000000000 +0200
@@ -1 +1,22 @@
+script: bundle exec ruby test/aes_key_wrap.rb
language: ruby
+
+# test on old rubies
+rvm:
+ - 2.3.8
+ - 2.4.10
+ - 2.5.8
+ - 2.6.6
+
+# run latest ruby differently (run codeclimate)
+matrix:
+ include:
+ - rvm: 2.7.1
+ # code climate config
+ env:
CC_TEST_REPORTER_ID=112d90dacd3bbf36bbf39282309a52581175ae544be2cf8ef3b8c0c0221515f5
+ before_script:
+ - curl -L
https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
> ./cc-test-reporter
+ - chmod +x ./cc-test-reporter
+ - ./cc-test-reporter before-build
+ after_script:
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100
+++ new/CHANGELOG.md 2020-07-11 17:11:09.000000000 +0200
@@ -0,0 +1,21 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a
Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic
Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [1.1.0] - 2020-07-12
+### Added
+- IV arguments can be either `String`s or `Integer`s. Previously, they could
+ only be `Integer`s. This is a backwards-compatible addition as long as you
+ aren't doing something freaky with IVs, like using negative numbers (they are
+ supposed to be unsigned).
+
+## [1.0.1] - 2015-04-24
+### Fixed
+- Didn't work unless you had `require 'openssl'` somewhere first. The gem now
+ `require`s its own dependencies, surprising no one.
+
+## [1.0.0] - 2015-04-24
+### Added
+- Everything (Initial release)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2015-04-24 16:55:59.000000000 +0200
+++ new/README.md 2020-07-11 17:11:09.000000000 +0200
@@ -1,4 +1,5 @@
[](https://travis-ci.org/tomdalling/aes_key_wrap)
+[](https://codeclimate.com/github/tomdalling/aes_key_wrap)
# AESKeyWrap
@@ -14,20 +15,22 @@
```ruby
require 'aes_key_wrap'
+
plaintext_key = ['00112233445566778899AABBCCDDEEFF'].pack('H*') #binary string
kek = ['000102030405060708090A0B0C0D0E0F'].pack('H*') # binary string
-iv = 0xDEADBEEFC0FFEEEE
-wrapped_key = AESKeyWrap.wrap(plaintext_key, kek, iv)
+iv = ['DEADBEEFC0FFEEEE'].pack("H*") # binary string (always 8 bytes)
+
+wrapped_key = AESKeyWrap.wrap(plaintext_key, kek, iv) # iv is optional
```
To unwrap a key, call `AESKeyWrap.unwrap`:
```ruby
-unwrapped = AESKeyWrap.unwrap(wrapped_key, kek, iv)
+unwrapped = AESKeyWrap.unwrap(wrapped_key, kek, iv) # iv is optional
```
-There also `unwrap!`, which throws an exception if unwrapping
-fails, instead of returning nil.
+There also `unwrap!`, which throws an exception if unwrapping fails, instead of
+returning nil.
## Contributing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Rakefile new/Rakefile
--- old/Rakefile 2015-04-24 16:55:59.000000000 +0200
+++ new/Rakefile 1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-require "bundler/gem_tasks"
-
-begin
- require 'rspec/core/rake_task'
- RSpec::Core::RakeTask.new(:spec)
-rescue LoadError
-end
-
-task :default => :spec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aes_key_wrap.gemspec new/aes_key_wrap.gemspec
--- old/aes_key_wrap.gemspec 2015-04-24 16:55:59.000000000 +0200
+++ new/aes_key_wrap.gemspec 2020-07-11 17:11:09.000000000 +0200
@@ -16,7 +16,11 @@
spec.files = `git ls-files -z`.split("\x0").reject { |f|
f.match(%r{^(test|spec|features)/}) }
spec.require_paths = ['lib']
- spec.add_development_dependency 'rake', '~> 10.0'
- spec.add_development_dependency 'rspec', '~> 3.2.0'
+ spec.add_development_dependency 'test_bench', '~> 1.0'
+ spec.add_development_dependency 'gem-release'
+
+ # code climate doesn't support v0.18+
+ # see: https://github.com/codeclimate/test-reporter/issues/413
+ spec.add_development_dependency 'simplecov', '< 0.18'
end
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/aes_key_wrap/version.rb
new/lib/aes_key_wrap/version.rb
--- old/lib/aes_key_wrap/version.rb 2015-04-24 16:55:59.000000000 +0200
+++ new/lib/aes_key_wrap/version.rb 2020-07-11 17:11:09.000000000 +0200
@@ -1,3 +1,3 @@
module AESKeyWrap
- VERSION = '1.0.1'
+ VERSION = '1.1.0'
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/aes_key_wrap.rb new/lib/aes_key_wrap.rb
--- old/lib/aes_key_wrap.rb 2015-04-24 16:55:59.000000000 +0200
+++ new/lib/aes_key_wrap.rb 2020-07-11 17:11:09.000000000 +0200
@@ -5,6 +5,8 @@
#
module AESKeyWrap
DEFAULT_IV = 0xA6A6A6A6A6A6A6A6
+ IV_SIZE = 8 # bytes
+
UnwrapFailedError = Class.new(StandardError)
class << self
@@ -18,7 +20,9 @@
#
# @param unwrapped_key [String] The plaintext key to be wrapped, as a
binary string
# @param kek [String] The key-encrypting key, as a binary_string
- # @param iv [Integer] The "initial value", as unsigned 64bit integer
+ # @param iv [Integer, String] The "initial value", as either an unsigned
+ # 64-bit integer (e.g. `0xDEADBEEFC0FFEEEE`) or an 8-byte string (e.g.
+ # `"\xDE\xAD\xBE\xEF\xC0\xFF\xEE\xEE"`).
# @return [String] The wrapped key, as a binary string
#
def wrap(unwrapped_key, kek, iv=DEFAULT_IV)
@@ -31,7 +35,7 @@
# n: block_count
# AES: aes(:encrypt, _, _)
# IV: iv
- buffer = [iv] + unwrapped_key.unpack('Q>*')
+ buffer = [coerce_uint64(iv)] + unwrapped_key.unpack('Q>*')
block_count = buffer.size - 1
# 2) Calculate intermediate values.
@@ -61,10 +65,12 @@
#
# @param wrapped_key [String] The wrapped key (cyphertext), as a binary
string
# @param kek [String] The key-encrypting key, as a binary string
- # @param expected_iv [Integer] The IV used to wrap the key, as an unsigned
64bit integer
+ # @param expected_iv [Integer, String] The IV used to wrap the key, as
either
+ # an unsigned 64-bit integer (e.g. `0xDEADBEEFC0FFEEEE`) or an 8-byte
+ # string (e.g. `"\xDE\xAD\xBE\xEF\xC0\xFF\xEE\xEE"`).
# @return [String] The unwrapped (plaintext) key as a binary string, or
- # `nil` if unwrapping failed due to `expected_iv` not
matching the
- # decrypted IV
+ # `nil` if unwrapping failed due to `expected_iv` not matching the
+ # decrypted IV
#
# @see #unwrap!
#
@@ -95,7 +101,7 @@
end
# 3) Output the results.
- if buffer[0] == expected_iv
+ if buffer[0] == coerce_uint64(expected_iv)
buffer.drop(1).pack('Q>*')
else
nil
@@ -113,6 +119,8 @@
private
+ MAX_UINT64 = 0xFFFFFFFFFFFFFFFF
+
def aes(encrypt_or_decrypt, key, data)
decipher = OpenSSL::Cipher::AES.new(key.bytesize * 8, :ECB)
decipher.send(encrypt_or_decrypt)
@@ -121,6 +129,27 @@
decipher.update(data) + decipher.final
end
+
+ def coerce_uint64(value)
+ case value
+ when Integer
+ if value > MAX_UINT64
+ raise ArgumentError, "IV is too large to fit in a 64-bit unsigned
integer"
+ elsif value < 0
+ raise ArgumentError, "IV is not an unsigned integer (it's
negative)"
+ else
+ value
+ end
+ when String
+ if value.bytesize == IV_SIZE
+ value.unpack("Q>").first
+ else
+ raise ArgumentError, "IV is not #{IV_SIZE} bytes long"
+ end
+ else
+ raise ArgumentError, "IV is not valid: #{value.inspect}"
+ end
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2015-04-24 16:55:59.000000000 +0200
+++ new/metadata 2020-07-11 17:11:09.000000000 +0200
@@ -1,43 +1,57 @@
--- !ruby/object:Gem::Specification
name: aes_key_wrap
version: !ruby/object:Gem::Version
- version: 1.0.1
+ version: 1.1.0
platform: ruby
authors:
- Tom Dalling
autorequire:
bindir: bin
cert_chain: []
-date: 2015-04-24 00:00:00.000000000 Z
+date: 2020-07-11 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
- name: rake
+ name: test_bench
requirement: !ruby/object:Gem::Requirement
requirements:
- - "~>"
- !ruby/object:Gem::Version
- version: '10.0'
+ version: '1.0'
type: :development
prerelease: false
version_requirements: !ruby/object:Gem::Requirement
requirements:
- - "~>"
- !ruby/object:Gem::Version
- version: '10.0'
+ version: '1.0'
- !ruby/object:Gem::Dependency
- name: rspec
+ name: gem-release
requirement: !ruby/object:Gem::Requirement
requirements:
- - - "~>"
+ - - ">="
- !ruby/object:Gem::Version
- version: 3.2.0
+ version: '0'
type: :development
prerelease: false
version_requirements: !ruby/object:Gem::Requirement
requirements:
- - - "~>"
+ - - ">="
+ - !ruby/object:Gem::Version
+ version: '0'
+- !ruby/object:Gem::Dependency
+ name: simplecov
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - "<"
+ - !ruby/object:Gem::Version
+ version: '0.18'
+ type: :development
+ prerelease: false
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - "<"
- !ruby/object:Gem::Version
- version: 3.2.0
+ version: '0.18'
description:
email:
- [email protected]
@@ -46,13 +60,12 @@
extra_rdoc_files: []
files:
- ".gitignore"
-- ".rspec"
- ".ruby-version"
- ".travis.yml"
+- CHANGELOG.md
- Gemfile
- LICENSE.txt
- README.md
-- Rakefile
- aes_key_wrap.gemspec
- bin/console
- bin/setup
@@ -77,10 +90,8 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubyforge_project:
-rubygems_version: 2.4.5
+rubygems_version: 3.1.2
signing_key:
specification_version: 4
summary: A Ruby implementation of AES Key Wrap, a.k.a RFC 3394, a.k.a NIST Key
Wrap.
test_files: []
-has_rdoc: