Class: JOSE::JWK::KTY_oct
- Inherits:
-
Struct
- Object
- Struct
- JOSE::JWK::KTY_oct
- Defined in:
- lib/jose/jwk/kty_oct.rb
Instance Attribute Summary collapse
-
#oct ⇒ Object
Returns the value of attribute oct.
Class Method Summary collapse
-
.from_map(fields) ⇒ Object
JOSE::JWK callbacks.
-
.from_oct(binary) ⇒ Object
API functions.
- .generate_key(size) ⇒ Object
Instance Method Summary collapse
-
#block_encryptor(fields, plain_text) ⇒ Object
JOSE::JWK::KTY callbacks.
- #derive_key ⇒ Object
- #generate_key(fields) ⇒ Object
- #key_encryptor(fields, key) ⇒ Object
- #sign(message, digest_type) ⇒ Object
- #signer(fields = nil, plain_text = nil) ⇒ Object
- #to_key ⇒ Object
- #to_map(fields) ⇒ Object
- #to_oct ⇒ Object
- #to_public_map(fields) ⇒ Object
- #to_thumbprint_map(fields) ⇒ Object
- #verify(message, digest_type, signature) ⇒ Object
Instance Attribute Details
#oct ⇒ Object
Returns the value of attribute oct
1 2 3 |
# File 'lib/jose/jwk/kty_oct.rb', line 1 def oct @oct end |
Class Method Details
.from_map(fields) ⇒ Object
JOSE::JWK callbacks
5 6 7 8 9 10 11 |
# File 'lib/jose/jwk/kty_oct.rb', line 5 def self.from_map(fields) if fields['kty'] == 'oct' and fields['k'].is_a?(String) return JOSE::JWK::KTY_oct.new(JOSE.urlsafe_decode64(fields['k'])), fields.except('kty', 'k') else raise ArgumentError, "invalid 'oct' JWK" end end |
.from_oct(binary) ⇒ Object
API functions
91 92 93 94 95 96 97 98 |
# File 'lib/jose/jwk/kty_oct.rb', line 91 def self.from_oct(binary) case binary when String return JOSE::JWK::KTY_oct.new(binary), JOSE::Map[] else raise ArgumentError, "'binary' must be a String" end end |
.generate_key(size) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/jose/jwk/kty_oct.rb', line 56 def self.generate_key(size) if size.is_a?(Array) and size.length == 2 and size[0] == :oct size = size[1] end case size when Integer return from_oct(SecureRandom.random_bytes(size)) else raise ArgumentError, "'size' must be an Integer" end end |
Instance Method Details
#block_encryptor(fields, plain_text) ⇒ Object
JOSE::JWK::KTY callbacks
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/jose/jwk/kty_oct.rb', line 31 def block_encryptor(fields, plain_text) enc = case (oct.bytesize * 8) when 128 'A128GCM' when 192 'A192GCM' when 256 'A256GCM' when 384 'A192CBC-HS384' when 512 'A256CBC-HS512' else raise ArgumentError, "oct of size #{oct.bytesize * 8} has no default block encryptor" end return JOSE::Map[ 'alg' => 'dir', 'enc' => enc ] end |
#derive_key ⇒ Object
52 53 54 |
# File 'lib/jose/jwk/kty_oct.rb', line 52 def derive_key return oct end |
#generate_key(fields) ⇒ Object
68 69 70 71 |
# File 'lib/jose/jwk/kty_oct.rb', line 68 def generate_key(fields) kty, other_fields = JOSE::JWK::KTY_oct.generate_key(oct.bytesize) return kty, fields.delete('kid').merge(other_fields) end |
#key_encryptor(fields, key) ⇒ Object
73 74 75 |
# File 'lib/jose/jwk/kty_oct.rb', line 73 def key_encryptor(fields, key) return JOSE::JWK::KTY.key_encryptor(self, fields, key) end |
#sign(message, digest_type) ⇒ Object
77 78 79 |
# File 'lib/jose/jwk/kty_oct.rb', line 77 def sign(, digest_type) return OpenSSL::HMAC.digest(digest_type.new, oct, ) end |
#signer(fields = nil, plain_text = nil) ⇒ Object
81 82 83 |
# File 'lib/jose/jwk/kty_oct.rb', line 81 def signer(fields = nil, plain_text = nil) return JOSE::Map['alg' => 'HS256'] end |
#to_key ⇒ Object
13 14 15 |
# File 'lib/jose/jwk/kty_oct.rb', line 13 def to_key return oct end |
#to_map(fields) ⇒ Object
17 18 19 |
# File 'lib/jose/jwk/kty_oct.rb', line 17 def to_map(fields) return fields.put('k', JOSE.urlsafe_encode64(oct)).put('kty', 'oct') end |
#to_oct ⇒ Object
100 101 102 |
# File 'lib/jose/jwk/kty_oct.rb', line 100 def to_oct return oct end |
#to_public_map(fields) ⇒ Object
21 22 23 |
# File 'lib/jose/jwk/kty_oct.rb', line 21 def to_public_map(fields) return to_map(fields) end |
#to_thumbprint_map(fields) ⇒ Object
25 26 27 |
# File 'lib/jose/jwk/kty_oct.rb', line 25 def to_thumbprint_map(fields) return to_public_map(fields).slice('k', 'kty') end |
#verify(message, digest_type, signature) ⇒ Object
85 86 87 |
# File 'lib/jose/jwk/kty_oct.rb', line 85 def verify(, digest_type, signature) return JOSE::JWA.constant_time_compare(signature, sign(, digest_type)) end |