Skip to content

Commit

Permalink
fix: parsing jws from json
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmednfwela committed Mar 22, 2024
1 parent a16a31c commit 05c04f4
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 4 deletions.
12 changes: 8 additions & 4 deletions lib/src/jws.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,18 @@ class JsonWebSignature extends JoseObject {
/// representation
factory JsonWebSignature.fromJson(Map<String, dynamic> json) {
Iterable<_JwsRecipient> signatures;
if (json.containsKey('signatures')) {
signatures = (json['signatures'] as List<Map<String, Object>>)
final rawSignatures = json['signatures'] as List<dynamic>?;
if (rawSignatures != null) {
signatures = rawSignatures
.whereType<Map<String, dynamic>>()
.map((v) => _JwsRecipient.fromJson(v));
} else {
signatures = [_JwsRecipient.fromJson(json)];
}
return JsonWebSignature._(decodeBase64EncodedBytes(json['payload']),
List.unmodifiable(signatures));
return JsonWebSignature._(
decodeBase64EncodedBytes(json['payload']),
List.unmodifiable(signatures),
);
}

@override
Expand Down
32 changes: 32 additions & 0 deletions test/jws_test.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:convert';

import 'package:jose_plus/jose.dart';
import 'package:test/test.dart';

Expand Down Expand Up @@ -255,6 +257,36 @@ void main() {
final isVerified = await jws.verify(keyStore);
expect(isVerified, isTrue);
});
test('appsub-dart/jose#7', () async {
final testData = {
'payload':
'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGF'
'tcGxlLmNvbS9pc19yb290Ijp0cnVlfQ',
'signatures': [
{
'protected': 'eyJhbGciOiJSUzI1NiJ9',
'header': {'kid': '2010-12-29'},
'signature': 'cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZ'
'mh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjb'
'KBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHl'
'b1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZES'
'c6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AX'
'LIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw'
},
{
'protected': 'eyJhbGciOiJFUzI1NiJ9',
'header': {'kid': 'e9bc097a-ce51-4036-9562-d2ade882db0d'},
'signature':
'DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8IS'
'lSApmWQxfKTUJqPP3-Kg6NU1Q'
}
]
};
final jsonJWS = jsonEncode(testData);
final jwsMap = jsonDecode(jsonJWS) as Map<String, dynamic>;
final jws = JsonWebSignature.fromJson(jwsMap);
expect(jws.recipients, isNotEmpty);
});
});
}

Expand Down

0 comments on commit 05c04f4

Please sign in to comment.