Skip to content

Commit

Permalink
feat: Add aud as domain in the options of didkit presentation signing
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Aug 16, 2023
1 parent 73d4c68 commit 2103359
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,9 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {
}

Future<void> launchOIDC4VPWithRequestUriAsValueFlow() async {
if (isUriAsValueValid && keys.contains('presentation_definition')) {
if (isUriAsValueValid &&
keys.contains('presentation_definition') &&
keys.contains('aud')) {
final String presentationDefinitionValue =
state.uri?.queryParameters['presentation_definition'] ?? '';

Expand Down Expand Up @@ -858,15 +860,15 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {

for (int i = 0; i < credentials.length; i++) {
emit(state.loading());
final credentialTypeOrId = credentials[i];
final credentialType = credentials[i];
await getAndAddCredential(
scannedResponse: state.uri.toString(),
credentialsCubit: credentialsCubit,
oidc4vc: oidc4vc,
oidc4vcType: currentOIIDC4VCType,
didKitProvider: didKitProvider,
secureStorageProvider: getSecureStorage,
credentialTypeOrId: credentialTypeOrId.toString(),
credentialType: credentialType.toString(),
isLastCall: i + 1 == credentials.length,
dioClient: DioClient('', Dio()),
);
Expand Down
4 changes: 2 additions & 2 deletions lib/oidc4vc/add_oidc4vc_credential.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Future<void> addOIDC4VCCredential({
required CredentialsCubit credentialsCubit,
required OIDC4VCType oidc4vcType,
required String issuer,
required String credentialTypeOrId,
required String credentialType,
required bool isLastCall,
}) async {
late Map<String, dynamic> credentialFromOIDC4VC;
Expand Down Expand Up @@ -59,7 +59,7 @@ Future<void> addOIDC4VCCredential({
final CredentialManifest? credentialManifest = await getCredentialManifest(
Dio(),
issuer,
credentialTypeOrId,
credentialType,
oidc4vcType.schemaForType,
);

Expand Down
18 changes: 9 additions & 9 deletions lib/oidc4vc/initiate_oidv4vc_credential_issuance.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Future<void> initiateOIDC4VCCredentialIssuance({
}) async {
final Uri uriFromScannedResponse = Uri.parse(scannedResponse);

late dynamic credentialTypeOrId;
late dynamic credentialType;

switch (oidc4vcType) {
case OIDC4VCType.DEFAULT:
Expand All @@ -32,11 +32,11 @@ Future<void> initiateOIDC4VCCredentialIssuance({
);
if (credentialOfferJson == null) throw Exception();

credentialTypeOrId = credentialOfferJson['credentials'];
credentialType = credentialOfferJson['credentials'];
break;
case OIDC4VCType.GAIAX:
case OIDC4VCType.EBSIV2:
credentialTypeOrId =
credentialType =
uriFromScannedResponse.queryParameters['credential_type'];

break;
Expand All @@ -45,8 +45,8 @@ Future<void> initiateOIDC4VCCredentialIssuance({
break;
}

if (credentialTypeOrId is List<dynamic>) {
qrCodeScanCubit.navigateToOidc4vcCredentialPickPage(credentialTypeOrId);
if (credentialType is List<dynamic>) {
qrCodeScanCubit.navigateToOidc4vcCredentialPickPage(credentialType);
} else {
final OIDC4VC oidc4vc = oidc4vcType.getOIDC4VC;
await getAndAddCredential(
Expand All @@ -55,7 +55,7 @@ Future<void> initiateOIDC4VCCredentialIssuance({
oidc4vc: oidc4vc,
didKitProvider: didKitProvider,
credentialsCubit: credentialsCubit,
credentialTypeOrId: credentialTypeOrId.toString(),
credentialType: credentialType.toString(),
secureStorageProvider: secureStorageProvider,
isLastCall: true,
dioClient: dioClient,
Expand All @@ -71,7 +71,7 @@ Future<void> getAndAddCredential({
required OIDC4VCType oidc4vcType,
required DIDKitProvider didKitProvider,
required CredentialsCubit credentialsCubit,
required String credentialTypeOrId,
required String credentialType,
required SecureStorageProvider secureStorageProvider,
required bool isLastCall,
required DioClient dioClient,
Expand Down Expand Up @@ -147,7 +147,7 @@ Future<void> getAndAddCredential({
final dynamic encodedCredentialFromOIDC4VC = await oidc4vc.getCredential(
preAuthorizedCode: preAuthorizedCode,
issuer: issuer,
credentialTypeOrId: credentialTypeOrId,
credentialType: credentialType,
did: did,
kid: kid,
credentialRequestUri: uriFromScannedResponse,
Expand All @@ -161,7 +161,7 @@ Future<void> getAndAddCredential({
credentialsCubit: credentialsCubit,
oidc4vcType: oidc4vcType,
issuer: issuer,
credentialTypeOrId: credentialTypeOrId,
credentialType: credentialType,
isLastCall: isLastCall,
);
} else {
Expand Down
9 changes: 8 additions & 1 deletion lib/scan/cubit/scan_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,13 @@ class ScanCubit extends Cubit<ScanState> {
final redirectUri = uri.queryParameters['redirect_uri'] ?? '';
final nonce = uri.queryParameters['nonce'] ?? '';
final aud = uri.queryParameters['aud'] ?? '';
await presentCredentialToOID4VPRequest(
uri: uri,
issuer: issuer,
credentialsToBePresented: credentialsToBePresented,
nonce: nonce,
domain: aud,
presentationDefinition:
credentialModel.credentialManifest!.presentationDefinition!,
redirectUri: redirectUri,
Expand Down Expand Up @@ -521,6 +523,7 @@ class ScanCubit extends Cubit<ScanState> {
final vpToken = await createVpToken(
credentialsToBePresented: [credential],
challenge: sIOPV2Param.nonce!,
domain: '',
);
final idToken = await createIdToken(nonce: sIOPV2Param.nonce!);
// prepare the post request
Expand Down Expand Up @@ -652,6 +655,7 @@ class ScanCubit extends Cubit<ScanState> {
required List<CredentialModel>? credentialsToBePresented,
required PresentationDefinition presentationDefinition,
required String nonce,
required String domain,
required String redirectUri,
required Issuer issuer,
required OIDC4VC oidc4vc,
Expand All @@ -672,6 +676,7 @@ class ScanCubit extends Cubit<ScanState> {
vpToken = await createVpToken(
credentialsToBePresented: credentialsToBePresented!,
challenge: nonce,
domain: domain,
);
} else if (oidc4vcType.issuerVcType == 'jwt_vc') {
final credentialList = credentialsToBePresented!
Expand Down Expand Up @@ -795,6 +800,7 @@ class ScanCubit extends Cubit<ScanState> {

Future<String> createVpToken({
required String challenge,
required String domain,
required List<CredentialModel> credentialsToBePresented,
}) async {
final ssiKey = await secureStorageProvider.get(SecureStorageKeys.ssiKey);
Expand All @@ -803,7 +809,8 @@ class ScanCubit extends Cubit<ScanState> {
'verificationMethod':
await secureStorageProvider.get(SecureStorageKeys.verificationMethod),
'proofPurpose': 'authentication',
'challenge': challenge
'challenge': challenge,
'domain': domain,
});
final presentationId = 'urn:uuid:${const Uuid().v4()}';
final vpToken = await didKitProvider.issuePresentation(
Expand Down
8 changes: 4 additions & 4 deletions packages/oidc4vc/lib/src/oidc4vc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ class OIDC4VC {
/// Retreive credential_type from url
Future<dynamic> getCredential({
required String issuer,
required String credentialTypeOrId,
required String credentialType,
required String did,
required String kid,
required Uri credentialRequestUri,
Expand Down Expand Up @@ -234,7 +234,7 @@ class OIDC4VC {
issuerTokenParameters: issuerTokenParameters,
credentialRequestUri: credentialRequestUri,
openidConfigurationResponse: openidConfigurationResponse,
credentialTypeOrId: credentialTypeOrId,
credentialType: credentialType,
credentialSupportedTypes: credentialSupportedTypes,
);

Expand Down Expand Up @@ -409,7 +409,7 @@ class OIDC4VC {
required IssuerTokenParameters issuerTokenParameters,
required Uri credentialRequestUri,
required Response<Map<String, dynamic>> openidConfigurationResponse,
required String credentialTypeOrId,
required String credentialType,
required List<String> credentialSupportedTypes,
}) async {
final vcJwt = await getIssuerJwt(issuerTokenParameters, nonce);
Expand All @@ -427,7 +427,7 @@ class OIDC4VC {
// }

final credentialData = <String, dynamic>{
'type': credentialTypeOrId,
'type': credentialType,
'types': credentialSupportedTypes,
'format': oidc4vcModel.issuerVcType,
'proof': {
Expand Down

0 comments on commit 2103359

Please sign in to comment.