verify

suspend fun verify(sessionTranscript: DataItem, eReaderKey: AsymmetricKey? = null, deviceRequest: DeviceRequest? = null, documentTypeRepository: DocumentTypeRepository? = null, atTime: Instant = Clock.System.now())

Verifies the integrity of the returned documents, according to ISO/IEC 18013-5.

The following checks are performed for each MdocDocument instance in documents:

  • For MdocDocument.issuerAuth the signature is checked against the leaf certificate in the associated X.509 chain.

  • The document type in the MSO matches the docType in the response.

  • The MSO is validity period includes the passed-in atTime.

  • The data returned in MdocDocument.issuerNamespaces is checked against digests in the MSO.

  • The device-authentication structures (ECDSA or MAC) are checked.

  • For each transaction data in the list, verifies that transaction hash is present in the response and matches the hash of the source transaction data

The following checks are performed for each OtherDocument instance in otherDocuments:

  • For document format sd-jwt+kb:

    • The SD-JWT+KB is constructed from decompressing OtherDocument.data

    • Verification is done with org.multipaz.sdjwt.SdJwtKb.verify using the issuer signing key from the leaf certificate in the org.multipaz.sdjwt.SdJwt.x5c, the nonce derived from the session transcript, creation-time is checked against the passed-in atTime, and audience is checked to be derived from ReaderAuthAll or ReaderAuth for signed requests or none for unsigned requests.

    • The credential's validity period includes the passed-in atTime.

The following checks are expected to be done by the application:

Parameters

sessionTranscript

the session transcript to use.

eReaderKey

the ephemeral reader key or null if not using session encryption.

deviceRequest

optional request to which this response is given; optional if no transaction data was sent in the request

documentTypeRepository

repository that contains all known transaction types; must be given if deviceRequest is given

atTime

the point in time for validating the whether returned documents are valid.

Throws

if validation fails.