Class: Webpush::VapidKey
- Inherits:
-
Object
- Object
- Webpush::VapidKey
- Defined in:
- lib/webpush/vapid_key.rb
Overview
Class for abstracting the generation and encoding of elliptic curve public and private keys for use with the VAPID protocol
Instance Attribute Summary collapse
-
#:curve ⇒ OpenSSL::PKey::EC
readonly
the OpenSSL elliptic curve instance.
-
#curve ⇒ Object
readonly
Returns the value of attribute curve.
Class Method Summary collapse
-
.from_keys(public_key, private_key) ⇒ Webpush::VapidKey
Create a VapidKey instance from encoded elliptic curve public and private keys.
Instance Method Summary collapse
- #curve_name ⇒ Object
- #group ⇒ Object
-
#initialize ⇒ VapidKey
constructor
A new instance of VapidKey.
- #inspect ⇒ Object
-
#private_key ⇒ String
Retrive the encoded elliptic curve private key for VAPID protocol.
- #private_key=(key) ⇒ Object
-
#public_key ⇒ String
Retrieve the encoded elliptic curve public key for VAPID protocol.
- #public_key=(key) ⇒ Object
-
#public_key_for_push_header ⇒ String
Retrieve the encoded elliptic curve public key suitable for the Web Push request.
- #to_h ⇒ Object (also: #to_hash)
Constructor Details
#initialize ⇒ VapidKey
Returns a new instance of VapidKey.
19 20 21 22 |
# File 'lib/webpush/vapid_key.rb', line 19 def initialize @curve = OpenSSL::PKey::EC.new('prime256v1') @curve.generate_key end |
Instance Attribute Details
#:curve ⇒ OpenSSL::PKey::EC (readonly)
the OpenSSL elliptic curve instance
5 6 7 |
# File 'lib/webpush/vapid_key.rb', line 5
def :curve
@:curve
end
|
#curve ⇒ Object (readonly)
Returns the value of attribute curve.
17 18 19 |
# File 'lib/webpush/vapid_key.rb', line 17 def curve @curve end |
Class Method Details
.from_keys(public_key, private_key) ⇒ Webpush::VapidKey
Create a VapidKey instance from encoded elliptic curve public and private keys
9 10 11 12 13 14 15 |
# File 'lib/webpush/vapid_key.rb', line 9 def self.from_keys(public_key, private_key) key = new key.public_key = public_key key.private_key = private_key key end |
Instance Method Details
#curve_name ⇒ Object
53 54 55 |
# File 'lib/webpush/vapid_key.rb', line 53 def curve_name group.curve_name end |
#group ⇒ Object
57 58 59 |
# File 'lib/webpush/vapid_key.rb', line 57 def group curve.group end |
#inspect ⇒ Object
66 67 68 |
# File 'lib/webpush/vapid_key.rb', line 66 def inspect "#<#{self.class}:#{object_id.to_s(16)} #{to_h.map { |k, v| ":#{k}=#{v}" }.join(" ")}>" end |
#private_key ⇒ String
Retrive the encoded elliptic curve private key for VAPID protocol
41 42 43 |
# File 'lib/webpush/vapid_key.rb', line 41 def private_key encode64(curve.private_key.to_s(2)) end |
#private_key=(key) ⇒ Object
49 50 51 |
# File 'lib/webpush/vapid_key.rb', line 49 def private_key=(key) curve.private_key = to_big_num(key) end |
#public_key ⇒ String
Retrieve the encoded elliptic curve public key for VAPID protocol
27 28 29 |
# File 'lib/webpush/vapid_key.rb', line 27 def public_key encode64(curve.public_key.to_bn.to_s(2)) end |
#public_key=(key) ⇒ Object
45 46 47 |
# File 'lib/webpush/vapid_key.rb', line 45 def public_key=(key) curve.public_key = OpenSSL::PKey::EC::Point.new(group, to_big_num(key)) end |
#public_key_for_push_header ⇒ String
Retrieve the encoded elliptic curve public key suitable for the Web Push request
34 35 36 |
# File 'lib/webpush/vapid_key.rb', line 34 def public_key_for_push_header trim_encode64(curve.public_key.to_bn.to_s(2)) end |
#to_h ⇒ Object Also known as: to_hash
61 62 63 |
# File 'lib/webpush/vapid_key.rb', line 61 def to_h { public_key: public_key, private_key: private_key } end |