cose 0.6.1 → 0.7.0

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: 5417c864087ecc89f9f82bb341050b831b1854de193d0e9724e2a6105cf492ce
4
- data.tar.gz: f74cfbcca9261e14fb1e170d981d18d0281bb817663a7df9484673b22d41da42
3
+ metadata.gz: aceb3ea289c6adab5874f31854aebcf18cd5eed0777852858a4fb3a94ac74f54
4
+ data.tar.gz: a7e16463701f8901a3384cac76b76585927a074c98ec6418ebadf032d2454617
5
5
  SHA512:
6
- metadata.gz: 6377547f6db9eb87814455f4d48a8f84d8fc5df26df0b7d1a0c72f423a0ccbdb1e0f6367fcecf4e34db6025a145479088d89e79abdda7519849d12e4e62b7b48
7
- data.tar.gz: 5227f43154bb5225c2a7354dcd5d0d271df281335e2dcab600c86c5910d37618b6b69473c6d04ee9f9cee1b76b85f789b50852fb2a88a9ae7aa63ed5bd1bb633
6
+ metadata.gz: 8dbcd246e8a1ab365800f802e3b36433a083d7993c769dc35ab6480657550ff34ff4b68cff867ad2e232d06687c97104074b3994030f6d081c3bfca80087ba8b
7
+ data.tar.gz: 10b37822696c206a21e682c706dc2457af5edc49209f1939ae49835ba99c4d62d02e5f62ef0c7149aa78efe28390b91e769521cb65cd31f5608c0f69df9bc34d
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.7.0] - 2019-05-02
4
+
5
+ ### Fixed
6
+
7
+ - `require "cose"` now correctly requires all features
8
+
3
9
  ## [v0.6.1] - 2019-04-06
4
10
 
5
11
  ### Fixed
@@ -73,6 +79,7 @@
73
79
  - EC2 key object
74
80
  - Works with ruby 2.5
75
81
 
82
+ [v0.7.0]: https://github.com/cedarcode/cose-ruby/compare/v0.6.1...v0.7.0/
76
83
  [v0.6.1]: https://github.com/cedarcode/cose-ruby/compare/v0.6.0...v0.6.1/
77
84
  [v0.6.0]: https://github.com/cedarcode/cose-ruby/compare/v0.5.0...v0.6.0/
78
85
  [v0.5.0]: https://github.com/cedarcode/cose-ruby/compare/v0.4.1...v0.5.0/
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "cose/encrypt"
4
+ require "cose/encrypt0"
5
+ require "cose/key"
6
+ require "cose/mac"
7
+ require "cose/mac0"
8
+ require "cose/sign"
9
+ require "cose/sign1"
3
10
  require "cose/version"
4
-
5
- module COSE
6
- # Your code goes here...
7
- end
@@ -0,0 +1,32 @@
1
+ module COSE
2
+ module Key
3
+ # https://tools.ietf.org/html/rfc8152#section-13.1
4
+ Curve = Struct.new(:id, :name, :pkey_name) do
5
+ @curves = {}
6
+
7
+ def self.register(id, name, pkey_name)
8
+ @curves[id] = new(id, name, pkey_name)
9
+ end
10
+
11
+ def self.find(id)
12
+ @curves[id]
13
+ end
14
+
15
+ def self.by_name(name)
16
+ @curves.values.detect { |curve| curve.name == name }
17
+ end
18
+
19
+ def self.by_pkey_name(pkey_name)
20
+ @curves.values.detect { |curve| curve.pkey_name == pkey_name }
21
+ end
22
+
23
+ def value
24
+ id
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ COSE::Key::Curve.register(1, "P-256", "prime256v1")
31
+ COSE::Key::Curve.register(2, "P-384", "secp384r1")
32
+ COSE::Key::Curve.register(3, "P-521", "secp521r1")
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "cose/key/curve"
3
4
  require "cose/key/curve_key"
4
5
  require "openssl"
5
6
 
@@ -9,15 +10,6 @@ module COSE
9
10
  LABEL_Y = -3
10
11
 
11
12
  KTY_EC2 = 2
12
- CRV_P256 = 1
13
- CRV_P384 = 2
14
- CRV_P521 = 3
15
-
16
- PKEY_CURVES = {
17
- CRV_P256 => "prime256v1",
18
- CRV_P384 => "secp384r1",
19
- CRV_P521 => "secp521r1"
20
- }.freeze
21
13
 
22
14
  def self.enforce_type(map)
23
15
  if map[LABEL_KTY] != KTY_EC2
@@ -26,7 +18,7 @@ module COSE
26
18
  end
27
19
 
28
20
  def self.from_pkey(pkey)
29
- curve = PKEY_CURVES.key(pkey.group.curve_name) || raise("Unsupported EC curve #{pkey.group.curve_name}")
21
+ curve = Curve.by_pkey_name(pkey.group.curve_name) || raise("Unsupported EC curve #{pkey.group.curve_name}")
30
22
 
31
23
  case pkey
32
24
  when OpenSSL::PKey::EC::Point
@@ -51,7 +43,7 @@ module COSE
51
43
  d = private_key.to_s(2)
52
44
  end
53
45
 
54
- new(crv: curve, x: x, y: y, d: d)
46
+ new(crv: curve.id, x: x, y: y, d: d)
55
47
  end
56
48
 
57
49
  attr_reader :y
@@ -76,8 +68,8 @@ module COSE
76
68
  end
77
69
 
78
70
  def to_pkey
79
- if PKEY_CURVES[crv]
80
- group = OpenSSL::PKey::EC::Group.new(PKEY_CURVES[crv])
71
+ if curve
72
+ group = OpenSSL::PKey::EC::Group.new(curve.pkey_name)
81
73
  pkey = OpenSSL::PKey::EC.new(group)
82
74
  public_key_bn = OpenSSL::BN.new("\x04" + x + y, 2)
83
75
  public_key_point = OpenSSL::PKey::EC::Point.new(group, public_key_bn)
@@ -93,6 +85,10 @@ module COSE
93
85
  end
94
86
  end
95
87
 
88
+ def curve
89
+ Curve.find(crv)
90
+ end
91
+
96
92
  def self.keyword_arguments_for_initialize(map)
97
93
  super.merge(y: map[LABEL_Y])
98
94
  end
@@ -1,4 +1,5 @@
1
1
  require "cbor"
2
+ require "cose/recipient"
2
3
  require "cose/security_message"
3
4
 
4
5
  module COSE
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module COSE
4
- VERSION = "0.6.1"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gonzalo Rodriguez
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-04-06 00:00:00.000000000 Z
12
+ date: 2019-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cbor
@@ -144,6 +144,7 @@ files:
144
144
  - lib/cose/encrypt0.rb
145
145
  - lib/cose/key.rb
146
146
  - lib/cose/key/base.rb
147
+ - lib/cose/key/curve.rb
147
148
  - lib/cose/key/curve_key.rb
148
149
  - lib/cose/key/ec2.rb
149
150
  - lib/cose/key/okp.rb