1
1
use std:: collections:: BTreeMap ;
2
2
use std:: io:: Read ;
3
3
4
- use base64:: alphabet:: Alphabet ;
5
- use base64:: engine:: { GeneralPurpose , GeneralPurposeConfig } ;
6
- use base64:: Engine ;
7
4
use http:: uri:: Uri ;
8
5
use jwt_simple:: prelude:: * ;
9
6
use serde_json:: Value ;
@@ -76,6 +73,7 @@ use crate::vapid::{VapidKey, VapidSignature, VapidSigner};
76
73
/// let signature = sig_builder.build().unwrap();
77
74
/// # }
78
75
/// ```
76
+
79
77
pub struct VapidSignatureBuilder < ' a > {
80
78
claims : Claims ,
81
79
key : VapidKey ,
@@ -168,12 +166,11 @@ impl<'a> VapidSignatureBuilder<'a> {
168
166
/// ```
169
167
pub fn from_base64 (
170
168
encoded : & str ,
171
- alphabet : & Alphabet ,
172
- config : GeneralPurposeConfig ,
169
+ config : base64:: Config ,
173
170
subscription_info : & ' a SubscriptionInfo ,
174
171
) -> Result < VapidSignatureBuilder < ' a > , WebPushError > {
175
172
let pr_key = ES256KeyPair :: from_bytes (
176
- & GeneralPurpose :: new ( alphabet , config) . decode ( encoded ) . map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?,
173
+ & base64 :: decode_config ( encoded , config) . map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?,
177
174
)
178
175
. map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?;
179
176
@@ -184,11 +181,10 @@ impl<'a> VapidSignatureBuilder<'a> {
184
181
/// allowing the reuse of one builder for multiple messages by cloning the resulting builder.
185
182
pub fn from_base64_no_sub (
186
183
encoded : & str ,
187
- alphabet : & Alphabet ,
188
- config : GeneralPurposeConfig ,
184
+ config : base64:: Config ,
189
185
) -> Result < PartialVapidSignatureBuilder , WebPushError > {
190
186
let pr_key = ES256KeyPair :: from_bytes (
191
- & GeneralPurpose :: new ( alphabet , config) . decode ( encoded ) . map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?,
187
+ & base64 :: decode_config ( encoded , config) . map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?,
192
188
)
193
189
. map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?;
194
190
@@ -234,8 +230,8 @@ impl<'a> VapidSignatureBuilder<'a> {
234
230
//Parse many PEM in the assumption of extra unneeded sections.
235
231
let parsed = pem:: parse_many ( & buffer) . map_err ( |_| WebPushError :: InvalidCryptoKeys ) ?;
236
232
237
- let found_pkcs8 = parsed. iter ( ) . any ( |pem| pem. tag ( ) == "PRIVATE KEY" ) ;
238
- let found_sec1 = parsed. iter ( ) . any ( |pem| pem. tag ( ) == "EC PRIVATE KEY" ) ;
233
+ let found_pkcs8 = parsed. iter ( ) . any ( |pem| pem. tag == "PRIVATE KEY" ) ;
234
+ let found_sec1 = parsed. iter ( ) . any ( |pem| pem. tag == "EC PRIVATE KEY" ) ;
239
235
240
236
//Handle each kind of PEM file differently, as EC keys can be in SEC1 or PKCS8 format.
241
237
if found_sec1 {
@@ -300,10 +296,6 @@ impl PartialVapidSignatureBuilder {
300
296
mod tests {
301
297
use std:: fs:: File ;
302
298
303
- use base64:: alphabet:: STANDARD ;
304
- use base64:: engine:: GeneralPurposeConfig ;
305
- use base64:: prelude:: BASE64_URL_SAFE_NO_PAD ;
306
- use base64:: Engine ;
307
299
use :: lazy_static:: lazy_static;
308
300
309
301
use crate :: message:: SubscriptionInfo ;
@@ -336,7 +328,7 @@ mod tests {
336
328
337
329
assert_eq ! (
338
330
"BMo1HqKF6skMZYykrte9duqYwBD08mDQKTunRkJdD3sTJ9E-yyN6sJlPWTpKNhp-y2KeS6oANHF-q3w37bClb7U" ,
339
- BASE64_URL_SAFE_NO_PAD . encode ( & signature. auth_k)
331
+ base64 :: encode_config ( & signature. auth_k, base64 :: URL_SAFE_NO_PAD )
340
332
) ;
341
333
342
334
assert ! ( !signature. auth_t. is_empty( ) ) ;
@@ -349,7 +341,7 @@ mod tests {
349
341
350
342
assert_eq ! (
351
343
"BMo1HqKF6skMZYykrte9duqYwBD08mDQKTunRkJdD3sTJ9E-yyN6sJlPWTpKNhp-y2KeS6oANHF-q3w37bClb7U" ,
352
- BASE64_URL_SAFE_NO_PAD . encode ( & signature. auth_k)
344
+ base64 :: encode_config ( & signature. auth_k, base64 :: URL_SAFE_NO_PAD )
353
345
) ;
354
346
355
347
assert ! ( !signature. auth_t. is_empty( ) ) ;
@@ -358,12 +350,12 @@ mod tests {
358
350
#[ test]
359
351
fn test_builder_from_base64 ( ) {
360
352
let builder =
361
- VapidSignatureBuilder :: from_base64 ( PRIVATE_BASE64 , & STANDARD , GeneralPurposeConfig :: new ( ) . with_encode_padding ( false ) , & SUBSCRIPTION_INFO ) . unwrap ( ) ;
353
+ VapidSignatureBuilder :: from_base64 ( PRIVATE_BASE64 , base64 :: URL_SAFE_NO_PAD , & SUBSCRIPTION_INFO ) . unwrap ( ) ;
362
354
let signature = builder. build ( ) . unwrap ( ) ;
363
355
364
356
assert_eq ! (
365
357
"BMjQIp55pdbU8pfCBKyXcZjlmER_mXt5LqNrN1hrXbdBS5EnhIbMu3Au-RV53iIpztzNXkGI56BFB1udQ8Bq_H4" ,
366
- BASE64_URL_SAFE_NO_PAD . encode ( & signature. auth_k)
358
+ base64 :: encode_config ( & signature. auth_k, base64 :: URL_SAFE_NO_PAD )
367
359
) ;
368
360
369
361
assert ! ( !signature. auth_t. is_empty( ) ) ;
0 commit comments