From fdfea95e16e8823e6bed96d9fed7fac9a28573a7 Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Wed, 22 May 2024 17:16:09 +0545 Subject: [PATCH 01/19] Bypas clientmetadata check when clientype is jwkthumprint and when vcformat is null then ignore nested_data --- .../cubit/qr_code_scan_cubit.dart | 35 ++++++---- lib/scan/cubit/scan_cubit.dart | 69 ++++++++++--------- 2 files changed, 58 insertions(+), 46 deletions(-) diff --git a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart index ee2a864c7..ee81113eb 100644 --- a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart +++ b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart @@ -627,21 +627,26 @@ class QRCodeScanCubit extends Cubit { } } } - - final clientMetadata = state.uri!.queryParameters['client_metadata']; - if (clientMetadata != null) { - final clientMetadataMap = - jsonDecode(clientMetadata) as Map; - final data = - clientMetadataMap['subject_syntax_types_supported'] as List; - if (!data.contains('did:key')) { - if (isSecurityHigh) { - throw ResponseMessage( - data: { - 'error': 'unsupported_response_type', - 'error_description': 'The subject syntax type is not supported.', - }, - ); + final clientType = profileCubit.state.model.profileSetting + .selfSovereignIdentityOptions.customOidc4vcProfile.clientType; + + if (clientType != ClientType.p256JWKThumprint) { + final clientMetadata = state.uri!.queryParameters['client_metadata']; + if (clientMetadata != null) { + final clientMetadataMap = + jsonDecode(clientMetadata) as Map; + final data = clientMetadataMap['subject_syntax_types_supported'] + as List; + if (!data.contains('did:key')) { + if (isSecurityHigh) { + throw ResponseMessage( + data: { + 'error': 'unsupported_response_type', + 'error_description': + 'The subject syntax type is not supported.', + }, + ); + } } } } diff --git a/lib/scan/cubit/scan_cubit.dart b/lib/scan/cubit/scan_cubit.dart index 4a93e0f7e..ed099301a 100644 --- a/lib/scan/cubit/scan_cubit.dart +++ b/lib/scan/cubit/scan_cubit.dart @@ -798,44 +798,51 @@ class ScanCubit extends Cubit { credentialList: [credentialsToBePresented[i]], ); - final pathNested = {'id': inputDescriptor.id, 'format': vcFormat}; + Map? pathNested; + + if (!(inputDescriptor.id == null || vcFormat == null)) { + pathNested = { + 'id': inputDescriptor.id, + 'format': vcFormat, + }; + } if (credential.isNotEmpty) { - if (credentialsToBePresented.length == 1) { - if (vpFormat == 'ldp_vp') { - pathNested['path'] = r'$.verifiableCredential'; - } else if (vpFormat == 'vc+sd-jwt') { - pathNested['path'] = r'$'; - } else { - pathNested['path'] = r'$.vp.verifiableCredential[0]'; - } + final Map descriptor = { + 'id': inputDescriptor.id, + 'format': vpFormat, + 'path': r'$', + }; - inputDescriptors.add({ - 'id': inputDescriptor.id, - 'format': vpFormat, - 'path': r'$', - 'path_nested': pathNested, - }); - } else { - if (vpFormat == 'ldp_vp') { - pathNested['path'] = - // ignore: prefer_interpolation_to_compose_strings - r'$.verifiableCredential[' + i.toString() + ']'; - } else if (vpFormat == 'vc+sd-jwt') { - pathNested['path'] = r'$'; + if (pathNested != null) { + if (credentialsToBePresented.length == 1) { + if (vpFormat == 'ldp_vp') { + pathNested['path'] = r'$.verifiableCredential'; + } else if (vpFormat == 'vc+sd-jwt') { + pathNested['path'] = r'$'; + } else { + pathNested['path'] = r'$.vp.verifiableCredential[0]'; + } } else { - pathNested['path'] = - // ignore: prefer_interpolation_to_compose_strings - r'$.vp.verifiableCredential[' + i.toString() + ']'; + if (vpFormat == 'ldp_vp') { + pathNested['path'] = + // ignore: prefer_interpolation_to_compose_strings + r'$.verifiableCredential[' + i.toString() + ']'; + } else if (vpFormat == 'vc+sd-jwt') { + pathNested['path'] = r'$'; + } else { + pathNested['path'] = + // ignore: prefer_interpolation_to_compose_strings + r'$.vp.verifiableCredential[' + i.toString() + ']'; + } } + } - inputDescriptors.add({ - 'id': inputDescriptor.id, - 'format': vpFormat, - 'path': r'$', - 'path_nested': pathNested, - }); + if (pathNested != null) { + descriptor['path_nested'] = pathNested; } + + inputDescriptors.add(descriptor); } } } From c81661006de8e4a88a929503a33dc2f558f56585 Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Thu, 23 May 2024 13:35:15 +0545 Subject: [PATCH 02/19] Update for vc-sd-jwt - pathNested ignored --- .../cubit/missing_credentials_cubit.dart | 14 ++++++++++++-- lib/scan/cubit/scan_cubit.dart | 12 +++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart b/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart index 9ebe4a082..e9f632611 100644 --- a/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart +++ b/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart @@ -58,8 +58,18 @@ class MissingCredentialsCubit extends Cubit { credentialField['filter'] as Map, ); - final credentialName = - filter.pattern ?? filter.contains!.containsConst; + final credentialName = filter.pattern ?? + filter.contains?.containsConst ?? + filter.containsConst; + + if (credentialName == null) { + throw ResponseMessage( + data: { + 'error': 'invalid_request', + 'error_description': 'Invalid presentatoin Definition.', + }, + ); + } final CredentialSubjectType? credentialSubjectType = getCredTypeFromName(credentialName); diff --git a/lib/scan/cubit/scan_cubit.dart b/lib/scan/cubit/scan_cubit.dart index ed099301a..6efdb7551 100644 --- a/lib/scan/cubit/scan_cubit.dart +++ b/lib/scan/cubit/scan_cubit.dart @@ -727,6 +727,9 @@ class ScanCubit extends Cubit { 'definition_id': presentationDefinition.id, }; + final vcFormatType = profileSetting + .selfSovereignIdentityOptions.customOidc4vcProfile.vcFormatType; + final inputDescriptors = >[]; String? vcFormat; @@ -761,8 +764,6 @@ class ScanCubit extends Cubit { } } else { if (clientMetaData == null) { - final vcFormatType = profileSetting - .selfSovereignIdentityOptions.customOidc4vcProfile.vcFormatType; vcFormat = vcFormatType.vcValue; vpFormat = vcFormatType.vpValue; } else { @@ -800,7 +801,7 @@ class ScanCubit extends Cubit { Map? pathNested; - if (!(inputDescriptor.id == null || vcFormat == null)) { + if (vcFormatType != VCFormatType.vcSdJWT) { pathNested = { 'id': inputDescriptor.id, 'format': vcFormat, @@ -814,7 +815,7 @@ class ScanCubit extends Cubit { 'path': r'$', }; - if (pathNested != null) { + if (vcFormatType != VCFormatType.vcSdJWT && pathNested != null) { if (credentialsToBePresented.length == 1) { if (vpFormat == 'ldp_vp') { pathNested['path'] = r'$.verifiableCredential'; @@ -836,9 +837,6 @@ class ScanCubit extends Cubit { r'$.vp.verifiableCredential[' + i.toString() + ']'; } } - } - - if (pathNested != null) { descriptor['path_nested'] = pathNested; } From bbe5dd40a14c3a231b9b6030508ddba072c931f9 Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Thu, 23 May 2024 16:46:27 +0545 Subject: [PATCH 03/19] Add typ in header for key binding type --- packages/oidc4vc/lib/src/oidc4vc.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/oidc4vc/lib/src/oidc4vc.dart b/packages/oidc4vc/lib/src/oidc4vc.dart index 3163f4ba4..9c59bd5d5 100644 --- a/packages/oidc4vc/lib/src/oidc4vc.dart +++ b/packages/oidc4vc/lib/src/oidc4vc.dart @@ -1480,12 +1480,11 @@ class OIDC4VC { ..setProtectedHeader('alg', tokenParameters.alg) // add a key to sign, can only add one for JWT - ..addRecipient(key, algorithm: tokenParameters.alg); + ..addRecipient(key, algorithm: tokenParameters.alg) + ..setProtectedHeader('typ', tokenParameters.mediaType.typ); if (!ignoreProofHeaderType) { - /// Proof Header Type is ignored for clientSecretJwt - // also ignored for KB jwt - vpBuilder.setProtectedHeader('typ', tokenParameters.mediaType.typ); + /// Proof Header Type is ignored for KB jwt switch (tokenParameters.proofHeaderType) { case ProofHeaderType.kid: From c48ea53e7e9b1cb7b94369b046cb89564900556e Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Fri, 24 May 2024 14:11:07 +0545 Subject: [PATCH 04/19] version update to 2.5.7+457 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 1b9b6fdd5..9d4d2821d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: altme description: AltMe Flutter App -version: 2.5.6+456 +version: 2.5.7+457 environment: sdk: ">=3.1.0 <4.0.0" From c3e1f0a8fdbf4252266974237b45fb4959151e84 Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Mon, 27 May 2024 16:41:26 +0545 Subject: [PATCH 05/19] fix: Solve selective disclosure error during presentation #2681 --- .../selective_disclosure_pick_cubit.dart | 22 ++++++++++++------- .../view/selective_disclosure_pick_page.dart | 13 +++++++++-- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart index 3c1f5fca8..408ed9b32 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:altme/app/shared/shared.dart'; import 'package:altme/dashboard/home/home.dart'; import 'package:altme/selective_disclosure/selective_disclosure.dart'; @@ -81,20 +83,24 @@ class SelectiveDisclosureCubit extends Cubit { int? index; if (threeDotValue != null) { - for (final element - in selectiveDisclosure.disclosureToContent.entries.toList()) { + final disclosureToContentEntries = + selectiveDisclosure.disclosureToContent.entries.toList(); + + for (final element in disclosureToContentEntries) { final sh256Hash = oidc4vc.sh256HashOfContent(element.value.toString()); + if (sh256Hash == threeDotValue) { final disclosure = element.key.replaceAll('=', ''); - - index = selectiveDisclosure.disclosureFromJWT - .indexWhere((element) => element == disclosure); + index = disclosureToContentEntries + .indexWhere((entry) => entry.key == disclosure); + break; } } } else if (claimsKey != null) { - index = selectiveDisclosure.extractedValuesFromJwt.entries - .toList() - .indexWhere((entry) => entry.key == claimsKey); + index = + selectiveDisclosure.disclosureToContent.entries.toList().indexWhere( + (entry) => entry.value.toString().contains(claimsKey), + ); } if (index == null) { diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart index bd868cc05..86ae182e0 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart @@ -210,6 +210,9 @@ class _SelectiveDisclosurePickViewState } } + final selectiveDisclosure = + SelectiveDisclosure(widget.credentialToBePresented); + final encryptedValues = widget.credentialToBePresented.jwt ?.split('~') .where((element) => element.isNotEmpty) @@ -218,10 +221,16 @@ class _SelectiveDisclosurePickViewState if (encryptedValues != null) { var newJwt = '${encryptedValues[0]}~'; - encryptedValues.removeAt(0); + // encryptedValues.removeAt(0); + + final organizedDisclosure = selectiveDisclosure + .disclosureToContent.entries + .toList() + .map((element) => element.key) + .toList(); for (final index in selectedSDIndexInJWT) { - newJwt = '$newJwt${encryptedValues[index]}~'; + newJwt = '$newJwt${organizedDisclosure[index]}~'; } // Key Binding JWT From 3cef1b4717ef1deaa1495e0a7bf66bb6476369e5 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Tue, 28 May 2024 06:40:59 +0000 Subject: [PATCH 06/19] Make subject_syntax_types_supported from client metadata optional --- .../cubit/qr_code_scan_cubit.dart | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart index ee2a864c7..dd2731a86 100644 --- a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart +++ b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart @@ -632,16 +632,19 @@ class QRCodeScanCubit extends Cubit { if (clientMetadata != null) { final clientMetadataMap = jsonDecode(clientMetadata) as Map; - final data = - clientMetadataMap['subject_syntax_types_supported'] as List; - if (!data.contains('did:key')) { - if (isSecurityHigh) { - throw ResponseMessage( - data: { - 'error': 'unsupported_response_type', - 'error_description': 'The subject syntax type is not supported.', - }, - ); + if (clientMetadataMap['subject_syntax_types_supported'] != null) { + final data = clientMetadataMap['subject_syntax_types_supported'] + as List; + if (!data.contains('did:key')) { + if (isSecurityHigh) { + throw ResponseMessage( + data: { + 'error': 'unsupported_response_type', + 'error_description': + 'The subject syntax type is not supported.', + }, + ); + } } } } From 0d5c71d85e43efce548f014f43946e677dbe171e Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 08:03:07 +0000 Subject: [PATCH 07/19] remove duplicates from getCredentialsFromFilterList --- .../helpers/get_credentials_from_filter_list.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart index e06a2ca07..44440bafc 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart @@ -63,7 +63,7 @@ List getCredentialsFromFilterList({ } } } - return selectedCredential; + return selectedCredential.toSet().toList(); } return credentialList; } From ef9e2807b79f5cb7bd2b245cf6941c68c3a4289b Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 08:10:56 +0000 Subject: [PATCH 08/19] Revert "As a proofPurpose, use assertionMethod instead of authentication except for DidAuth" This reverts commit c25f9a73aa1eda6ede2a44902269547b336d896b. --- lib/scan/cubit/scan_cubit.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/scan/cubit/scan_cubit.dart b/lib/scan/cubit/scan_cubit.dart index 4a93e0f7e..c45b3ccc8 100644 --- a/lib/scan/cubit/scan_cubit.dart +++ b/lib/scan/cubit/scan_cubit.dart @@ -359,7 +359,7 @@ class ScanCubit extends Cubit { /// proof check to fail because of time difference on server final options = jsonEncode({ 'verificationMethod': kid, - 'proofPurpose': 'assertionMethod', + 'proofPurpose': 'authentication', 'challenge': challenge, 'domain': domain, 'created': DateTime.now() @@ -894,7 +894,7 @@ class ScanCubit extends Cubit { /// proof check to fail because of time difference on server final options = jsonEncode({ 'verificationMethod': kid, - 'proofPurpose': 'assertionMethod', + 'proofPurpose': 'authentication', 'challenge': nonce, 'domain': clientId, 'created': DateTime.now() From b3972bee436e69189c10541e56044b022f1c8fea Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 10:15:51 +0000 Subject: [PATCH 09/19] Prevent useless rebuild of whole credential_manifest_credential_offer_pick_page --- .../selective_disclosure_pick_cubit.dart | 2 -- .../view/selective_disclosure_pick_page.dart | 29 +++++++++------- .../inject_selective_disclosure_state.dart | 34 +++++++++++++++++++ 3 files changed, 50 insertions(+), 15 deletions(-) create mode 100644 lib/selective_disclosure/widget/inject_selective_disclosure_state.dart diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart index 408ed9b32..2f6d3141d 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:altme/app/shared/shared.dart'; import 'package:altme/dashboard/home/home.dart'; import 'package:altme/selective_disclosure/selective_disclosure.dart'; diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart index 86ae182e0..e738ebf3d 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart @@ -5,7 +5,7 @@ import 'package:altme/dashboard/dashboard.dart'; import 'package:altme/l10n/l10n.dart'; import 'package:altme/scan/cubit/scan_cubit.dart'; import 'package:altme/selective_disclosure/selective_disclosure.dart'; -import 'package:altme/selective_disclosure/widget/display_selective_disclosure.dart'; +import 'package:altme/selective_disclosure/widget/inject_selective_disclosure_state.dart'; import 'package:credential_manifest/credential_manifest.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -115,8 +115,8 @@ class _SelectiveDisclosurePickViewState ); } }, - child: BlocBuilder( - builder: (context, state) { + child: Builder( + builder: (BuildContext context) { final profileSetting = context.read().state.model.profileSetting; @@ -143,10 +143,8 @@ class _SelectiveDisclosurePickViewState isDiscover: false, ), const SizedBox(height: 20), - DisplaySelectiveDisclosure( + ConsumeSelectiveDisclosureCubit( credentialModel: widget.credentialToBePresented, - claims: null, - selectiveDisclosureState: state, onPressed: (claimKey, claimKeyId, threeDotValue) { context.read().disclosureAction( claimsKey: claimKey, @@ -164,13 +162,18 @@ class _SelectiveDisclosurePickViewState padding: const EdgeInsets.all(16), child: Tooltip( message: l10n.credentialPickPresent, - child: MyGradientButton( - onPressed: () => present( - context: context, - selectedSDIndexInJWT: state.selectedSDIndexInJWT, - uri: widget.uri, - ), - text: l10n.credentialPickPresent, + child: BlocBuilder( + builder: (context, state) { + return MyGradientButton( + onPressed: () => present( + context: context, + selectedSDIndexInJWT: state.selectedSDIndexInJWT, + uri: widget.uri, + ), + text: l10n.credentialPickPresent, + ); + }, ), ), ), diff --git a/lib/selective_disclosure/widget/inject_selective_disclosure_state.dart b/lib/selective_disclosure/widget/inject_selective_disclosure_state.dart new file mode 100644 index 000000000..d8a040d9e --- /dev/null +++ b/lib/selective_disclosure/widget/inject_selective_disclosure_state.dart @@ -0,0 +1,34 @@ +import 'package:altme/dashboard/dashboard.dart'; +import 'package:altme/selective_disclosure/widget/display_selective_disclosure.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class ConsumeSelectiveDisclosureCubit extends StatelessWidget { + const ConsumeSelectiveDisclosureCubit({ + super.key, + required this.credentialModel, + required this.showVertically, + this.onPressed, + this.parentKeyId, + }); + + final CredentialModel credentialModel; + final bool showVertically; + final void Function(String?, String, String?)? onPressed; + + final String? parentKeyId; + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return DisplaySelectiveDisclosure( + credentialModel: credentialModel, + selectiveDisclosureState: state, + onPressed: onPressed, + showVertically: true, + ); + }, + ); + } +} From aca6a282368b5590b29266f21b3f96437dd4f8b4 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 10:38:33 +0000 Subject: [PATCH 10/19] OIDC4VCI with sd-jwt, attribuite '_sd_alg' is optional #2693 --- lib/oidc4vc/add_oidc4vc_credential.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/oidc4vc/add_oidc4vc_credential.dart b/lib/oidc4vc/add_oidc4vc_credential.dart index 78ffad433..22484f55e 100644 --- a/lib/oidc4vc/add_oidc4vc_credential.dart +++ b/lib/oidc4vc/add_oidc4vc_credential.dart @@ -32,9 +32,9 @@ Future addOIDC4VCCredential({ final jsonContent = jwtDecode.parseJwt(data); if (format == VCFormatType.vcSdJWT.vcValue) { - final sdAlg = jsonContent['_sd_alg']; + final sdAlg = jsonContent['_sd_alg']??'sha-256'; - if (sdAlg == null || sdAlg != 'sha-256') { + if (sdAlg != 'sha-256') { throw ResponseMessage( data: { 'error': 'invalid_request', From 30b1637646bf7a0733b20c3ddc8e8fd0dbf6c11d Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 13:12:49 +0000 Subject: [PATCH 11/19] SD-JWT presentation: If field is not optional the element is automatically selected --- .../selective_disclosure_pick_cubit.dart | 5 ++- .../widget/display_selective_disclosure.dart | 39 +++++++++++++++++-- .../lib/src/models/field.dart | 7 ++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart index 2f6d3141d..13e7e0182 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart @@ -42,7 +42,10 @@ class SelectiveDisclosureCubit extends Cubit { final searchList = getTextsFromCredential(path, credentialData); for (final element in searchList) { final key = path.split('.').toList().last; - json[key] = element; + json[key] = { + 'element': element, + 'optional': field.optional, + }; } } } diff --git a/lib/selective_disclosure/widget/display_selective_disclosure.dart b/lib/selective_disclosure/widget/display_selective_disclosure.dart index eed3b9ee0..5757ef2fc 100644 --- a/lib/selective_disclosure/widget/display_selective_disclosure.dart +++ b/lib/selective_disclosure/widget/display_selective_disclosure.dart @@ -129,6 +129,7 @@ class DisplaySelectiveDisclosure extends StatelessWidget { } bool? disable; + bool selected = false; if (selectiveDisclosureState != null) { final limitDisclosure = @@ -143,12 +144,42 @@ class DisplaySelectiveDisclosure extends StatelessWidget { filters.forEach((key, value) { if (claims.threeDotValue != null) { if (claimKey.contains(key) && - claims.data.replaceAll(' ', '') == value) { + claims.data.replaceAll(' ', '') == + value['element']) { disable = false; + selected = value['optional'] as bool; + if (!selectiveDisclosureState! + .selectedClaimsKeyIds + .contains(keyToCheck) && + selected == true) { + context + .read() + .disclosureAction( + claimsKey: key, + credentialModel: credentialModel, + threeDotValue: claims.threeDotValue, + claimKeyId: claimKey, + ); + } } } else { - if (claimKey == key && claims.data == value) { + if (claimKey == key && + claims.data == value['element']) { disable = false; + selected = !(value['optional'] as bool); + if (!selectiveDisclosureState! + .selectedClaimsKeyIds + .contains(keyToCheck) && + selected == true) { + context + .read() + .disclosureAction( + claimsKey: key, + credentialModel: credentialModel, + threeDotValue: claims.threeDotValue, + claimKeyId: claimKey, + ); + } } } }); @@ -159,7 +190,9 @@ class DisplaySelectiveDisclosure extends StatelessWidget { return TransparentInkWell( onTap: () { - if (disable != null && disable!) return; + if ((disable != null && disable!) || selected == true) { + return; + } onPressed?.call(key, claimKey, claims.threeDotValue); }, diff --git a/packages/credential_manifest/lib/src/models/field.dart b/packages/credential_manifest/lib/src/models/field.dart index e3693663a..1aa487a0f 100644 --- a/packages/credential_manifest/lib/src/models/field.dart +++ b/packages/credential_manifest/lib/src/models/field.dart @@ -15,6 +15,13 @@ class Field { final List path; final Filter? filter; + + // The fields object MAY contain an optional property. + // The value of this property MUST be a boolean, wherein true indicates + // the field is optional, and false or non-presence of the property indicates + // the field is required. Even when the optional property is present, + // the value located at the indicated path of the field MUST validate against + // the JSON Schema filter, if a filter is present. @JsonKey(defaultValue: false) final bool optional; From f63c1022591e3f7389e36860178ef8cb22099d99 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 15:21:30 +0000 Subject: [PATCH 12/19] Verifier MEECO : wallet fails #2674 --- .../cubit/qr_code_scan_cubit.dart | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart index dd2731a86..e9df2d911 100644 --- a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart +++ b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart @@ -628,26 +628,6 @@ class QRCodeScanCubit extends Cubit { } } - final clientMetadata = state.uri!.queryParameters['client_metadata']; - if (clientMetadata != null) { - final clientMetadataMap = - jsonDecode(clientMetadata) as Map; - if (clientMetadataMap['subject_syntax_types_supported'] != null) { - final data = clientMetadataMap['subject_syntax_types_supported'] - as List; - if (!data.contains('did:key')) { - if (isSecurityHigh) { - throw ResponseMessage( - data: { - 'error': 'unsupported_response_type', - 'error_description': - 'The subject syntax type is not supported.', - }, - ); - } - } - } - } final redirectUri = state.uri!.queryParameters['redirect_uri']; final responseUri = state.uri!.queryParameters['response_uri']; From c75d4a75600396f09be50cbc7c7ba4df301b1893 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Wed, 29 May 2024 15:47:40 +0000 Subject: [PATCH 13/19] version: 2.5.8+458 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 9d4d2821d..c46c15a8c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: altme description: AltMe Flutter App -version: 2.5.7+457 +version: 2.5.8+458 environment: sdk: ">=3.1.0 <4.0.0" From 0de5503e821a65f32c41645deb3edacb0145c114 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 06:29:57 +0000 Subject: [PATCH 14/19] New translation for Catalan and Spanish #2684 --- lib/l10n/arb/app_ca.arb | 26 ++++++++++++++++++-- lib/l10n/arb/app_es.arb | 25 ++++++++++++++++++- lib/l10n/untranslated.json | 50 ++------------------------------------ 3 files changed, 50 insertions(+), 51 deletions(-) diff --git a/lib/l10n/arb/app_ca.arb b/lib/l10n/arb/app_ca.arb index cd3922970..dbd8ba0eb 100644 --- a/lib/l10n/arb/app_ca.arb +++ b/lib/l10n/arb/app_ca.arb @@ -1040,6 +1040,28 @@ "blockchainCardsDiscoverSubtitle" : "Obtenir prova de propietat de compte de criptoactius", "successfullyAddedEnterpriseAccount": "Compte d'Organització/Empresa afegida amb èxit!", "successfullyUpdatedEnterpriseAccount" : "Compte d'Organització/Empresa actualitzada amb èxit!", - "languageSelectorTitle": "catalan" - + "languageSelectorTitle": "catalan", + "proofType": "Tipus de prova OIDC4VCI", + "proofTypeSubtitle": "Predeterminat: jwt\nSeleccioneu un dels tipus de prova.", + "thisWalleIsAlreadyConfigured": "Aquesta cartera ja està configurada", + "walletSettings": "Configuració de la cartera", + "walletSettingsDescription": "Trieu el vostre idioma", + "phoneLanguage": "Idioma del telèfon", + "pushAuthorizationRequestTitle": "Sol·licitud d'autorització Push (PAR)", + "pushAuthorizationRequestSubTitle": "Predeterminat: false\nHabiliteu per assegurar el flux del codi d'autorització", + "cardIsValid": "La targeta és vàlida", + "cardIsExpired": "La targeta ha caducat", + "signatureIsInvalid": "La signatura no és vàlida", + "statusIsInvalid": "L'estat no és vàlid", + "statuslListSignatureFailed": "Error en la signatura de la llista d'estats", + "walletMetadataForIssuers": "Metadades de la cartera per a emissors", + "walletMetadataForVerifiers": "Metadades de la cartera per a verificadors", + "statusListCachingTitle": "Emmagatzematge en memòria cau de la llista d'estat", + "statusListCachingSubTitle": "Predeterminat: Activat\nApagueu per recarregar la llista d'estats quan sigui necessari", + "statusList": "Llista d'estats", + "statusListIndex": "Índex de la llista d'estats", + "theWalletIsSuspended": "La cartera està suspesa.", + "clientTypeTitle": "Esquema Client_id de la cartera", + "confidentialClient": "Client confidencial", + "jwkThumbprintP256Key": "Empremta digital JWK P-256" } \ No newline at end of file diff --git a/lib/l10n/arb/app_es.arb b/lib/l10n/arb/app_es.arb index b6a45d984..e1307f826 100644 --- a/lib/l10n/arb/app_es.arb +++ b/lib/l10n/arb/app_es.arb @@ -1040,6 +1040,29 @@ "blockchainCardsDiscoverSubtitle" : "Obtener prueba de propiedad de cuenta de criptoactivos", "successfullyAddedEnterpriseAccount":"¡Cuenta de Organización/Empresa añadida con éxito!", "successfullyUpdatedEnterpriseAccount": "¡Cuenta de Organiza ción/Empresa actualizada con éxito!", - "languageSelectorTitle": "espagnol" + "languageSelectorTitle": "espagnol", + "proofType": "Tipo de prueba OIDC4VCI", + "proofTypeSubtitle": "Predeterminado: jwt\nSeleccione uno de los tipos de prueba.", + "thisWalleIsAlreadyConfigured": "Esta cartera digital ya está configurada", + "walletSettings": "Configuración de la cartera digital", + "walletSettingsDescription": "Elige tu idioma", + "phoneLanguage": "Idioma del teléfono", + "pushAuthorizationRequestTitle": "Solicitud de Autorización Push (PAR)", + "pushAuthorizationRequestSubTitle": "Predeterminado: false\nHabilitar para asegurar el flujo del código de autorización", + "cardIsValid": "La tarjeta es válida", + "cardIsExpired": "La tarjeta ha caducado", + "signatureIsInvalid": "La firma no es válida", + "statusIsInvalid": "El estado no es válido", + "statuslListSignatureFailed": "Error en la firma de la lista de estado", + "walletMetadataForIssuers": "Metadatos de la cartera para emisores", + "walletMetadataForVerifiers": "Metadatos de la cartera para verificadores", + "statusListCachingTitle": "Almacenamiento en memoria caché de la lista de estados", + "statusListCachingSubTitle": "Predeterminado: Activado\nApague para recargar la lista de estados cuando sea necesario", + "statusList": "Lista de estados", + "statusListIndex": "Índice de lista de estados", + "theWalletIsSuspended": "La cartera digital está suspendida.", + "clientTypeTitle": "Esquema Client_id de la cartera digital", + "confidentialClient": "Cliente confidencial", + "jwkThumbprintP256Key": "Huella digital JWK P-256" } \ No newline at end of file diff --git a/lib/l10n/untranslated.json b/lib/l10n/untranslated.json index 59c248ba9..ab3681128 100644 --- a/lib/l10n/untranslated.json +++ b/lib/l10n/untranslated.json @@ -1,62 +1,16 @@ { "ca": [ - "proofType", - "proofTypeSubtitle", - "thisWalleIsAlreadyConfigured", - "walletSettings", - "walletSettingsDescription", "french", "spanish", "catalan", - "english", - "phoneLanguage", - "pushAuthorizationRequestTitle", - "pushAuthorizationRequestSubTitle", - "cardIsValid", - "cardIsExpired", - "signatureIsInvalid", - "statusIsInvalid", - "statuslListSignatureFailed", - "walletMetadataForIssuers", - "walletMetadataForVerifiers", - "statusListCachingTitle", - "statusListCachingSubTitle", - "statusList", - "statusListIndex", - "theWalletIsSuspended", - "clientTypeTitle", - "confidentialClient", - "jwkThumbprintP256Key" + "english" ], "es": [ - "proofType", - "proofTypeSubtitle", - "thisWalleIsAlreadyConfigured", - "walletSettings", - "walletSettingsDescription", "french", "spanish", "catalan", - "english", - "phoneLanguage", - "pushAuthorizationRequestTitle", - "pushAuthorizationRequestSubTitle", - "cardIsValid", - "cardIsExpired", - "signatureIsInvalid", - "statusIsInvalid", - "statuslListSignatureFailed", - "walletMetadataForIssuers", - "walletMetadataForVerifiers", - "statusListCachingTitle", - "statusListCachingSubTitle", - "statusList", - "statusListIndex", - "theWalletIsSuspended", - "clientTypeTitle", - "confidentialClient", - "jwkThumbprintP256Key" + "english" ], "fr": [ From 8b46d331ae66cb6ed8e066af48fae29bb9a8fbd8 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 09:17:12 +0000 Subject: [PATCH 15/19] Redirect after POST in OIDC4VP is in a webview ? #2692 --- lib/scan/cubit/scan_cubit.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/scan/cubit/scan_cubit.dart b/lib/scan/cubit/scan_cubit.dart index 54d04f122..577fcd88c 100644 --- a/lib/scan/cubit/scan_cubit.dart +++ b/lib/scan/cubit/scan_cubit.dart @@ -671,7 +671,7 @@ class ScanCubit extends Cubit { if (url.isNotEmpty) { await LaunchUrl.launch( url, - launchMode: LaunchMode.inAppWebView, + launchMode: LaunchMode.externalApplication, ); } } From fac636a7b54f869ac8a1923943d73a6d335e9bdf Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 09:22:37 +0000 Subject: [PATCH 16/19] REmove what's new #2697 --- lib/dashboard/src/view/dashboard_page.dart | 6 - .../src/widgets/what_is_new_dialog.dart | 340 ------------------ lib/dashboard/src/widgets/widgets.dart | 1 - .../cubit/import_wallet_cubit.dart | 3 - .../helper_function/helper_function.dart | 3 - lib/splash/cubit/splash_cubit.dart | 9 - 6 files changed, 362 deletions(-) delete mode 100644 lib/dashboard/src/widgets/what_is_new_dialog.dart diff --git a/lib/dashboard/src/view/dashboard_page.dart b/lib/dashboard/src/view/dashboard_page.dart index e5a8957f7..6963197aa 100644 --- a/lib/dashboard/src/view/dashboard_page.dart +++ b/lib/dashboard/src/view/dashboard_page.dart @@ -45,12 +45,6 @@ class _DashboardViewState extends State { context.read().deepLink(); context.read().startBeacon(); - final splashCubit = context.read(); - if (splashCubit.state.isNewVersion) { - WhatIsNewDialog.show(context); - splashCubit.disableWhatsNewPopUp(); - } - // check if enterprise account is suspended or not if (context.read().state.model.profileType == ProfileType.enterprise) { diff --git a/lib/dashboard/src/widgets/what_is_new_dialog.dart b/lib/dashboard/src/widgets/what_is_new_dialog.dart deleted file mode 100644 index 0cebf88c4..000000000 --- a/lib/dashboard/src/widgets/what_is_new_dialog.dart +++ /dev/null @@ -1,340 +0,0 @@ -// ignore_for_file: lines_longer_than_80_chars - -import 'package:altme/app/app.dart'; -import 'package:altme/dashboard/dashboard.dart'; -import 'package:altme/l10n/l10n.dart'; -import 'package:altme/splash/splash.dart'; -import 'package:altme/theme/theme.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -class WhatIsNewDialog extends StatelessWidget { - const WhatIsNewDialog({ - super.key, - }); - - static void show(BuildContext context) { - showDialog( - context: context, - useSafeArea: true, - builder: (_) => const WhatIsNewDialog(), - ); - } - - @override - Widget build(BuildContext context) { - final splashCubit = context.read(); - final versionNumber = splashCubit.state.versionNumber; - - final l10n = context.l10n; - - return SafeArea( - child: AlertDialog( - backgroundColor: Theme.of(context).colorScheme.popupBackground, - surfaceTintColor: Colors.transparent, - contentPadding: const EdgeInsets.all(Sizes.spaceXSmall), - insetPadding: const EdgeInsets.symmetric( - horizontal: Sizes.spaceSmall, - vertical: Sizes.spaceSmall, - ), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(Sizes.normalRadius), - ), - ), - content: SizedBox( - width: double.maxFinite, - child: Stack( - children: [ - Column( - mainAxisSize: MainAxisSize.min, - children: [ - const SizedBox(height: Sizes.spaceSmall), - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only( - left: Sizes.spaceNormal, - right: Sizes.spaceXLarge, - ), - child: Column( - children: [ - WalletLogo( - profileModel: - context.read().state.model, - height: Sizes.logoLarge * 1.05, - width: MediaQuery.of(context).size.shortestSide * - 0.5, - showPoweredBy: true, - ), - Text( - l10n.whatsNew, - style: Theme.of(context) - .textTheme - .defaultDialogTitle - .copyWith( - color: Colors.white, - ), - textAlign: TextAlign.center, - ), - NewContent( - version: versionNumber, - features: const [ - 'Improve Enterprise Wallet', - 'User experience improvement', - 'Bug fixes', - ], - ), - const NewContent( - version: '2.0.8', - features: [ - 'New Enterprise Wallet mode', - 'Upload Enterprise Wallet profiles', - 'Suspension/Revocation of wallet instances', - 'Support of Decentralized Identity Interop Profile (DIIP OIDC4VC profile)', - 'Attestation based client authentication (RFC7521)', - '2FA (biometric + PIN code)', - 'Bug fixes', - ], - ), - const NewContent( - version: '1.25.2', - features: [ - 'Developer mode improvement', - 'OIDC4VCI improvement', - 'Update code licenses', - 'Bug correction', - ], - ), - const NewContent( - version: '1.23.0', - features: [ - 'Developer mode improvement', - 'Bug correction', - ], - ), - const NewContent( - version: '1.21.8', - features: [ - 'Developper mode', - 'New splash screen', - 'extended OIDC4VC options', - ], - ), - const NewContent( - version: '1.20.18', - features: [ - 'Wallet connect V2 integration', - 'Bug fixes', - ], - ), - const NewContent( - version: '1.16.2', - features: [ - 'PolygonID mainnet integration', - 'PolygonID Twitter Attestations through Clique.Social', - 'DeFi compliance SBT for BNB Chain', - 'Bug fixes', - ], - ), - const NewContent( - version: '1.15.0', - features: [ - 'New cards designs', - 'Robust KYC solution (ID360) by Docaposte', - 'PolygonID integration for ZKP credentials', - 'New DeFi compliance credential', - 'New feature to add an identity layer to any crypto wallet', - 'New discover coins section in Altme', - 'Bug fixes', - ], - ), - const NewContent( - version: '1.13.24', - features: [ - 'Improved user experience', - 'New questions in FAQ', - 'New age card Over15', - 'End to end encryption of chat', - 'Check verifiable data registry for EBSI protocol', - ], - ), - const NewContent( - version: '1.12.4', - features: [ - 'Resolved wallet certificate generation issue.', - ], - ), - const NewContent( - version: '1.12.3', - features: [ - 'Resolved KYC stability issues.', - 'Integrated live chat support for partners with loyalty cards', - 'Expanded "Discover" section with the addition of Bloometa card', - 'Enhanced credential backup reliability on some devices', - 'Optimized help center layout and user experience', - ], - ), - const NewContent( - version: '1.11.4', - features: [ - 'Improve onboarding experience', - 'Add confirmation of recovery phrase', - 'Improve popup design', - 'Update SIOPV2 flow', - 'Add deeplink for EBSI credentials', - ], - ), - const NewContent( - version: '1.10.5', - features: [ - 'End to end encryption of decentralized chat in Altme', - 'Specific design for EBSI diploma card', - ], - ), - const NewContent( - version: '1.9.9', - features: [ - 'Integration of Matrix.org to give users access to a decentralized chat in Altme', - 'Compliance with EBSI and support of new official ID documents (diplomas...)', - ], - ), - const NewContent( - version: '1.8.13', - features: [ - 'Integration of an on-ramp solution to buy crypto', - 'New features : Help center', - 'New wallet certificate credential', - ], - ), - const NewContent( - version: '1.7.6', - features: [ - 'Bug correction', - ], - ), - const NewContent( - version: '1.7.5', - features: [ - 'New Chainborn gaming membership card', - 'Credential manifest input descriptors update', - 'Beacon pairing improvement', - ], - ), - const NewContent( - version: '1.7.1', - features: [ - 'Improve compatibility with more wallets', - 'Update Altme’s privacy, terms and conditions', - 'Update NFT detail screen information', - 'New category for Professional credentials', - ], - ), - const NewContent( - version: '1.6.5', - features: [ - 'Bug correction', - ], - ), - const NewContent( - version: '1.6.3', - features: [ - 'Support SBT (Soulbound Tokens)', - 'New Drawer', - 'New Device Info credential', - 'Bug fix', - ], - ), - const NewContent( - version: '1.5.7', - features: ['Upgrade Beacon behavior'], - ), - const NewContent( - version: '1.5.6', - features: [ - 'Age range with Al as 551 issuer', - 'Al issuer optimization', - ], - ), - const NewContent( - version: '1.5.1', - features: [ - 'Al verification to get Over13 and Over18 pass', - 'Ethereum support', - 'Privacy and terms update', - 'Enforced security', - 'User experience improvements', - ], - ), - const NewContent( - version: '1.4.8', - features: [ - 'Add Tezotopia membership card in Discover', - 'Update design of credentials', - ], - ), - const NewContent( - version: '1.4.4', - features: [ - 'Add the possibility to SEND an NFT to tezos blockchain address', - 'Improvements of user experience', - ], - ), - const NewContent( - version: '1.4.1', - features: ['New feature : NFT display in wallet'], - ), - const NewContent( - version: '1.3.7', - features: [ - 'FA1.2 and FA2 token support', - 'Beacon integration to connect to Tezos dApps', - 'Get multiple identity credentials after identity verification (OpenID for VC Issuance)', - 'Choose card categories to display', - 'New cards design', - 'Nationality card', - 'Age range card', - 'Liveness test', - 'Display card and token history', - ], - ), - const NewContent( - version: '1.1.0', - features: [ - 'USD value of tokens', - 'Multiple credentials presentation', - 'Wording', - 'Bug correction', - ], - ), - const SizedBox(height: Sizes.spaceSmall), - ], - ), - ), - ), - ), - Padding( - padding: const EdgeInsets.all(Sizes.spaceNormal), - child: MyGradientButton( - text: l10n.okGotIt, - verticalSpacing: 16, - fontSize: 18, - borderRadius: Sizes.normalRadius, - onPressed: () { - Navigator.of(context).pop(); - }, - ), - ), - ], - ), - const Align( - alignment: Alignment.topRight, - child: WhiteCloseButton(), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/dashboard/src/widgets/widgets.dart b/lib/dashboard/src/widgets/widgets.dart index f4e1e3918..562aabaf7 100644 --- a/lib/dashboard/src/widgets/widgets.dart +++ b/lib/dashboard/src/widgets/widgets.dart @@ -2,4 +2,3 @@ export 'bottom_bar_decoration.dart'; export 'bottom_bar_item.dart'; export 'home_title_leading.dart'; export 'new_content.dart'; -export 'what_is_new_dialog.dart'; diff --git a/lib/import_wallet/cubit/import_wallet_cubit.dart b/lib/import_wallet/cubit/import_wallet_cubit.dart index 978faa6bd..215603bb6 100644 --- a/lib/import_wallet/cubit/import_wallet_cubit.dart +++ b/lib/import_wallet/cubit/import_wallet_cubit.dart @@ -89,9 +89,6 @@ class ImportWalletCubit extends Cubit { await secureStorageProvider.set(SecureStorageKeys.ssiKey, ssiKey); } - /// what's new popup disabled - splashCubit.disableWhatsNewPopUp(); - /// crypto wallet with unknown blockchain type await walletCubit.createCryptoWallet( accountName: accountName, diff --git a/lib/onboarding/helper_function/helper_function.dart b/lib/onboarding/helper_function/helper_function.dart index e73712bde..f2c6585a7 100644 --- a/lib/onboarding/helper_function/helper_function.dart +++ b/lib/onboarding/helper_function/helper_function.dart @@ -36,9 +36,6 @@ Future generateAccount({ /// create profile await profileCubit.load(); - /// what's new popup disabled - splashCubit.disableWhatsNewPopUp(); - /// crypto wallet await walletCubit.createCryptoWallet( mnemonicOrKey: mnemonicFormatted, diff --git a/lib/splash/cubit/splash_cubit.dart b/lib/splash/cubit/splash_cubit.dart index 66330314c..b3e5835a0 100644 --- a/lib/splash/cubit/splash_cubit.dart +++ b/lib/splash/cubit/splash_cubit.dart @@ -109,13 +109,4 @@ class SplashCubit extends Cubit { ), ); } - - void disableWhatsNewPopUp() { - emit( - state.copyWith( - isNewVersion: false, - status: SplashStatus.idle, - ), - ); - } } From 4994e51466644e72ea8e117068699001b3d8a499 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 11:54:43 +0000 Subject: [PATCH 17/19] Verifier NETCETRA : wallet fails #2673 --- .../view/selective_disclosure_pick_page.dart | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart index e738ebf3d..10c001684 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart @@ -224,16 +224,8 @@ class _SelectiveDisclosurePickViewState if (encryptedValues != null) { var newJwt = '${encryptedValues[0]}~'; - // encryptedValues.removeAt(0); - - final organizedDisclosure = selectiveDisclosure - .disclosureToContent.entries - .toList() - .map((element) => element.key) - .toList(); - for (final index in selectedSDIndexInJWT) { - newJwt = '$newJwt${organizedDisclosure[index]}~'; + newJwt = '$newJwt${encryptedValues[index + 1]}~'; } // Key Binding JWT From ec80bb5d48cd010c90cdc107ca966d4f8fd95157 Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 13:53:04 +0000 Subject: [PATCH 18/19] Test #13 LSP POTENTIAL PID with nationalitie IT is failing #2699 --- .../selective_disclosure_pick_cubit.dart | 19 ++++--------------- .../view/selective_disclosure_pick_page.dart | 3 --- .../selective_disclosure.dart | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart index 13e7e0182..e0d39b34e 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/cubit/selective_disclosure_pick_cubit.dart @@ -84,19 +84,8 @@ class SelectiveDisclosureCubit extends Cubit { int? index; if (threeDotValue != null) { - final disclosureToContentEntries = - selectiveDisclosure.disclosureToContent.entries.toList(); - - for (final element in disclosureToContentEntries) { - final sh256Hash = oidc4vc.sh256HashOfContent(element.value.toString()); - - if (sh256Hash == threeDotValue) { - final disclosure = element.key.replaceAll('=', ''); - index = disclosureToContentEntries - .indexWhere((entry) => entry.key == disclosure); - break; - } - } + index = selectiveDisclosure.disclosureFromJWT + .indexWhere((entry) => entry == threeDotValue); } else if (claimsKey != null) { index = selectiveDisclosure.disclosureToContent.entries.toList().indexWhere( @@ -104,11 +93,11 @@ class SelectiveDisclosureCubit extends Cubit { ); } - if (index == null) { + if (index == null || index == -1) { throw ResponseMessage( data: { 'error': 'invalid_request', - 'error_description': 'Issue with the dislosuer of jwt.', + 'error_description': 'Issue with the dislosure of jwt.', }, ); } diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart index 10c001684..1a781e08e 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/selective_disclosure/view/selective_disclosure_pick_page.dart @@ -213,9 +213,6 @@ class _SelectiveDisclosurePickViewState } } - final selectiveDisclosure = - SelectiveDisclosure(widget.credentialToBePresented); - final encryptedValues = widget.credentialToBePresented.jwt ?.split('~') .where((element) => element.isNotEmpty) diff --git a/lib/selective_disclosure/selective_disclosure.dart b/lib/selective_disclosure/selective_disclosure.dart index bd65c31eb..de6b32fe1 100644 --- a/lib/selective_disclosure/selective_disclosure.dart +++ b/lib/selective_disclosure/selective_disclosure.dart @@ -243,7 +243,7 @@ class SelectiveDisclosure { ClaimsData( isfromDisclosureOfJWT: true, data: trimmedElement.last.replaceAll('"', ''), - threeDotValue: threeDotValue.toString(), + threeDotValue: oidc4vc.getDisclosure(element), ), ); } From a472a9c93a767fd9c8ffbf37e7b5aa9b80c9493b Mon Sep 17 00:00:00 2001 From: hawkbee1 Date: Thu, 30 May 2024 14:03:53 +0000 Subject: [PATCH 19/19] version: 2.5.9+459 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index c46c15a8c..6c2740949 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: altme description: AltMe Flutter App -version: 2.5.8+458 +version: 2.5.9+459 environment: sdk: ">=3.1.0 <4.0.0"