@@ -8,7 +8,7 @@ use jsonwebtoken::jwk::Jwk;
8
8
use jsonwebtoken:: { DecodingKey , EncodingKey } ;
9
9
use rstest:: { fixture, rstest} ;
10
10
use sd_jwt_rs:: issuer:: SDJWTClaimsStrategy ;
11
- use sd_jwt_rs:: { SDJWTHolder , SDJWTIssuer , SDJWTVerifier } ;
11
+ use sd_jwt_rs:: { SDJWTHolder , SDJWTIssuer , SDJWTJson , SDJWTVerifier } ;
12
12
use sd_jwt_rs:: { COMBINED_SERIALIZATION_FORMAT_SEPARATOR , DEFAULT_SIGNING_ALG } ;
13
13
use serde_json:: { json, Map , Value } ;
14
14
use std:: collections:: HashSet ;
@@ -287,7 +287,7 @@ fn demo_positive_cases(
287
287
Option < EncodingKey > ,
288
288
Option < Jwk > ,
289
289
) ,
290
- #[ values( "compact" . to_string( ) ) ] format : String ,
290
+ #[ values( "compact" . to_string( ) , "json" . to_string ( ) ) ] format : String ,
291
291
#[ values( None , Some ( DEFAULT_SIGNING_ALG . to_owned( ) ) ) ] sign_algo : Option < String > ,
292
292
#[ values( true , false ) ] add_decoy : bool ,
293
293
) {
@@ -300,38 +300,62 @@ fn demo_positive_cases(
300
300
holder_jwk. clone ( ) ,
301
301
add_decoy,
302
302
format. clone ( ) ,
303
- ) . unwrap ( ) ;
303
+ )
304
+ . unwrap ( ) ;
304
305
let issued = sd_jwt. clone ( ) ;
305
306
// Holder creates presentation
306
307
let mut holder = SDJWTHolder :: new ( sd_jwt. clone ( ) , format. clone ( ) ) . unwrap ( ) ;
307
- let presentation = holder. create_presentation (
308
- holder_disclosed_claims,
309
- nonce. clone ( ) ,
310
- aud. clone ( ) ,
311
- holder_key,
312
- sign_algo,
313
- ) . unwrap ( ) ;
314
-
315
- let mut issued_parts: HashSet < & str > = issued
316
- . split ( COMBINED_SERIALIZATION_FORMAT_SEPARATOR )
317
- . collect ( ) ;
318
- issued_parts. remove ( "" ) ;
319
-
320
- let mut revealed_parts: HashSet < & str > = presentation
321
- . split ( COMBINED_SERIALIZATION_FORMAT_SEPARATOR )
322
- . collect ( ) ;
323
- revealed_parts. remove ( "" ) ;
324
-
325
- let intersected_parts: HashSet < _ > = issued_parts. intersection ( & revealed_parts) . collect ( ) ;
326
- // Compare that number of disclosed parts are equal
327
- let mut revealed_parts_number = revealed_parts. len ( ) ;
328
- if holder_jwk. is_some ( ) {
329
- // Remove KB
330
- revealed_parts_number -= 1 ;
308
+ let presentation = holder
309
+ . create_presentation (
310
+ holder_disclosed_claims,
311
+ nonce. clone ( ) ,
312
+ aud. clone ( ) ,
313
+ holder_key,
314
+ sign_algo,
315
+ )
316
+ . unwrap ( ) ;
317
+
318
+ if format == "compact" {
319
+ let mut issued_parts: HashSet < & str > = issued
320
+ . split ( COMBINED_SERIALIZATION_FORMAT_SEPARATOR )
321
+ . collect ( ) ;
322
+ issued_parts. remove ( "" ) ;
323
+
324
+ let mut revealed_parts: HashSet < & str > = presentation
325
+ . split ( COMBINED_SERIALIZATION_FORMAT_SEPARATOR )
326
+ . collect ( ) ;
327
+ revealed_parts. remove ( "" ) ;
328
+
329
+ let intersected_parts: HashSet < _ > = issued_parts. intersection ( & revealed_parts) . collect ( ) ;
330
+ // Compare that number of disclosed parts are equal
331
+ let mut revealed_parts_number = revealed_parts. len ( ) ;
332
+ if holder_jwk. is_some ( ) {
333
+ // Remove KB
334
+ revealed_parts_number -= 1 ;
335
+ }
336
+ assert_eq ! ( intersected_parts. len( ) , revealed_parts_number) ;
337
+ // here `+1` means adding issued jwt part also
338
+ assert_eq ! ( number_of_revealed_sds + 1 , revealed_parts_number) ;
339
+ } else {
340
+ let mut issued: SDJWTJson = serde_json:: from_str ( & issued) . unwrap ( ) ;
341
+ let mut revealed: SDJWTJson = serde_json:: from_str ( & presentation) . unwrap ( ) ;
342
+ let disclosures: Vec < String > = revealed
343
+ . disclosures
344
+ . clone ( )
345
+ . into_iter ( )
346
+ . filter ( |d| issued. disclosures . contains ( d) )
347
+ . collect ( ) ;
348
+ assert_eq ! ( number_of_revealed_sds, disclosures. len( ) ) ;
349
+
350
+ if holder_jwk. is_some ( ) {
351
+ assert ! ( revealed. kb_jwt. is_some( ) ) ;
352
+ }
353
+
354
+ issued. disclosures = disclosures;
355
+ revealed. kb_jwt = None ;
356
+ assert_eq ! ( revealed, issued) ;
331
357
}
332
- assert_eq ! ( intersected_parts. len( ) , revealed_parts_number) ;
333
- // here `+1` means adding issued jwt part also
334
- assert_eq ! ( number_of_revealed_sds + 1 , revealed_parts_number) ;
358
+
335
359
// Verify presentation
336
360
let _verified = SDJWTVerifier :: new (
337
361
presentation. clone ( ) ,
@@ -342,5 +366,6 @@ fn demo_positive_cases(
342
366
aud,
343
367
nonce,
344
368
format,
345
- ) . unwrap ( ) ;
369
+ )
370
+ . unwrap ( ) ;
346
371
}
0 commit comments