@pagopa/io-react-native-wallet 0.27.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/commonjs/credential/index.js +1 -5
- package/lib/commonjs/credential/index.js.map +1 -1
- package/lib/commonjs/credential/issuance/02-get-issuer-config.js +48 -0
- package/lib/commonjs/credential/issuance/02-get-issuer-config.js.map +1 -0
- package/lib/commonjs/credential/issuance/03-start-user-authorization.js +16 -20
- package/lib/commonjs/credential/issuance/03-start-user-authorization.js.map +1 -1
- package/lib/commonjs/credential/issuance/04-complete-user-authorization.js +8 -8
- package/lib/commonjs/credential/issuance/04-complete-user-authorization.js.map +1 -1
- package/lib/commonjs/credential/issuance/05-authorize-access.js +8 -9
- package/lib/commonjs/credential/issuance/05-authorize-access.js.map +1 -1
- package/lib/commonjs/credential/issuance/06-obtain-credential.js +18 -21
- package/lib/commonjs/credential/issuance/06-obtain-credential.js.map +1 -1
- package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js +3 -3
- package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
- package/lib/commonjs/credential/issuance/README.md +18 -21
- package/lib/commonjs/credential/issuance/index.js +3 -3
- package/lib/commonjs/credential/issuance/index.js.map +1 -1
- package/lib/commonjs/credential/issuance/types.js +1 -1
- package/lib/commonjs/credential/issuance/types.js.map +1 -1
- package/lib/commonjs/credential/presentation/01-start-flow.js +7 -2
- package/lib/commonjs/credential/presentation/01-start-flow.js.map +1 -1
- package/lib/commonjs/credential/presentation/02-evaluate-rp-trust.js +2 -2
- package/lib/commonjs/credential/presentation/02-evaluate-rp-trust.js.map +1 -1
- package/lib/commonjs/credential/presentation/03-retrieve-jwks.js +68 -0
- package/lib/commonjs/credential/presentation/03-retrieve-jwks.js.map +1 -0
- package/lib/commonjs/credential/presentation/{03-get-request-object.js → 04-get-request-object.js} +27 -13
- package/lib/commonjs/credential/presentation/04-get-request-object.js.map +1 -0
- package/lib/commonjs/credential/presentation/{04-send-authorization-response.js → 05-send-authorization-response.js} +1 -1
- package/lib/commonjs/credential/presentation/{04-send-authorization-response.js.map → 05-send-authorization-response.js.map} +1 -1
- package/lib/commonjs/credential/presentation/README.md +74 -2
- package/lib/commonjs/credential/presentation/index.js +15 -2
- package/lib/commonjs/credential/presentation/index.js.map +1 -1
- package/lib/commonjs/credential/presentation/types.js +5 -3
- package/lib/commonjs/credential/presentation/types.js.map +1 -1
- package/lib/commonjs/entity/openid-connect/issuer/index.js +25 -0
- package/lib/commonjs/entity/openid-connect/issuer/index.js.map +1 -0
- package/lib/commonjs/entity/openid-connect/issuer/types.js +61 -0
- package/lib/commonjs/entity/openid-connect/issuer/types.js.map +1 -0
- package/lib/commonjs/{trust → entity/trust}/chain.js +1 -1
- package/lib/commonjs/entity/trust/chain.js.map +1 -0
- package/lib/commonjs/{trust → entity/trust}/index.js +1 -1
- package/lib/commonjs/entity/trust/index.js.map +1 -0
- package/lib/commonjs/{trust → entity/trust}/types.js +2 -2
- package/lib/commonjs/entity/trust/types.js.map +1 -0
- package/lib/commonjs/index.js +1 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/pid/sd-jwt/types.js +2 -18
- package/lib/commonjs/pid/sd-jwt/types.js.map +1 -1
- package/lib/commonjs/sd-jwt/__test__/index.test.js +32 -23
- package/lib/commonjs/sd-jwt/__test__/index.test.js.map +1 -1
- package/lib/commonjs/sd-jwt/__test__/types.test.js +20 -11
- package/lib/commonjs/sd-jwt/__test__/types.test.js.map +1 -1
- package/lib/commonjs/sd-jwt/types.js +18 -5
- package/lib/commonjs/sd-jwt/types.js.map +1 -1
- package/lib/commonjs/utils/error-codes.js +1 -13
- package/lib/commonjs/utils/error-codes.js.map +1 -1
- package/lib/commonjs/utils/errors.js +2 -53
- package/lib/commonjs/utils/errors.js.map +1 -1
- package/lib/commonjs/utils/jwk.js +5 -1
- package/lib/commonjs/utils/jwk.js.map +1 -1
- package/lib/commonjs/utils/par.js +6 -12
- package/lib/commonjs/utils/par.js.map +1 -1
- package/lib/module/credential/index.js +1 -3
- package/lib/module/credential/index.js.map +1 -1
- package/lib/module/credential/issuance/02-get-issuer-config.js +42 -0
- package/lib/module/credential/issuance/02-get-issuer-config.js.map +1 -0
- package/lib/module/credential/issuance/03-start-user-authorization.js +16 -20
- package/lib/module/credential/issuance/03-start-user-authorization.js.map +1 -1
- package/lib/module/credential/issuance/04-complete-user-authorization.js +8 -8
- package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
- package/lib/module/credential/issuance/05-authorize-access.js +8 -9
- package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
- package/lib/module/credential/issuance/06-obtain-credential.js +18 -21
- package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
- package/lib/module/credential/issuance/07-verify-and-parse-credential.js +3 -3
- package/lib/module/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
- package/lib/module/credential/issuance/README.md +18 -21
- package/lib/module/credential/issuance/index.js +2 -2
- package/lib/module/credential/issuance/index.js.map +1 -1
- package/lib/module/credential/issuance/types.js +1 -1
- package/lib/module/credential/issuance/types.js.map +1 -1
- package/lib/module/credential/presentation/01-start-flow.js +7 -2
- package/lib/module/credential/presentation/01-start-flow.js.map +1 -1
- package/lib/module/credential/presentation/02-evaluate-rp-trust.js +1 -1
- package/lib/module/credential/presentation/02-evaluate-rp-trust.js.map +1 -1
- package/lib/module/credential/presentation/03-retrieve-jwks.js +61 -0
- package/lib/module/credential/presentation/03-retrieve-jwks.js.map +1 -0
- package/lib/module/credential/presentation/{03-get-request-object.js → 04-get-request-object.js} +26 -12
- package/lib/module/credential/presentation/04-get-request-object.js.map +1 -0
- package/lib/module/credential/presentation/{04-send-authorization-response.js → 05-send-authorization-response.js} +1 -1
- package/lib/module/credential/presentation/{04-send-authorization-response.js.map → 05-send-authorization-response.js.map} +1 -1
- package/lib/module/credential/presentation/README.md +74 -2
- package/lib/module/credential/presentation/index.js +4 -3
- package/lib/module/credential/presentation/index.js.map +1 -1
- package/lib/module/credential/presentation/types.js +5 -3
- package/lib/module/credential/presentation/types.js.map +1 -1
- package/lib/module/entity/openid-connect/issuer/index.js +20 -0
- package/lib/module/entity/openid-connect/issuer/index.js.map +1 -0
- package/lib/module/entity/openid-connect/issuer/types.js +47 -0
- package/lib/module/entity/openid-connect/issuer/types.js.map +1 -0
- package/lib/module/{trust → entity/trust}/chain.js +1 -1
- package/lib/module/entity/trust/chain.js.map +1 -0
- package/lib/module/{trust → entity/trust}/index.js +1 -1
- package/lib/module/entity/trust/index.js.map +1 -0
- package/lib/module/{trust → entity/trust}/types.js +2 -2
- package/lib/module/entity/trust/types.js.map +1 -0
- package/lib/module/index.js +1 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/pid/sd-jwt/types.js +1 -16
- package/lib/module/pid/sd-jwt/types.js.map +1 -1
- package/lib/module/sd-jwt/__test__/index.test.js +32 -23
- package/lib/module/sd-jwt/__test__/index.test.js.map +1 -1
- package/lib/module/sd-jwt/__test__/types.test.js +20 -11
- package/lib/module/sd-jwt/__test__/types.test.js.map +1 -1
- package/lib/module/sd-jwt/types.js +16 -4
- package/lib/module/sd-jwt/types.js.map +1 -1
- package/lib/module/utils/error-codes.js +1 -13
- package/lib/module/utils/error-codes.js.map +1 -1
- package/lib/module/utils/errors.js +0 -48
- package/lib/module/utils/errors.js.map +1 -1
- package/lib/module/utils/jwk.js +3 -0
- package/lib/module/utils/jwk.js.map +1 -1
- package/lib/module/utils/par.js +6 -12
- package/lib/module/utils/par.js.map +1 -1
- package/lib/typescript/credential/index.d.ts +1 -3
- package/lib/typescript/credential/index.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/01-start-flow.d.ts +1 -1
- package/lib/typescript/credential/issuance/02-get-issuer-config.d.ts +32 -0
- package/lib/typescript/credential/issuance/02-get-issuer-config.d.ts.map +1 -0
- package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts +3 -3
- package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +8 -8
- package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/05-authorize-access.d.ts +3 -3
- package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/06-obtain-credential.d.ts +3 -3
- package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/07-verify-and-parse-credential.d.ts +3 -3
- package/lib/typescript/credential/issuance/07-verify-and-parse-credential.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/index.d.ts +3 -3
- package/lib/typescript/credential/issuance/index.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/types.d.ts +4 -9
- package/lib/typescript/credential/issuance/types.d.ts.map +1 -1
- package/lib/typescript/credential/presentation/01-start-flow.d.ts.map +1 -1
- package/lib/typescript/credential/presentation/02-evaluate-rp-trust.d.ts +1 -1
- package/lib/typescript/credential/presentation/02-evaluate-rp-trust.d.ts.map +1 -1
- package/lib/typescript/credential/presentation/03-retrieve-jwks.d.ts +41 -0
- package/lib/typescript/credential/presentation/03-retrieve-jwks.d.ts.map +1 -0
- package/lib/typescript/credential/presentation/{03-get-request-object.d.ts → 04-get-request-object.d.ts} +4 -4
- package/lib/typescript/credential/presentation/04-get-request-object.d.ts.map +1 -0
- package/lib/typescript/credential/presentation/{04-send-authorization-response.d.ts → 05-send-authorization-response.d.ts} +2 -2
- package/lib/typescript/credential/presentation/{04-send-authorization-response.d.ts.map → 05-send-authorization-response.d.ts.map} +1 -1
- package/lib/typescript/credential/presentation/index.d.ts +5 -4
- package/lib/typescript/credential/presentation/index.d.ts.map +1 -1
- package/lib/typescript/credential/presentation/types.d.ts +15 -15
- package/lib/typescript/entity/openid-connect/issuer/index.d.ts +12 -0
- package/lib/typescript/entity/openid-connect/issuer/index.d.ts.map +1 -0
- package/lib/typescript/entity/openid-connect/issuer/types.d.ts +641 -0
- package/lib/typescript/entity/openid-connect/issuer/types.d.ts.map +1 -0
- package/lib/typescript/entity/trust/chain.d.ts.map +1 -0
- package/lib/typescript/{trust → entity/trust}/index.d.ts +97 -97
- package/lib/typescript/entity/trust/index.d.ts.map +1 -0
- package/lib/typescript/{trust → entity/trust}/types.d.ts +597 -597
- package/lib/typescript/{trust → entity/trust}/types.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/pid/sd-jwt/types.d.ts +25 -103
- package/lib/typescript/pid/sd-jwt/types.d.ts.map +1 -1
- package/lib/typescript/sd-jwt/index.d.ts +60 -20
- package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
- package/lib/typescript/sd-jwt/types.d.ts +114 -24
- package/lib/typescript/sd-jwt/types.d.ts.map +1 -1
- package/lib/typescript/utils/error-codes.d.ts +0 -12
- package/lib/typescript/utils/error-codes.d.ts.map +1 -1
- package/lib/typescript/utils/errors.d.ts +6 -37
- package/lib/typescript/utils/errors.d.ts.map +1 -1
- package/lib/typescript/utils/jwk.d.ts +135 -0
- package/lib/typescript/utils/jwk.d.ts.map +1 -1
- package/lib/typescript/utils/par.d.ts +1 -8
- package/lib/typescript/utils/par.d.ts.map +1 -1
- package/lib/typescript/wallet-instance-attestation/types.d.ts +12 -12
- package/package.json +1 -1
- package/src/credential/index.ts +1 -4
- package/src/credential/issuance/01-start-flow.ts +1 -1
- package/src/credential/issuance/02-get-issuer-config.ts +67 -0
- package/src/credential/issuance/03-start-user-authorization.ts +22 -30
- package/src/credential/issuance/04-complete-user-authorization.ts +11 -13
- package/src/credential/issuance/05-authorize-access.ts +8 -10
- package/src/credential/issuance/06-obtain-credential.ts +30 -31
- package/src/credential/issuance/07-verify-and-parse-credential.ts +6 -6
- package/src/credential/issuance/README.md +18 -21
- package/src/credential/issuance/index.ts +3 -6
- package/src/credential/issuance/types.ts +1 -1
- package/src/credential/presentation/01-start-flow.ts +8 -2
- package/src/credential/presentation/02-evaluate-rp-trust.ts +2 -2
- package/src/credential/presentation/03-retrieve-jwks.ts +73 -0
- package/src/credential/presentation/{03-get-request-object.ts → 04-get-request-object.ts} +33 -15
- package/src/credential/presentation/{04-send-authorization-response.ts → 05-send-authorization-response.ts} +1 -1
- package/src/credential/presentation/README.md +74 -2
- package/src/credential/presentation/index.ts +10 -2
- package/src/credential/presentation/types.ts +3 -3
- package/src/entity/openid-connect/issuer/index.ts +27 -0
- package/src/entity/openid-connect/issuer/types.ts +68 -0
- package/src/{trust → entity/trust}/chain.ts +2 -2
- package/src/{trust → entity/trust}/index.ts +1 -1
- package/src/{trust → entity/trust}/types.ts +2 -2
- package/src/index.ts +0 -2
- package/src/pid/sd-jwt/types.ts +1 -18
- package/src/sd-jwt/__test__/index.test.ts +47 -37
- package/src/sd-jwt/__test__/types.test.ts +26 -16
- package/src/sd-jwt/types.ts +16 -2
- package/src/utils/error-codes.ts +0 -12
- package/src/utils/errors.ts +12 -86
- package/src/utils/jwk.ts +5 -0
- package/src/utils/par.ts +3 -10
- package/lib/commonjs/credential/issuance/02-evaluate-issuer-trust.js +0 -27
- package/lib/commonjs/credential/issuance/02-evaluate-issuer-trust.js.map +0 -1
- package/lib/commonjs/credential/presentation/03-get-request-object.js.map +0 -1
- package/lib/commonjs/credential/status/01-start-flow.js +0 -2
- package/lib/commonjs/credential/status/01-start-flow.js.map +0 -1
- package/lib/commonjs/credential/status/02-status-attestation.js +0 -72
- package/lib/commonjs/credential/status/02-status-attestation.js.map +0 -1
- package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js +0 -52
- package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js.map +0 -1
- package/lib/commonjs/credential/status/README.md +0 -67
- package/lib/commonjs/credential/status/index.js +0 -27
- package/lib/commonjs/credential/status/index.js.map +0 -1
- package/lib/commonjs/credential/status/types.js +0 -48
- package/lib/commonjs/credential/status/types.js.map +0 -1
- package/lib/commonjs/credential/trustmark/README.md +0 -62
- package/lib/commonjs/credential/trustmark/get-credential-trustmark.js +0 -81
- package/lib/commonjs/credential/trustmark/get-credential-trustmark.js.map +0 -1
- package/lib/commonjs/credential/trustmark/index.js +0 -13
- package/lib/commonjs/credential/trustmark/index.js.map +0 -1
- package/lib/commonjs/trust/chain.js.map +0 -1
- package/lib/commonjs/trust/index.js.map +0 -1
- package/lib/commonjs/trust/types.js.map +0 -1
- package/lib/module/credential/issuance/02-evaluate-issuer-trust.js +0 -20
- package/lib/module/credential/issuance/02-evaluate-issuer-trust.js.map +0 -1
- package/lib/module/credential/presentation/03-get-request-object.js.map +0 -1
- package/lib/module/credential/status/01-start-flow.js +0 -2
- package/lib/module/credential/status/01-start-flow.js.map +0 -1
- package/lib/module/credential/status/02-status-attestation.js +0 -64
- package/lib/module/credential/status/02-status-attestation.js.map +0 -1
- package/lib/module/credential/status/03-verify-and-parse-status-attestation.js +0 -46
- package/lib/module/credential/status/03-verify-and-parse-status-attestation.js.map +0 -1
- package/lib/module/credential/status/README.md +0 -67
- package/lib/module/credential/status/index.js +0 -5
- package/lib/module/credential/status/index.js.map +0 -1
- package/lib/module/credential/status/types.js +0 -40
- package/lib/module/credential/status/types.js.map +0 -1
- package/lib/module/credential/trustmark/README.md +0 -62
- package/lib/module/credential/trustmark/get-credential-trustmark.js +0 -72
- package/lib/module/credential/trustmark/get-credential-trustmark.js.map +0 -1
- package/lib/module/credential/trustmark/index.js +0 -3
- package/lib/module/credential/trustmark/index.js.map +0 -1
- package/lib/module/trust/chain.js.map +0 -1
- package/lib/module/trust/index.js.map +0 -1
- package/lib/module/trust/types.js.map +0 -1
- package/lib/typescript/credential/issuance/02-evaluate-issuer-trust.d.ts +0 -19
- package/lib/typescript/credential/issuance/02-evaluate-issuer-trust.d.ts.map +0 -1
- package/lib/typescript/credential/presentation/03-get-request-object.d.ts.map +0 -1
- package/lib/typescript/credential/status/01-start-flow.d.ts +0 -10
- package/lib/typescript/credential/status/01-start-flow.d.ts.map +0 -1
- package/lib/typescript/credential/status/02-status-attestation.d.ts +0 -19
- package/lib/typescript/credential/status/02-status-attestation.d.ts.map +0 -1
- package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts +0 -24
- package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts.map +0 -1
- package/lib/typescript/credential/status/index.d.ts +0 -7
- package/lib/typescript/credential/status/index.d.ts.map +0 -1
- package/lib/typescript/credential/status/types.d.ts +0 -305
- package/lib/typescript/credential/status/types.d.ts.map +0 -1
- package/lib/typescript/credential/trustmark/get-credential-trustmark.d.ts +0 -52
- package/lib/typescript/credential/trustmark/get-credential-trustmark.d.ts.map +0 -1
- package/lib/typescript/credential/trustmark/index.d.ts +0 -4
- package/lib/typescript/credential/trustmark/index.d.ts.map +0 -1
- package/lib/typescript/trust/chain.d.ts.map +0 -1
- package/lib/typescript/trust/index.d.ts.map +0 -1
- package/src/credential/issuance/02-evaluate-issuer-trust.ts +0 -32
- package/src/credential/status/01-start-flow.ts +0 -9
- package/src/credential/status/02-status-attestation.ts +0 -102
- package/src/credential/status/03-verify-and-parse-status-attestation.ts +0 -60
- package/src/credential/status/README.md +0 -67
- package/src/credential/status/index.ts +0 -22
- package/src/credential/status/types.ts +0 -43
- package/src/credential/trustmark/README.md +0 -62
- package/src/credential/trustmark/get-credential-trustmark.ts +0 -120
- package/src/credential/trustmark/index.ts +0 -8
- /package/lib/typescript/{trust → entity/trust}/chain.d.ts +0 -0
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trust/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import { getCredentialIssuerEntityConfiguration } from "../../trust";
|
2
|
-
import { CredentialIssuerEntityConfiguration } from "../../trust/types";
|
3
|
-
import type { StartFlow } from "./01-start-flow";
|
4
|
-
import type { Out } from "../../utils/misc";
|
5
|
-
|
6
|
-
export type EvaluateIssuerTrust = (
|
7
|
-
issuerUrl: Out<StartFlow>["issuerUrl"],
|
8
|
-
context?: {
|
9
|
-
appFetch?: GlobalFetch["fetch"];
|
10
|
-
}
|
11
|
-
) => Promise<{
|
12
|
-
issuerConf: CredentialIssuerEntityConfiguration["payload"]["metadata"];
|
13
|
-
}>;
|
14
|
-
|
15
|
-
/**
|
16
|
-
* WARNING: This function must be called after {@link startFlow}. The next function to be called is {@link startUserAuthorization}.
|
17
|
-
* The Issuer trust evaluation phase.
|
18
|
-
* Fetch the Issuer's configuration and verify trust.
|
19
|
-
*
|
20
|
-
* @param issuerUrl The base url of the Issuer returned by {@link startFlow}
|
21
|
-
* @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
|
22
|
-
* @returns The Issuer's configuration
|
23
|
-
*/
|
24
|
-
export const evaluateIssuerTrust: EvaluateIssuerTrust = async (
|
25
|
-
issuerUrl,
|
26
|
-
context = {}
|
27
|
-
) => {
|
28
|
-
const issuerConf = await getCredentialIssuerEntityConfiguration(issuerUrl, {
|
29
|
-
appFetch: context.appFetch,
|
30
|
-
}).then((_) => _.payload.metadata);
|
31
|
-
return { issuerConf };
|
32
|
-
};
|
@@ -1,9 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* WARNING: This is the first function to be called in the status attestation flow. The next function to be called is {@link statusAttestation}.
|
3
|
-
* The beginning of the status attestation flow.
|
4
|
-
*
|
5
|
-
* @returns The url of the credential issuer to be used in the next function.
|
6
|
-
*/
|
7
|
-
export type StartFlow = () => {
|
8
|
-
issuerUrl: string;
|
9
|
-
};
|
@@ -1,102 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
getCredentialHashWithouDiscloures,
|
3
|
-
hasStatusOrThrow,
|
4
|
-
type Out,
|
5
|
-
} from "../../utils/misc";
|
6
|
-
import type { EvaluateIssuerTrust, ObtainCredential } from "../issuance";
|
7
|
-
import { type CryptoContext, SignJWT } from "@pagopa/io-react-native-jwt";
|
8
|
-
import uuid from "react-native-uuid";
|
9
|
-
import { StatusAttestationResponse } from "./types";
|
10
|
-
import {
|
11
|
-
IssuerResponseError,
|
12
|
-
IssuerResponseErrorCodes,
|
13
|
-
ResponseErrorBuilder,
|
14
|
-
UnexpectedStatusCodeError,
|
15
|
-
} from "../../utils/errors";
|
16
|
-
|
17
|
-
export type StatusAttestation = (
|
18
|
-
issuerConf: Out<EvaluateIssuerTrust>["issuerConf"],
|
19
|
-
credential: Out<ObtainCredential>["credential"],
|
20
|
-
credentialCryptoContext: CryptoContext,
|
21
|
-
appFetch?: GlobalFetch["fetch"]
|
22
|
-
) => Promise<{
|
23
|
-
statusAttestation: StatusAttestationResponse["status_attestation"];
|
24
|
-
}>;
|
25
|
-
|
26
|
-
/**
|
27
|
-
* WARNING: This function must be called after {@link startFlow}.
|
28
|
-
* Verify the status of the credential attestation.
|
29
|
-
* @param issuerConf - The issuer's configuration
|
30
|
-
* @param credential - The credential to be verified
|
31
|
-
* @param credentialCryptoContext - The credential's crypto context
|
32
|
-
* @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
|
33
|
-
* @throws {IssuerResponseError} with a specific code for more context
|
34
|
-
* @returns The credential status attestation
|
35
|
-
*/
|
36
|
-
export const statusAttestation: StatusAttestation = async (
|
37
|
-
issuerConf,
|
38
|
-
credential,
|
39
|
-
credentialCryptoContext,
|
40
|
-
appFetch: GlobalFetch["fetch"] = fetch
|
41
|
-
) => {
|
42
|
-
const jwk = await credentialCryptoContext.getPublicKey();
|
43
|
-
const credentialHash = await getCredentialHashWithouDiscloures(credential);
|
44
|
-
const statusAttUrl =
|
45
|
-
issuerConf.openid_credential_issuer.status_attestation_endpoint;
|
46
|
-
const credentialPop = await new SignJWT(credentialCryptoContext)
|
47
|
-
.setPayload({
|
48
|
-
aud: statusAttUrl,
|
49
|
-
jti: uuid.v4().toString(),
|
50
|
-
credential_hash: credentialHash,
|
51
|
-
credential_hash_alg: "S256",
|
52
|
-
})
|
53
|
-
.setProtectedHeader({
|
54
|
-
alg: "ES256",
|
55
|
-
typ: "status-attestation-request+jwt",
|
56
|
-
kid: jwk.kid,
|
57
|
-
})
|
58
|
-
.setIssuedAt()
|
59
|
-
.setExpirationTime("5m")
|
60
|
-
.sign();
|
61
|
-
|
62
|
-
const body = {
|
63
|
-
credential_pop: credentialPop,
|
64
|
-
};
|
65
|
-
|
66
|
-
const result = await appFetch(statusAttUrl, {
|
67
|
-
method: "POST",
|
68
|
-
headers: {
|
69
|
-
"Content-Type": "application/json",
|
70
|
-
},
|
71
|
-
body: JSON.stringify(body),
|
72
|
-
})
|
73
|
-
.then(hasStatusOrThrow(201))
|
74
|
-
.then((raw) => raw.json())
|
75
|
-
.then((json) => StatusAttestationResponse.parse(json))
|
76
|
-
.catch(handleStatusAttestationError);
|
77
|
-
|
78
|
-
return { statusAttestation: result.status_attestation };
|
79
|
-
};
|
80
|
-
|
81
|
-
/**
|
82
|
-
* Handle the status attestation error by mapping it to a custom exception.
|
83
|
-
* If the error is not an instance of {@link UnexpectedStatusCodeError}, it is thrown as is.
|
84
|
-
* @param e - The error to be handled
|
85
|
-
* @throws {IssuerResponseError} with a specific code for more context
|
86
|
-
*/
|
87
|
-
const handleStatusAttestationError = (e: unknown) => {
|
88
|
-
if (!(e instanceof UnexpectedStatusCodeError)) {
|
89
|
-
throw e;
|
90
|
-
}
|
91
|
-
|
92
|
-
throw new ResponseErrorBuilder(IssuerResponseError)
|
93
|
-
.handle(404, {
|
94
|
-
code: IssuerResponseErrorCodes.CredentialInvalidStatus,
|
95
|
-
message: "Invalid status found for the given credential",
|
96
|
-
})
|
97
|
-
.handle("*", {
|
98
|
-
code: IssuerResponseErrorCodes.StatusAttestationRequestFailed,
|
99
|
-
message: `Unable to obtain the status attestation for the given credential`,
|
100
|
-
})
|
101
|
-
.buildFrom(e);
|
102
|
-
};
|
@@ -1,60 +0,0 @@
|
|
1
|
-
import type { Out } from "../../utils/misc";
|
2
|
-
import { IoWalletError } from "../../utils/errors";
|
3
|
-
import { verify, type CryptoContext } from "@pagopa/io-react-native-jwt";
|
4
|
-
import type { EvaluateIssuerTrust, StatusAttestation } from "../status";
|
5
|
-
import { ParsedStatusAttestation } from "./types";
|
6
|
-
import { decode as decodeJwt } from "@pagopa/io-react-native-jwt";
|
7
|
-
|
8
|
-
export type VerifyAndParseStatusAttestation = (
|
9
|
-
issuerConf: Out<EvaluateIssuerTrust>["issuerConf"],
|
10
|
-
statusAttestation: Out<StatusAttestation>,
|
11
|
-
context: {
|
12
|
-
credentialCryptoContext: CryptoContext;
|
13
|
-
}
|
14
|
-
) => Promise<{ parsedStatusAttestation: ParsedStatusAttestation }>;
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Given a status attestation, verifies that:
|
18
|
-
* - It's in the supported format;
|
19
|
-
* - The attestation is correctly signed;
|
20
|
-
* - It's bound to the given key.
|
21
|
-
* @param issuerConf The Issuer configuration returned by {@link evaluateIssuerTrust}
|
22
|
-
* @param statusAttestation The encoded status attestation returned by {@link statusAttestation}
|
23
|
-
* @param context.credentialCryptoContext The crypto context used to obtain the credential in {@link obtainCredential}
|
24
|
-
* @returns A parsed status attestation
|
25
|
-
* @throws {IoWalletError} If the credential signature is not verified with the Issuer key set
|
26
|
-
* @throws {IoWalletError} If the credential is not bound to the provided user key
|
27
|
-
* @throws {IoWalletError} If the credential data fail to parse
|
28
|
-
*/
|
29
|
-
export const verifyAndParseStatusAttestation: VerifyAndParseStatusAttestation =
|
30
|
-
async (issuerConf, rawStatusAttestation, context) => {
|
31
|
-
try {
|
32
|
-
const { statusAttestation } = rawStatusAttestation;
|
33
|
-
const { credentialCryptoContext } = context;
|
34
|
-
|
35
|
-
await verify(
|
36
|
-
statusAttestation,
|
37
|
-
issuerConf.openid_credential_issuer.jwks.keys
|
38
|
-
);
|
39
|
-
|
40
|
-
const decodedJwt = decodeJwt(statusAttestation);
|
41
|
-
const parsedStatusAttestation = ParsedStatusAttestation.parse({
|
42
|
-
header: decodedJwt.protectedHeader,
|
43
|
-
payload: decodedJwt.payload,
|
44
|
-
});
|
45
|
-
|
46
|
-
const holderBindingKey = await credentialCryptoContext.getPublicKey();
|
47
|
-
const { cnf } = parsedStatusAttestation.payload;
|
48
|
-
if (!cnf.jwk.kid || cnf.jwk.kid !== holderBindingKey.kid) {
|
49
|
-
throw new IoWalletError(
|
50
|
-
`Failed to verify holder binding for status attestation, expected kid: ${holderBindingKey.kid}, got: ${parsedStatusAttestation.payload.cnf.jwk.kid}`
|
51
|
-
);
|
52
|
-
}
|
53
|
-
|
54
|
-
return { parsedStatusAttestation };
|
55
|
-
} catch (e) {
|
56
|
-
throw new IoWalletError(
|
57
|
-
`Failed to verify status attestation: ${JSON.stringify(e)}`
|
58
|
-
);
|
59
|
-
}
|
60
|
-
};
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# Credential Status Attestation
|
2
|
-
|
3
|
-
This flow is used to obtain a credential status attestation from its credential issuer. Each step in the flow is imported from the related file which is named with a sequential number.
|
4
|
-
The credential status attestation is a JWT which contains the credential status which indicates if the credential is valid or not.
|
5
|
-
The status attestation is supposed to be stored securely along with the credential. It has a limited lifetime and should be refreshed periodically according to the `exp` field in the JWT payload.
|
6
|
-
|
7
|
-
## Sequence Diagram
|
8
|
-
|
9
|
-
```mermaid
|
10
|
-
graph TD;
|
11
|
-
0[startFlow]
|
12
|
-
1[statusAttestation]
|
13
|
-
2[verifyAndParseStatusAttestation]
|
14
|
-
|
15
|
-
0 --> 1
|
16
|
-
1 --> 2
|
17
|
-
```
|
18
|
-
|
19
|
-
|
20
|
-
## Mapped results
|
21
|
-
|
22
|
-
The following errors are mapped to a `IssuerResponseError` with specific codes.
|
23
|
-
|
24
|
-
|HTTP Status|Error Code|Description|
|
25
|
-
|-----------|----------|-----------|
|
26
|
-
|`404 Not Found`|`ERR_CREDENTIAL_INVALID_STATUS`|This response is returned by the credential issuer when the status attestation is invalid. It might contain more details in the `reason` property.|
|
27
|
-
|
28
|
-
## Example
|
29
|
-
|
30
|
-
<details>
|
31
|
-
<summary>Credential status attestation flow</summary>
|
32
|
-
|
33
|
-
```ts
|
34
|
-
// Start the issuance flow
|
35
|
-
const credentialIssuerUrl = "https://issuer.example.com";
|
36
|
-
const startFlow: Credential.Status.StartFlow = () => ({
|
37
|
-
issuerUrl: credentialIssuerUrl, // Let's assum
|
38
|
-
});
|
39
|
-
|
40
|
-
const { issuerUrl } = startFlow();
|
41
|
-
|
42
|
-
// Evaluate issuer trust
|
43
|
-
const { issuerConf } = await Credential.Status.evaluateIssuerTrust(issuerUrl);
|
44
|
-
|
45
|
-
// Get the credential attestation
|
46
|
-
const res = await Credential.Status.statusAttestation(
|
47
|
-
issuerConf,
|
48
|
-
credential,
|
49
|
-
credentialCryptoContext
|
50
|
-
);
|
51
|
-
|
52
|
-
// Verify and parse the status attestation
|
53
|
-
const { parsedStatusAttestation } =
|
54
|
-
await Credential.Status.verifyAndParseStatusAttestation(
|
55
|
-
issuerConf,
|
56
|
-
res.statusAttestation,
|
57
|
-
{ credentialCryptoContext }
|
58
|
-
);
|
59
|
-
|
60
|
-
return {
|
61
|
-
statusAttestation: res.statusAttestation,
|
62
|
-
parsedStatusAttestation,
|
63
|
-
credentialType,
|
64
|
-
};
|
65
|
-
```
|
66
|
-
|
67
|
-
</details>
|
@@ -1,22 +0,0 @@
|
|
1
|
-
import { type StartFlow } from "./01-start-flow";
|
2
|
-
import {
|
3
|
-
statusAttestation,
|
4
|
-
type StatusAttestation,
|
5
|
-
} from "./02-status-attestation";
|
6
|
-
import { evaluateIssuerTrust, type EvaluateIssuerTrust } from "../issuance";
|
7
|
-
import {
|
8
|
-
verifyAndParseStatusAttestation,
|
9
|
-
type VerifyAndParseStatusAttestation,
|
10
|
-
} from "./03-verify-and-parse-status-attestation";
|
11
|
-
|
12
|
-
export {
|
13
|
-
evaluateIssuerTrust,
|
14
|
-
statusAttestation,
|
15
|
-
verifyAndParseStatusAttestation,
|
16
|
-
};
|
17
|
-
export type {
|
18
|
-
StartFlow,
|
19
|
-
EvaluateIssuerTrust,
|
20
|
-
StatusAttestation,
|
21
|
-
VerifyAndParseStatusAttestation,
|
22
|
-
};
|
@@ -1,43 +0,0 @@
|
|
1
|
-
import { UnixTime } from "../../sd-jwt/types";
|
2
|
-
import { JWK } from "../../utils/jwk";
|
3
|
-
import * as z from "zod";
|
4
|
-
|
5
|
-
/**
|
6
|
-
* Shape from parsing a status attestation response in case of 201.
|
7
|
-
*/
|
8
|
-
export const StatusAttestationResponse = z.object({
|
9
|
-
status_attestation: z.string(),
|
10
|
-
});
|
11
|
-
|
12
|
-
/**
|
13
|
-
* Type from parsing a status attestation response in case of 201.
|
14
|
-
* Inferred from {@link StatusAttestationResponse}.
|
15
|
-
*/
|
16
|
-
export type StatusAttestationResponse = z.infer<
|
17
|
-
typeof StatusAttestationResponse
|
18
|
-
>;
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Type for a parsed status attestation.
|
22
|
-
*/
|
23
|
-
export type ParsedStatusAttestation = z.infer<typeof ParsedStatusAttestation>;
|
24
|
-
|
25
|
-
/**
|
26
|
-
* Shape for parsing a status attestation in a JWT.
|
27
|
-
*/
|
28
|
-
export const ParsedStatusAttestation = z.object({
|
29
|
-
header: z.object({
|
30
|
-
typ: z.literal("status-attestation+jwt"),
|
31
|
-
alg: z.string(),
|
32
|
-
kid: z.string().optional(),
|
33
|
-
}),
|
34
|
-
payload: z.object({
|
35
|
-
credential_hash_alg: z.string(),
|
36
|
-
credential_hash: z.string(),
|
37
|
-
cnf: z.object({
|
38
|
-
jwk: JWK,
|
39
|
-
}),
|
40
|
-
exp: UnixTime,
|
41
|
-
iat: UnixTime,
|
42
|
-
}),
|
43
|
-
});
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# Credential Trustmark
|
2
|
-
|
3
|
-
A credential TrustMark is a signed JWT that verifies the authenticity of a credential issued by a trusted source. It serves as proof that a credential is valid and linked to a specific wallet instance.
|
4
|
-
The TrustMark is often presented as a QR code, containing cryptographic data to ensure it hasn't been tampered with. It includes fields like issuer, issuance and expiration timestamps, and credential-specific details. TrustMarks have a short validity period and are used to enhance security and prevent misuse, such as QR code swapping.
|
5
|
-
|
6
|
-
### getCredentialTrustmark
|
7
|
-
|
8
|
-
A function that generates a signed JWT Trustmark to verify the authenticity of a digital credential. The Trustmark serves as a cryptographic proof linking a credential to a specific wallet instance, ensuring the credential's validity and preventing unauthorized modifications or misuse.
|
9
|
-
|
10
|
-
#### Signature
|
11
|
-
|
12
|
-
```typescript
|
13
|
-
function getCredentialTrustmark({
|
14
|
-
walletInstanceAttestation: string,
|
15
|
-
wiaCryptoContext: CryptoContext,
|
16
|
-
credentialType: string,
|
17
|
-
docNumber?: string,
|
18
|
-
expirationTime?: number | string
|
19
|
-
}): Promise<{
|
20
|
-
jwt: string,
|
21
|
-
expirationTime: number
|
22
|
-
}>
|
23
|
-
```
|
24
|
-
|
25
|
-
#### Parameters
|
26
|
-
| Parameter | Type | Required | Description |
|
27
|
-
|-----------|------|----------|-------------|
|
28
|
-
| walletInstanceAttestation | string | Yes | A base64-encoded string containing the Wallet Instance Attestation (WIA). This attestation proves the authenticity of the wallet instance. |
|
29
|
-
| wiaCryptoContext | CryptoContext | Yes | The cryptographic context associated with the wallet instance. Must contain the same key pair used to generate the WIA. |
|
30
|
-
| credentialType | string | Yes | Identifier for the type of credential (e.g., "MDL" for Mobile Driver's License). |
|
31
|
-
| docNumber | string | No | The document number of the credential. If provided, it will be obfuscated in the Trustmark for privacy. |
|
32
|
-
| expirationTime | number \| string | No | Specifies when the Trustmark expires. Can be either:<br>- A timestamp in seconds<br>- A time span string (e.g., "2m" for 2 minutes)<br>Default: "2m" |
|
33
|
-
|
34
|
-
#### Return Value
|
35
|
-
|
36
|
-
Returns a Promise that resolves to an object containing:
|
37
|
-
| Property | Type | Description |
|
38
|
-
|----------|------|-------------|
|
39
|
-
| jwt | string | The signed trustmark JWT string |
|
40
|
-
| expirationTime | number | The expiration timestamp of the JWT in seconds |
|
41
|
-
|
42
|
-
## Example
|
43
|
-
|
44
|
-
```typescript
|
45
|
-
// Required inputs
|
46
|
-
const walletInstanceAttestation = "base64AttestationString";
|
47
|
-
const credentialType = "MDL"; // Credential type (e.g., Mobile Driver's License)
|
48
|
-
const documentNumber = "AB123456"; // Optional document number
|
49
|
-
const cryptoContext = createCryptoContextFor("wiaKeyTag"); // Sample crypto context
|
50
|
-
|
51
|
-
// Generate the TrustMark JWT
|
52
|
-
const { jwt, expirationTime } = await getCredentialTrustmark({
|
53
|
-
walletInstanceAttestation: "eyJ0eXAi...", // WIA JWT
|
54
|
-
wiaCryptoContext: cryptoContext,
|
55
|
-
credentialType: "IdentityCard",
|
56
|
-
docNumber: "AB123456",
|
57
|
-
expirationTime: "5m", // 5 minutes
|
58
|
-
});
|
59
|
-
|
60
|
-
console.log("Generated TrustMark JWT:", jwt);
|
61
|
-
console.log("Expires at:", new Date(expirationTime * 1000));
|
62
|
-
```
|
@@ -1,120 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
SignJWT,
|
3
|
-
thumbprint,
|
4
|
-
type CryptoContext,
|
5
|
-
decode as decodeJwt,
|
6
|
-
} from "@pagopa/io-react-native-jwt";
|
7
|
-
import * as WalletInstanceAttestation from "../../wallet-instance-attestation";
|
8
|
-
import { IoWalletError } from "../../utils/errors";
|
9
|
-
import { obfuscateString } from "../../utils/string";
|
10
|
-
|
11
|
-
export type GetCredentialTrustmarkJwt = (params: {
|
12
|
-
/**
|
13
|
-
* The Wallet Instance's attestation
|
14
|
-
*/
|
15
|
-
walletInstanceAttestation: string;
|
16
|
-
/**
|
17
|
-
* The Wallet Instance's crypto context associated with the walletInstanceAttestation parameter
|
18
|
-
*/
|
19
|
-
wiaCryptoContext: CryptoContext;
|
20
|
-
/**
|
21
|
-
* The type of credential for which the trustmark is generated
|
22
|
-
*/
|
23
|
-
credentialType: string;
|
24
|
-
/**
|
25
|
-
* (Optional) Document number contained in the credential, if applicable
|
26
|
-
*/
|
27
|
-
docNumber?: string;
|
28
|
-
/**
|
29
|
-
* (Optional) Expiration time for the trustmark, default is 2 minutes.
|
30
|
-
* If a number is provided, it is interpreted as a timestamp in seconds.
|
31
|
-
* If a string is provided, it is interpreted as a time span and added to the current timestamp.
|
32
|
-
*/
|
33
|
-
expirationTime?: number | string;
|
34
|
-
}) => Promise<{
|
35
|
-
/**
|
36
|
-
* The signed JWT
|
37
|
-
*/
|
38
|
-
jwt: string;
|
39
|
-
/**
|
40
|
-
* The expiration time of the JWT in seconds
|
41
|
-
*/
|
42
|
-
expirationTime: number;
|
43
|
-
}>;
|
44
|
-
|
45
|
-
/**
|
46
|
-
* Generates a trustmark signed JWT, which is used to verify the authenticity of a credential.
|
47
|
-
* The public key used to sign the trustmark must the same used for the Wallet Instance Attestation.
|
48
|
-
*
|
49
|
-
* @param walletInstanceAttestation the Wallet Instance's attestation
|
50
|
-
* @param wiaCryptoContext The Wallet Instance's crypto context associated with the walletInstanceAttestation parameter
|
51
|
-
* @param credentialType The type of credential for which the trustmark is generated
|
52
|
-
* @param docNumber (Optional) Document number contained in the credential, if applicable
|
53
|
-
* @param expirationTime (Optional) Expiration time for the trustmark, default is 2 minutes.
|
54
|
-
* If a number is provided, it is interpreted as a timestamp in seconds.
|
55
|
-
* If a string is provided, it is interpreted as a time span and added to the current timestamp.
|
56
|
-
* @throws {IoWalletError} If the WIA is expired
|
57
|
-
* @throws {IoWalletError} If the public key associated to the WIA is not the same for the CryptoContext
|
58
|
-
* @throws {JWSSignatureVerificationFailed} If the WIA signature is not valid
|
59
|
-
* @returns A promise containing the signed JWT and its expiration time in seconds
|
60
|
-
*/
|
61
|
-
export const getCredentialTrustmark: GetCredentialTrustmarkJwt = async ({
|
62
|
-
walletInstanceAttestation,
|
63
|
-
wiaCryptoContext,
|
64
|
-
credentialType,
|
65
|
-
docNumber,
|
66
|
-
expirationTime = "2m",
|
67
|
-
}) => {
|
68
|
-
/**
|
69
|
-
* Check that the public key used to sign the trustmark is the one used for the WIA
|
70
|
-
*/
|
71
|
-
const holderBindingKey = await wiaCryptoContext.getPublicKey();
|
72
|
-
const decodedWia = WalletInstanceAttestation.decode(
|
73
|
-
walletInstanceAttestation
|
74
|
-
);
|
75
|
-
|
76
|
-
/**
|
77
|
-
* Check that the WIA is not expired
|
78
|
-
*/
|
79
|
-
if (decodedWia.payload.exp * 1000 < Date.now()) {
|
80
|
-
throw new IoWalletError("Wallet Instance Attestation expired");
|
81
|
-
}
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Verify holder binding by comparing thumbprints of the WIA and the CryptoContext key
|
85
|
-
*/
|
86
|
-
const wiaThumbprint = await thumbprint(decodedWia.payload.cnf.jwk);
|
87
|
-
const cryptoContextThumbprint = await thumbprint(holderBindingKey);
|
88
|
-
|
89
|
-
if (wiaThumbprint !== cryptoContextThumbprint) {
|
90
|
-
throw new IoWalletError(
|
91
|
-
`Failed to verify holder binding for status attestation, expected thumbprint: ${cryptoContextThumbprint}, got: ${wiaThumbprint}`
|
92
|
-
);
|
93
|
-
}
|
94
|
-
|
95
|
-
/**
|
96
|
-
* Generate Trustmark signed JWT
|
97
|
-
*/
|
98
|
-
const signedTrustmarkJwt = await new SignJWT(wiaCryptoContext)
|
99
|
-
.setProtectedHeader({
|
100
|
-
alg: "ES256",
|
101
|
-
})
|
102
|
-
.setPayload({
|
103
|
-
iss: walletInstanceAttestation,
|
104
|
-
/**
|
105
|
-
* If present, the document number is obfuscated before adding it to the payload
|
106
|
-
*/
|
107
|
-
...(docNumber ? { sub: obfuscateString(docNumber) } : {}),
|
108
|
-
subtyp: credentialType,
|
109
|
-
})
|
110
|
-
.setIssuedAt()
|
111
|
-
.setExpirationTime(expirationTime)
|
112
|
-
.sign();
|
113
|
-
|
114
|
-
const decodedTrustmark = decodeJwt(signedTrustmarkJwt);
|
115
|
-
|
116
|
-
return {
|
117
|
-
jwt: signedTrustmarkJwt,
|
118
|
-
expirationTime: decodedTrustmark.payload.exp ?? 0,
|
119
|
-
};
|
120
|
-
};
|
File without changes
|