diff --git a/Sources/NFCPassportReader/PassportReader.swift b/Sources/NFCPassportReader/PassportReader.swift index 773f469..0335c18 100644 --- a/Sources/NFCPassportReader/PassportReader.swift +++ b/Sources/NFCPassportReader/PassportReader.swift @@ -34,6 +34,7 @@ public class PassportReader : NSObject { private var caHandler : ChipAuthenticationHandler? private var paceHandler : PACEHandler? private var mrzKey : String = "" + private var aaChallenge: [UInt8]? private var dataAmountToReadOverride : Int? = nil private var scanCompletedHandler: ((NFCPassportModel?, NFCPassportReaderError?)->())! @@ -63,10 +64,11 @@ public class PassportReader : NSObject { dataAmountToReadOverride = amount } - public func readPassport( mrzKey : String, tags : [DataGroupId] = [], skipSecureElements : Bool = true, skipCA : Bool = false, skipPACE : Bool = false, useExtendedMode : Bool = false, customDisplayMessage : ((NFCViewDisplayMessage) -> String?)? = nil) async throws -> NFCPassportModel { + public func readPassport( mrzKey : String, tags : [DataGroupId] = [], aaChallenge: [UInt8]? = nil, skipSecureElements : Bool = true, skipCA : Bool = false, skipPACE : Bool = false, useExtendedMode : Bool = false, customDisplayMessage : ((NFCViewDisplayMessage) -> String?)? = nil) async throws -> NFCPassportModel { self.passport = NFCPassportModel() self.mrzKey = mrzKey + self.aaChallenge = aaChallenge self.skipCA = skipCA self.skipPACE = skipPACE self.useExtendedMode = useExtendedMode @@ -267,7 +269,7 @@ extension PassportReader { Logger.passportReader.info( "Performing Active Authentication" ) - let challenge = generateRandomUInt8Array(8) + let challenge = aaChallenge ?? generateRandomUInt8Array(8) Logger.passportReader.debug( "Generated Active Authentication challange - \(binToHexRep(challenge))") let response = try await tagReader.doInternalAuthentication(challenge: challenge, useExtendedMode: useExtendedMode) self.passport.verifyActiveAuthentication( challenge:challenge, signature:response.data )