push_package 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|