Skip to content

Commit 20f40d9

Browse files
committed
Fix vapid key to_pem and add tests
1 parent ef1ebb3 commit 20f40d9

File tree

4 files changed

+39
-5
lines changed

4 files changed

+39
-5
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ env:
33
- CC_TEST_REPORTER_ID=155202524386dfebe0c3267a5c868b5417ff4cc2cde8ed301fb36b177d46a458
44
language: ruby
55
rvm:
6-
- 2.2
76
- 2.3
87
- 2.4
98
- 2.5

lib/web_push/vapid_key.rb

Lines changed: 8 additions & 3 deletions
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/web_push/vapid_key_spec.rb

Lines changed: 29 additions & 0 deletions
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

web-push.gemspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ Gem::Specification.new do |spec|
1111

1212
spec.files = `git ls-files`.split("\n")
1313

14-
spec.required_ruby_version = '>= 2.2'
14+
spec.required_ruby_version = '>= 2.3'
1515

1616
spec.add_dependency 'hkdf', '~> 0.2'
1717
spec.add_dependency 'jwt', '~> 2.0'
18+
spec.add_dependency 'openssl', '~> 2.2'
1819

1920
spec.add_development_dependency 'bundler', '>= 1.17.3'
2021
spec.add_development_dependency 'pry'

0 commit comments

Comments
 (0)