push_package 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/push_package.rb +18 -3
- data/lib/push_package/version.rb +1 -1
- data/spec/fixtures/self-signed.pem +53 -0
- data/spec/push_package_spec.rb +20 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ceeed08b5a9b3d2df6e2d0deb154dd29d4802724
|
4
|
+
data.tar.gz: 5a8959ed6ad5ea9e6deb348ad90e2e878d1d8e55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 422bf6d6411be5bc2731166c54ef836c7abceffe3a99ac208f02d105f529c2ce2101919e6ef94b05290cb1edd08604706b83009daf89c00b950bfd28ac8c36be
|
7
|
+
data.tar.gz: 01688a3ef558699b13f42ed3332608fcd0fc7cccad8189b540df535dc65de350274c07f6d696a29d8c45612cae68130af91a5e6aa48c698c945036a9f68ba52e
|
data/lib/push_package.rb
CHANGED
@@ -13,7 +13,7 @@ class PushPackage
|
|
13
13
|
REQUIRED_WEBSITE_PARAMS = ["websiteName", "websitePushID", "allowedDomains", "urlFormatString", "authenticationToken", "webServiceURL"]
|
14
14
|
REQUIRED_ICONSET_FILES = ["icon_16x16.png", "icon_16x16@2x.png", "icon_32x32.png", "icon_32x32@2x.png", "icon_128x128.png", "icon_128x128@2x.png" ]
|
15
15
|
|
16
|
-
attr_reader :
|
16
|
+
attr_reader :certificate, :pkey
|
17
17
|
|
18
18
|
def initialize(website_params, iconset_path, certificate, password = nil, intermediate_cert = nil)
|
19
19
|
raise InvalidParameterError unless valid_website_params?(website_params)
|
@@ -34,7 +34,14 @@ class PushPackage
|
|
34
34
|
#ensure binary data for jruby.
|
35
35
|
cert_data.force_encoding(Encoding::ASCII_8BIT)
|
36
36
|
end
|
37
|
-
|
37
|
+
if pem?(cert_data)
|
38
|
+
@certificate = OpenSSL::X509::Certificate.new(cert_data)
|
39
|
+
@pkey = OpenSSL::PKey::RSA.new(cert_data)
|
40
|
+
else
|
41
|
+
p12 = OpenSSL::PKCS12.new(cert_data, password)
|
42
|
+
@certificate = p12.certificate
|
43
|
+
@pkey = p12.key
|
44
|
+
end
|
38
45
|
|
39
46
|
if intermediate_cert
|
40
47
|
intermediate_cert_data = File.read(intermediate_cert)
|
@@ -92,7 +99,15 @@ class PushPackage
|
|
92
99
|
|
93
100
|
def signature
|
94
101
|
#use the certificate to create a pkcs7 detached signature
|
95
|
-
OpenSSL::PKCS7::sign(@
|
102
|
+
OpenSSL::PKCS7::sign(@certificate, @pkey, manifest_data, @extra_certs, OpenSSL::PKCS7::BINARY | OpenSSL::PKCS7::DETACHED)
|
103
|
+
end
|
104
|
+
|
105
|
+
def pem?(cert_data)
|
106
|
+
begin
|
107
|
+
cert_data =~ /BEGIN CERTIFICATE/ && cert_data =~ /PRIVATE KEY/
|
108
|
+
rescue
|
109
|
+
false
|
110
|
+
end
|
96
111
|
end
|
97
112
|
|
98
113
|
def manifest_data
|
data/lib/push_package/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
Bag Attributes
|
2
|
+
localKeyID: 93 78 7F 99 71 62 1D 88 CD 43 36 22 DA 6B 26 AC 87 B3 AE 9F
|
3
|
+
subject=/C=US/ST=MA/L=Cambridge/O=Twitter/CN=localhost
|
4
|
+
issuer=/C=US/ST=MA/L=Cambridge/O=Twitter/CN=localhost
|
5
|
+
-----BEGIN CERTIFICATE-----
|
6
|
+
MIIDJDCCAgwCCQD1K/B5O4YXDzANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJV
|
7
|
+
UzELMAkGA1UECBMCTUExEjAQBgNVBAcTCUNhbWJyaWRnZTEQMA4GA1UEChMHVHdp
|
8
|
+
dHRlcjESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTE1MTIxMTE2MDUzNVoXDTI1MTIw
|
9
|
+
ODE2MDUzNVowVDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMRIwEAYDVQQHEwlD
|
10
|
+
YW1icmlkZ2UxEDAOBgNVBAoTB1R3aXR0ZXIxEjAQBgNVBAMTCWxvY2FsaG9zdDCC
|
11
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOEGnmjMEgF9ZH9NVXE+IH9u
|
12
|
+
BaL9eafkLQkEcBR/9KNof5XexB23p3+x8L5nvf66cGTZwHMrQgvpOKaiAG3umMn+
|
13
|
+
hyLxO8BqiGO/VMuoHJnN+EX5BNt4lP+UPIQ426enm4bc15tvCTyENG4dE/+Adfjf
|
14
|
+
U4XWKysk1Zdx1tpboP/6bh6p0dCnbOo8J/F0KLFeKfnbShoVsSMqm547BVxMCbaV
|
15
|
+
N4tusSG9/YbtplaRxVhS9v+GoIxu7hlKM4I0c6iddyx6oLE0RepyIncJtB4fO/6J
|
16
|
+
HUsAlQDNAlP6vNnqsPWd7rcgtJGjuMbLB+yL9b68I20yc5ZnBpPCoP6cCzBmpuEC
|
17
|
+
AwEAATANBgkqhkiG9w0BAQUFAAOCAQEAkJYdqe18eotSa0Z/YfHFH4KTJDK0LDu5
|
18
|
+
1ZD5yrr7LfFRt4OA51mG7ALcDpDKpdPlHVEJkZHHPXL0ykRnE3i8/t8RNE7E7SDV
|
19
|
+
1sEJNPFZ/j2HR+eoUjYbT0oMt9+atj+M8Xqdj0EhBUuutf9aLFbyEPiN0ThFxoHx
|
20
|
+
/UeFPKwmAcL7qhKGCAOL399AAm7SO7g5S0TNGdRCvi+Nt+3xi35T6r3xaEjFcG3v
|
21
|
+
J3w4uXLNsG4A4888WkxdfPqDNVoYB1ddapLIiYSKqJQ68z2epuwI1H5fOeEnq3o8
|
22
|
+
WbXpGdELZuViIjFTgN2p23uR7vdHkPvBQgEpoLlZd5O/2IRHnjQpKQ==
|
23
|
+
-----END CERTIFICATE-----
|
24
|
+
Bag Attributes
|
25
|
+
localKeyID: 93 78 7F 99 71 62 1D 88 CD 43 36 22 DA 6B 26 AC 87 B3 AE 9F
|
26
|
+
Key Attributes: <No Attributes>
|
27
|
+
-----BEGIN RSA PRIVATE KEY-----
|
28
|
+
MIIEpQIBAAKCAQEA4QaeaMwSAX1kf01VcT4gf24Fov15p+QtCQRwFH/0o2h/ld7E
|
29
|
+
Hbenf7Hwvme9/rpwZNnAcytCC+k4pqIAbe6Yyf6HIvE7wGqIY79Uy6gcmc34RfkE
|
30
|
+
23iU/5Q8hDjbp6ebhtzXm28JPIQ0bh0T/4B1+N9ThdYrKyTVl3HW2lug//puHqnR
|
31
|
+
0Kds6jwn8XQosV4p+dtKGhWxIyqbnjsFXEwJtpU3i26xIb39hu2mVpHFWFL2/4ag
|
32
|
+
jG7uGUozgjRzqJ13LHqgsTRF6nIidwm0Hh87/okdSwCVAM0CU/q82eqw9Z3utyC0
|
33
|
+
kaO4xssH7Iv1vrwjbTJzlmcGk8Kg/pwLMGam4QIDAQABAoIBAQCxyy38NUkAvlda
|
34
|
+
MfsRZ3n71S1E86tcmO9wUX5Q5Cyhs94ixwkDRelk/m3ts0At9Jb7SAVDuekMSjBF
|
35
|
+
kHhwY3V7G80gMaP5SvMKhND1vJUkfNXuS2uoEKUBLtmFyvrag5ZhvznniJquovJe
|
36
|
+
EkGLva74fVObynT/OLI+X2bXzk/uDy/BiMrYyXWebAO/FLkSja5YECAFOr47B44+
|
37
|
+
jhhy1v5WdCisD+AfRkYhIQaXgY/Ni+sDImF9WwZQzkZ+/vztpYmzfELCe+9sy95B
|
38
|
+
TjeiuzJDZtROM//WfGx+9XpBl5BSQx0eyLunYmryP8jewRUWubOOddjSsxcl0HZF
|
39
|
+
RCHF1t/xAoGBAPm2iodooCCJ0QPpYoISbq1OJuW6qWa4DMyKImHPzd9w3zDb1bzg
|
40
|
+
gzevHC8rAxbZOGVrP0lSDd8x/dhIWWPu1W6LBTxhyzoZ8FhWSJ/fFUC0zgdkFHBg
|
41
|
+
QtDy5Xy7zOFC6hIBqzn9qrNrKTXQqnOd/x8JnqvCjA/c8I15ceCBXM51AoGBAOaw
|
42
|
+
9oGtILuSCEgfGu4HderDQUw3ES/s2a+Bl48AlVEHvygo8+BepNFEMpW3QuKcDn9z
|
43
|
+
HjWYk9+L93pfCAvcg9Dq9GoJV4uSMpVG3UjJCfJve2FDAEO4ydDlrG3J/fGBWvqV
|
44
|
+
1qTfW2DOjy6AtP1BsgaE3M95GwXHVxETBJuVLwE9AoGAK6GchNpgGC9caP2Pa8DC
|
45
|
+
u99K5pr93GfOPLLqHQMNKrxzEvtmVjE4XDNpjkhKquRbeUUK8sm2iMgYXYEOtWpW
|
46
|
+
upDp4koIE2fS2eyBlgWJlhvBYAM5mwUGx7GZLXk27Ckf8vN9so1DFURlF/UUw0zY
|
47
|
+
9dhddA9zH5ZwJZgRsLOJvr0CgYEAgDaKSrg2IQmgoLTo+rIaz0eF2x4f50r0EZ8s
|
48
|
+
5MWmN0re6ysXn/P6FnSYyKz594hUZnFMsO0EApKAEPsQNcdxW4O6I9TdWyz+AAlK
|
49
|
+
o1FYve1H3V6nnvvs7rU3iC1jff4u2ma8zRV2a+9hlK7j6H3Cu+zL7GOaqTOJKGwx
|
50
|
+
e2cGoOECgYEA2nG7rX7Xq8xa5WjeN1nnFVzmlj0iPqBEJNAXNQ+o9tsBPFm1rGlg
|
51
|
+
VszYIRfrtPFVtacCXOxBqGgIpFYKJr3MF+AEhU3e2ilJgO98HGBLRcX6AM73wfOq
|
52
|
+
SnyuQs9m2EyJyxoT17rm5TiSRRfnLxKeSSv/lpPV4kqkxLY3nreI0uY=
|
53
|
+
-----END RSA PRIVATE KEY-----
|
data/spec/push_package_spec.rb
CHANGED
@@ -185,15 +185,33 @@ describe PushPackage do
|
|
185
185
|
signature = File.read(tmp_path + '/signature')
|
186
186
|
p7 = OpenSSL::PKCS7.new(signature)
|
187
187
|
store = OpenSSL::X509::Store.new
|
188
|
-
store.add_cert(push_package.
|
188
|
+
store.add_cert(push_package.certificate)
|
189
189
|
p7.verify(
|
190
|
-
[push_package.
|
190
|
+
[push_package.certificate],
|
191
191
|
store,
|
192
192
|
File.read(tmp_path + '/manifest.json'),
|
193
193
|
OpenSSL::PKCS7::DETACHED
|
194
194
|
).must_equal true
|
195
195
|
end
|
196
196
|
|
197
|
+
describe 'when using a pem file' do
|
198
|
+
let(:certificate) { File.open(fixture_path('self-signed.pem')) }
|
199
|
+
|
200
|
+
it 'should have a valid signature' do
|
201
|
+
extracted_package.must_include('signature')
|
202
|
+
signature = File.read(tmp_path + '/signature')
|
203
|
+
p7 = OpenSSL::PKCS7.new(signature)
|
204
|
+
store = OpenSSL::X509::Store.new
|
205
|
+
store.add_cert(push_package.certificate)
|
206
|
+
p7.verify(
|
207
|
+
[push_package.certificate],
|
208
|
+
store,
|
209
|
+
File.read(tmp_path + '/manifest.json'),
|
210
|
+
OpenSSL::PKCS7::DETACHED
|
211
|
+
).must_equal true
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
197
215
|
it 'should have no extra certs in signature' do
|
198
216
|
extracted_package.must_include('signature')
|
199
217
|
signature = File.read(tmp_path + '/signature')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: push_package
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Natchev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- spec/fixtures/localhost.key
|
117
117
|
- spec/fixtures/manifest.json
|
118
118
|
- spec/fixtures/self-signed.p12
|
119
|
+
- spec/fixtures/self-signed.pem
|
119
120
|
- spec/fixtures/signature
|
120
121
|
- spec/push_package_spec.rb
|
121
122
|
- spec/spec_helper.rb
|
@@ -156,6 +157,7 @@ test_files:
|
|
156
157
|
- spec/fixtures/localhost.key
|
157
158
|
- spec/fixtures/manifest.json
|
158
159
|
- spec/fixtures/self-signed.p12
|
160
|
+
- spec/fixtures/self-signed.pem
|
159
161
|
- spec/fixtures/signature
|
160
162
|
- spec/push_package_spec.rb
|
161
163
|
- spec/spec_helper.rb
|