@@ -13,7 +13,6 @@ use super::jwt::Jwt;
13
13
use super :: signature:: JwtSignatureAlgorithm ;
14
14
use crate :: common:: { build_byte_input, build_simple_output, BytesFormat } ;
15
15
use crate :: url_query_params:: generate_jwt_link;
16
- use crate :: { check_asymmetric_key, check_symmetric_key, generate_placeholder, sign, verify} ;
17
16
18
17
const DEFAULT_TEXT_FOR_RSA_PLACEHOLDER : & str = "RSA private/public key in PEM (-----BEGIN RSA PRIVATE/PUBLIC KEY-----)" ;
19
18
const DEFAULT_TEXT_FOR_EC_PLACEHOLDER : & str = "EC private/public key in PEM (-----BEGIN EC PRIVATE/PUBLIC KEY-----)" ;
@@ -129,7 +128,11 @@ fn calculate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
129
128
notificator: spawn_notification
130
129
) ;
131
130
132
- Some ( hmac_sha256:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( ) )
131
+ Some ( sign_hmac ! (
132
+ hash_alg: sha2:: Sha256 ,
133
+ key: key,
134
+ msg: data_to_sign. as_bytes( ) ,
135
+ ) )
133
136
}
134
137
JwtSignatureAlgorithm :: Hs384 ( key) => {
135
138
check_symmetric_key ! (
@@ -139,7 +142,11 @@ fn calculate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
139
142
notificator: spawn_notification
140
143
) ;
141
144
142
- Some ( hmac_sha512:: sha384:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( ) )
145
+ Some ( sign_hmac ! (
146
+ hash_alg: sha2:: Sha384 ,
147
+ key: key,
148
+ msg: data_to_sign. as_bytes( ) ,
149
+ ) )
143
150
}
144
151
JwtSignatureAlgorithm :: Hs512 ( key) => {
145
152
check_symmetric_key ! (
@@ -149,7 +156,11 @@ fn calculate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
149
156
notificator: spawn_notification
150
157
) ;
151
158
152
- Some ( hmac_sha512:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( ) )
159
+ Some ( sign_hmac ! (
160
+ hash_alg: sha2:: Sha512 ,
161
+ key: key,
162
+ msg: data_to_sign. as_bytes( ) ,
163
+ ) )
153
164
}
154
165
JwtSignatureAlgorithm :: Rs256 ( key) => {
155
166
let private_key = check_asymmetric_key ! (
@@ -271,8 +282,8 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
271
282
STANDARD . encode( jwt. parsed_payload. as_bytes( ) )
272
283
) ;
273
284
274
- let calculated_signature = match & jwt. signature_algorithm {
275
- JwtSignatureAlgorithm :: None => Vec :: new ( ) ,
285
+ Some ( match & jwt. signature_algorithm {
286
+ JwtSignatureAlgorithm :: None => Vec :: < u8 > :: new ( ) == jwt . signature ,
276
287
JwtSignatureAlgorithm :: Hs256 ( key) => {
277
288
check_symmetric_key ! (
278
289
key: key,
@@ -281,7 +292,12 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
281
292
notificator: spawn_notification
282
293
) ;
283
294
284
- hmac_sha256:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( )
295
+ verify_hmac ! (
296
+ hash_alg: sha2:: Sha384 ,
297
+ key: key,
298
+ msg: data_to_sign. as_bytes( ) ,
299
+ digest: jwt. signature. as_slice( ) ,
300
+ )
285
301
}
286
302
JwtSignatureAlgorithm :: Hs384 ( key) => {
287
303
check_symmetric_key ! (
@@ -291,7 +307,12 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
291
307
notificator: spawn_notification
292
308
) ;
293
309
294
- hmac_sha512:: sha384:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( )
310
+ verify_hmac ! (
311
+ hash_alg: sha2:: Sha384 ,
312
+ key: key,
313
+ msg: data_to_sign. as_bytes( ) ,
314
+ digest: jwt. signature. as_slice( ) ,
315
+ )
295
316
}
296
317
JwtSignatureAlgorithm :: Hs512 ( key) => {
297
318
check_symmetric_key ! (
@@ -301,7 +322,12 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
301
322
notificator: spawn_notification
302
323
) ;
303
324
304
- hmac_sha512:: HMAC :: mac ( data_to_sign. as_bytes ( ) , key) . to_vec ( )
325
+ verify_hmac ! (
326
+ hash_alg: sha2:: Sha512 ,
327
+ key: key,
328
+ msg: data_to_sign. as_bytes( ) ,
329
+ digest: jwt. signature. as_slice( ) ,
330
+ )
305
331
}
306
332
JwtSignatureAlgorithm :: Rs256 ( key) => {
307
333
let public_key = check_asymmetric_key ! (
@@ -311,16 +337,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
311
337
key_kind: PublicKey ,
312
338
) ;
313
339
314
- let is_ok = verify ! (
340
+ verify ! (
315
341
signature_algo: SignatureAlgorithm :: RsaPkcs1v15 ,
316
342
hash_algo: HashAlgorithm :: SHA2_256 ,
317
343
public_key: & public_key,
318
344
data_to_sign: data_to_sign. as_bytes( ) ,
319
345
jwt_signature: & jwt. signature,
320
346
notificator: spawn_notification
321
- ) ;
322
-
323
- return Some ( is_ok) ;
347
+ )
324
348
}
325
349
JwtSignatureAlgorithm :: Rs384 ( key) => {
326
350
let public_key = check_asymmetric_key ! (
@@ -330,16 +354,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
330
354
key_kind: PublicKey ,
331
355
) ;
332
356
333
- let is_ok = verify ! (
357
+ verify ! (
334
358
signature_algo: SignatureAlgorithm :: RsaPkcs1v15 ,
335
359
hash_algo: HashAlgorithm :: SHA2_384 ,
336
360
public_key: & public_key,
337
361
data_to_sign: data_to_sign. as_bytes( ) ,
338
362
jwt_signature: & jwt. signature,
339
363
notificator: spawn_notification
340
- ) ;
341
-
342
- return Some ( is_ok) ;
364
+ )
343
365
}
344
366
JwtSignatureAlgorithm :: Rs512 ( key) => {
345
367
let public_key = check_asymmetric_key ! (
@@ -349,16 +371,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
349
371
key_kind: PublicKey ,
350
372
) ;
351
373
352
- let is_ok = verify ! (
374
+ verify ! (
353
375
signature_algo: SignatureAlgorithm :: RsaPkcs1v15 ,
354
376
hash_algo: HashAlgorithm :: SHA2_512 ,
355
377
public_key: & public_key,
356
378
data_to_sign: data_to_sign. as_bytes( ) ,
357
379
jwt_signature: & jwt. signature,
358
380
notificator: spawn_notification
359
- ) ;
360
-
361
- return Some ( is_ok) ;
381
+ )
362
382
}
363
383
JwtSignatureAlgorithm :: Es256 ( key) => {
364
384
let public_key = check_asymmetric_key ! (
@@ -368,16 +388,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
368
388
key_kind: PublicKey ,
369
389
) ;
370
390
371
- let is_ok = verify ! (
391
+ verify ! (
372
392
signature_algo: SignatureAlgorithm :: Ecdsa ,
373
393
hash_algo: HashAlgorithm :: SHA2_256 ,
374
394
public_key: & public_key,
375
395
data_to_sign: data_to_sign. as_bytes( ) ,
376
396
jwt_signature: & jwt. signature,
377
397
notificator: spawn_notification
378
- ) ;
379
-
380
- return Some ( is_ok) ;
398
+ )
381
399
}
382
400
JwtSignatureAlgorithm :: Es384 ( key) => {
383
401
let public_key = check_asymmetric_key ! (
@@ -387,16 +405,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
387
405
key_kind: PublicKey ,
388
406
) ;
389
407
390
- let is_ok = verify ! (
408
+ verify ! (
391
409
signature_algo: SignatureAlgorithm :: Ecdsa ,
392
410
hash_algo: HashAlgorithm :: SHA2_384 ,
393
411
public_key: & public_key,
394
412
data_to_sign: data_to_sign. as_bytes( ) ,
395
413
jwt_signature: & jwt. signature,
396
414
notificator: spawn_notification
397
- ) ;
398
-
399
- return Some ( is_ok) ;
415
+ )
400
416
}
401
417
JwtSignatureAlgorithm :: Es512 ( key) => {
402
418
let public_key = check_asymmetric_key ! (
@@ -406,16 +422,14 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
406
422
key_kind: PublicKey ,
407
423
) ;
408
424
409
- let is_ok = verify ! (
425
+ verify ! (
410
426
signature_algo: SignatureAlgorithm :: Ecdsa ,
411
427
hash_algo: HashAlgorithm :: SHA2_512 ,
412
428
public_key: & public_key,
413
429
data_to_sign: data_to_sign. as_bytes( ) ,
414
430
jwt_signature: & jwt. signature,
415
431
notificator: spawn_notification
416
- ) ;
417
-
418
- return Some ( is_ok) ;
432
+ )
419
433
}
420
434
JwtSignatureAlgorithm :: Unsupported ( algo_name) => {
421
435
spawn_notification. emit ( Notification :: from_description_and_type (
@@ -425,9 +439,7 @@ fn validate_signature(jwt: &Jwt, spawn_notification: Callback<Notification>) ->
425
439
426
440
return None ;
427
441
}
428
- } ;
429
-
430
- Some ( jwt. signature == calculated_signature)
442
+ } )
431
443
}
432
444
433
445
pub fn generate_jwt ( jwt : & Jwt , spawn_notification : Callback < Notification > ) -> Option < Vec < u8 > > {
0 commit comments