cose 0.3.0 → 0.4.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: 0eb0523fe9b7196988a95f1055ad305d36f6cad45337c344d9b2a55d2f42465e
4
- data.tar.gz: 181105f066d6797199b8c495dfc3e4552248692e95c360a77fafad4c0a501046
3
+ metadata.gz: 05132ebf44cbd8025419363e4f7225a55e28896b9db9c61e490866bdf7ca7d1d
4
+ data.tar.gz: 5656845e945fa562609f59c05a417a433c2d92f771395727634d7ea1ebc71838
5
5
  SHA512:
6
- metadata.gz: 423c129d28fca26cdf359deff30dc9cb9a45dce499df15d2607010dc1cbdd4e3aacfb79609d90b6b4e0dff758cf0b375b93cc871a42e4871e89812e04088d0ad
7
- data.tar.gz: 13add48d5e31fad84eb20d42805163de9a993ccec0b02bc0d6da0b4b19390db55064f58a1446421a227307e62b231d412e73bb7f0bb8919091316911d7a8cc10
6
+ metadata.gz: d8c048d5f991c86a246d2ab7384717be17f86edaddbcd4c1f4ce2dbd3b8b25d66b85831ce3b9c5d02f0ce033abeac84b457397d5bb1df540aebd3693b659ee60
7
+ data.tar.gz: '01953ba4ed4d5734ad0044b3e8735dad85f95407663ad52c04a1d306094c8cdf6b01943c55813eb87ae56688098a6d8cef364c096e9d393b4f1ff2a7873bafd4'
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.4.0] - 2019-03-12
4
+
5
+ ### Added
6
+
7
+ - RSA public key deserialization
8
+ - Key type-agnostic deserialization
9
+
10
+ ### Changed
11
+
12
+ - Keys `.from_cbor` methods changed to `.deserialize`
13
+
3
14
  ## [v0.3.0] - 2019-03-09
4
15
 
5
16
  ### Added
@@ -28,6 +39,7 @@
28
39
  - EC2 key object
29
40
  - Works with ruby 2.5
30
41
 
42
+ [v0.4.0]: https://github.com/cedarcode/cose-ruby/compare/v0.3.0...v0.4.0/
31
43
  [v0.3.0]: https://github.com/cedarcode/cose-ruby/compare/v0.2.0...v0.3.0/
32
44
  [v0.2.0]: https://github.com/cedarcode/cose-ruby/compare/v0.1.0...v0.2.0/
33
45
  [v0.1.0]: https://github.com/cedarcode/cose-ruby/compare/5725d9b5db978f19a21bd59182f092d31a118eff...v0.1.0/
data/README.md CHANGED
@@ -25,12 +25,31 @@ Or install it yourself as:
25
25
 
26
26
  ### Key Objects
27
27
 
28
+ ```ruby
29
+ cbor_data = "..."
30
+
31
+ key = COSE::Key.deserialize(cbor_data)
32
+
33
+ case key.class
34
+ when COSE::Key::EC2
35
+ key.curve
36
+ key.x_coordinate
37
+ key.y_coordinate
38
+ key.d_coordinate
39
+ when COSE::Key::RSA
40
+ key.modulus_n
41
+ key.public_exponent_e
42
+ when COSE::Key::Symmetric
43
+ key.key_value
44
+ end
45
+ ```
46
+
28
47
  #### EC2
29
48
 
30
49
  ```ruby
31
50
  cbor_data = "..."
32
51
 
33
- key = COSE::Key::EC2.from_cbor(cbor_data)
52
+ key = COSE::Key::EC2.deserialize(cbor_data)
34
53
 
35
54
  key.curve
36
55
  key.x_coordinate
@@ -43,11 +62,22 @@ key.d_coordinate
43
62
  ```ruby
44
63
  cbor_data = "..."
45
64
 
46
- key = COSE::Key::Symmetric.from_cbor(cbor_data)
65
+ key = COSE::Key::Symmetric.deserialize(cbor_data)
47
66
 
48
67
  key.key_value
49
68
  ```
50
69
 
70
+ #### RSA
71
+
72
+ ```ruby
73
+ cbor_data = "..."
74
+
75
+ key = COSE::Key::RSA.deserialize(cbor_data)
76
+
77
+ key.modulus_n
78
+ key.public_exponent_e
79
+ ```
80
+
51
81
  ### Signing Objects
52
82
 
53
83
  #### COSE_Sign
@@ -0,0 +1,27 @@
1
+ require "cbor"
2
+ require "cose/key/ec2"
3
+ require "cose/key/rsa"
4
+ require "cose/key/symmetric"
5
+
6
+ module COSE
7
+ class UnknownKeyType < StandardError; end
8
+
9
+ module Key
10
+ LABEL_KTY = 1
11
+
12
+ def self.deserialize(data)
13
+ map = CBOR.decode(data)
14
+
15
+ case map[LABEL_KTY]
16
+ when COSE::Key::EC2::KTY_EC2
17
+ COSE::Key::EC2.from_map(map)
18
+ when COSE::Key::RSA::KTY_RSA
19
+ COSE::Key::RSA.from_map(map)
20
+ when COSE::Key::Symmetric::KTY_SYMMETRIC
21
+ COSE::Key::Symmetric.from_map(map)
22
+ else
23
+ raise UnknownKeyType, "Unsupported or unknown key type #{map[LABEL_KTY]}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -5,14 +5,12 @@ require "cbor"
5
5
  module COSE
6
6
  module Key
7
7
  class Base
8
- KTY_LABEL = 1
9
-
10
- def self.from_cbor(cbor)
8
+ def self.deserialize(cbor)
11
9
  from_map(CBOR.decode(cbor))
12
10
  end
13
11
 
14
12
  def self.enforce_type(map, kty, error_message)
15
- if map[KTY_LABEL] != kty
13
+ if map[LABEL_KTY] != kty
16
14
  raise error_message
17
15
  end
18
16
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cose/key/base"
4
+
5
+ module COSE
6
+ module Key
7
+ class RSA < Base
8
+ LABEL_N = -1
9
+ LABEL_E = -2
10
+
11
+ KTY_RSA = 3
12
+
13
+ attr_reader :modulus_n, :public_exponent_e
14
+
15
+ def initialize(modulus_n:, public_exponent_e:)
16
+ if !modulus_n
17
+ raise ArgumentError, "Required modulus_n is missing"
18
+ elsif !public_exponent_e
19
+ raise ArgumentError, "Required public_exponent_e is missing"
20
+ else
21
+ @modulus_n = modulus_n
22
+ @public_exponent_e = public_exponent_e
23
+ end
24
+ end
25
+
26
+ def self.from_map(map)
27
+ enforce_type(map, KTY_RSA, "Not an RSA key")
28
+
29
+ new(modulus_n: map[LABEL_N], public_exponent_e: map[LABEL_E])
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module COSE
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.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.3.0
4
+ version: 0.4.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-03-09 00:00:00.000000000 Z
12
+ date: 2019-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cbor
@@ -124,8 +124,10 @@ files:
124
124
  - lib/cose.rb
125
125
  - lib/cose/encrypt.rb
126
126
  - lib/cose/encrypt0.rb
127
+ - lib/cose/key.rb
127
128
  - lib/cose/key/base.rb
128
129
  - lib/cose/key/ec2.rb
130
+ - lib/cose/key/rsa.rb
129
131
  - lib/cose/key/symmetric.rb
130
132
  - lib/cose/mac.rb
131
133
  - lib/cose/mac0.rb