Skip to content

Commit f3fea74

Browse files
committed
Fix vapid key to_pem and add tests
1 parent 061ff9a commit f3fea74

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

lib/webpush/vapid_key.rb

+8-3
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,15 @@ def to_h
7878
alias to_hash to_h
7979

8080
def to_pem
81-
public_key = OpenSSL::PKey::EC.new curve
82-
public_key.private_key = nil
81+
private_key_to_pem + public_key_to_pem
82+
end
83+
84+
def private_key_to_pem
85+
curve.to_pem
86+
end
8387

84-
curve.to_pem + public_key.to_pem
88+
def public_key_to_pem
89+
curve.public_to_pem
8590
end
8691

8792
def inspect

spec/webpush/vapid_key_spec.rb

+29
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,35 @@
4343
expect(pem).to include('-----BEGIN PUBLIC KEY-----')
4444
end
4545

46+
it 'returns the correct public and private keys in pem format' do
47+
public_key_base64 = 'BMA-wciFTkEq2waVGB2hg8cSyiRiMcsIvIYQb3LkLOmBheh3YC6NB2GtE9t6YgaXt428rp7bC9JjuPtAY9AQaR8='
48+
private_key_base64 = '4MwLvN1Cpxe43AV9fa4BiS-SPp51gWlhv9c6bb_XSJ4='
49+
key = Webpush::VapidKey.from_keys(public_key_base64, private_key_base64)
50+
pem = key.to_pem
51+
expected_pem = <<~PEM
52+
-----BEGIN EC PRIVATE KEY-----
53+
MHcCAQEEIODMC7zdQqcXuNwFfX2uAYkvkj6edYFpYb/XOm2/10ieoAoGCCqGSM49
54+
AwEHoUQDQgAEwD7ByIVOQSrbBpUYHaGDxxLKJGIxywi8hhBvcuQs6YGF6HdgLo0H
55+
Ya0T23piBpe3jbyuntsL0mO4+0Bj0BBpHw==
56+
-----END EC PRIVATE KEY-----
57+
-----BEGIN PUBLIC KEY-----
58+
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwD7ByIVOQSrbBpUYHaGDxxLKJGIx
59+
ywi8hhBvcuQs6YGF6HdgLo0HYa0T23piBpe3jbyuntsL0mO4+0Bj0BBpHw==
60+
-----END PUBLIC KEY-----
61+
PEM
62+
expect(pem).to eq(expected_pem)
63+
end
64+
65+
it 'can return the private key in pem format' do
66+
pem = Webpush::VapidKey.new.private_key_to_pem
67+
expect(pem).to include('-----BEGIN EC PRIVATE KEY-----')
68+
end
69+
70+
it 'can return the public key in pem format' do
71+
pem = Webpush::VapidKey.new.public_key_to_pem
72+
expect(pem).to include('-----BEGIN PUBLIC KEY-----')
73+
end
74+
4675
it 'imports pem of public and private keys' do
4776
pem = Webpush::VapidKey.new.to_pem
4877
key = Webpush::VapidKey.from_pem pem

webpush.gemspec

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ Gem::Specification.new do |spec|
1616
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
1717
spec.require_paths = ['lib']
1818

19-
spec.required_ruby_version = '>= 2.2'
19+
spec.required_ruby_version = '>= 2.3'
2020

2121
spec.add_dependency 'hkdf', '~> 0.2'
2222
spec.add_dependency 'jwt', '~> 2.0'
23+
spec.add_dependency 'openssl', '~> 2.2'
2324

2425
spec.add_development_dependency 'bundler', '>= 1.17.3'
2526
spec.add_development_dependency 'pry'

0 commit comments

Comments
 (0)