Skip to content

Commit b19a866

Browse files
author
Jenkins
committed
9.4.1148
1 parent 5327cd2 commit b19a866

27 files changed

Lines changed: 448 additions & 139 deletions

.dart_tool/package_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@
147147
},
148148
{
149149
"name": "vm_service",
150-
"rootUri": "file:///Users/administratorregula/.pub-cache/hosted/pub.dev/vm_service-15.1.0",
150+
"rootUri": "file:///Users/administratorregula/.pub-cache/hosted/pub.dev/vm_service-15.2.0",
151151
"packageUri": "lib/",
152152
"languageVersion": "3.5"
153153
},

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ android {
2828
}
2929

3030
dependencies {
31-
implementation('com.regula.documentreader:api:9.3.12771') {
31+
implementation('com.regula.documentreader:api:9.4.12820') {
3232
transitive = true
3333
}
3434

android/src/main/kotlin/com/regula/plugin/documentreader/FlutterDocumentReaderApiPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class FlutterDocumentReaderApiPlugin : FlutterPlugin, MethodCallHandler, Activit
8787
paCertificateCompletionEvent,
8888
taCertificateCompletionEvent,
8989
taSignatureCompletionEvent,
90+
paceProtocolCompletionEvent,
91+
caProtocolCompletionEvent,
9092
videoEncoderCompletionEvent,
9193
onCustomButtonTappedEvent
9294
)) setupEventChannel(event)

android/src/main/kotlin/com/regula/plugin/documentreader/JSONConstructor.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ import com.regula.documentreader.api.params.mdl.DeviceRetrievalMethod
4747
import com.regula.documentreader.api.params.mdl.DocumentRequest18013MDL
4848
import com.regula.documentreader.api.params.mdl.DocumentRequestMDL
4949
import com.regula.documentreader.api.params.mdl.NameSpaceMDL
50+
import com.regula.documentreader.api.params.rfid.CaProtocol
5051
import com.regula.documentreader.api.params.rfid.PKDCertificate
52+
import com.regula.documentreader.api.params.rfid.PaceProtocol
5153
import com.regula.documentreader.api.params.rfid.RFIDParams
5254
import com.regula.documentreader.api.params.rfid.TccParams
5355
import com.regula.documentreader.api.params.rfid.authorization.PAAttribute
@@ -2138,3 +2140,37 @@ fun generateFinalizeConfig(input: FinalizeConfig?) = input?.let {
21382140
"mdlSession" to it.getPrivateProperty("mdlSession"),
21392141
).toJson()
21402142
}
2143+
2144+
fun paceProtocolFromJSON(input: JSONObject?) = input?.let {
2145+
PaceProtocol(
2146+
it.getString("version"),
2147+
it.getString("stdDomainParams"),
2148+
it.getString("keyAlgorithm"),
2149+
)
2150+
}
2151+
2152+
fun generatePaceProtocol(input: PaceProtocol?) = input?.let {
2153+
mapOf(
2154+
"version" to it.version,
2155+
"stdDomainParams" to it.stdDomainParams,
2156+
"keyAlgorithm" to it.keyAlgorithm,
2157+
).toJson()
2158+
}
2159+
2160+
fun caProtocolFromJSON(input: JSONObject?) = input?.let {
2161+
CaProtocol(
2162+
it.getString("version"),
2163+
it.getString("scheme"),
2164+
it.getString("keyAlgorithm"),
2165+
it.getBoolean("chipIndividual"),
2166+
)
2167+
}
2168+
2169+
fun generateCaProtocol(input: CaProtocol?) = input?.let {
2170+
mapOf(
2171+
"version" to it.version,
2172+
"scheme" to it.scheme,
2173+
"keyAlgorithm" to it.keyAlgorithm,
2174+
"chipIndividual" to it.isChipIndividual,
2175+
).toJson()
2176+
}

android/src/main/kotlin/com/regula/plugin/documentreader/Main.kt

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import com.regula.documentreader.api.completions.IDocumentReaderInitCompletion
1919
import com.regula.documentreader.api.completions.IDocumentReaderPrepareDbCompletion
2020
import com.regula.documentreader.api.completions.IVideoEncoderCompletion
2121
import com.regula.documentreader.api.completions.model.PrepareProgress
22+
import com.regula.documentreader.api.completions.rfid.ICaProtocolCompletion
23+
import com.regula.documentreader.api.completions.rfid.IPaceProtocolCompletion
2224
import com.regula.documentreader.api.completions.rfid.IRfidPKDCertificateCompletion
2325
import com.regula.documentreader.api.completions.rfid.IRfidReaderCompletion
2426
import com.regula.documentreader.api.completions.rfid.IRfidReaderRequest
2527
import com.regula.documentreader.api.completions.rfid.IRfidTASignatureCompletion
26-
import com.regula.documentreader.api.completions.rfid.certificates.IRfidPACertificates
27-
import com.regula.documentreader.api.completions.rfid.certificates.IRfidTACertificates
28-
import com.regula.documentreader.api.completions.rfid.certificates.IRfidTASignature
28+
import com.regula.documentreader.api.completions.rfid.certificates.IRfidAccessControl
2929
import com.regula.documentreader.api.enums.DocReaderAction
3030
import com.regula.documentreader.api.enums.LCID
3131
import com.regula.documentreader.api.enums.eImageQualityCheckType
@@ -39,6 +39,8 @@ import com.regula.documentreader.api.errors.DocReaderRfidException
3939
import com.regula.documentreader.api.errors.DocumentReaderException
4040
import com.regula.documentreader.api.internal.core.CoreScenarioUtil
4141
import com.regula.documentreader.api.params.mdl.DataRetrieval
42+
import com.regula.documentreader.api.params.rfid.CaProtocol
43+
import com.regula.documentreader.api.params.rfid.PaceProtocol
4244
import com.regula.documentreader.api.results.DocumentReaderNotification
4345
import com.regula.documentreader.api.results.DocumentReaderResults
4446
import com.regula.documentreader.api.results.DocumentReaderResults.fromRawResults
@@ -84,12 +86,14 @@ fun methodCall(method: String, callback: (Any?) -> Unit): Any = when (method) {
8486
"recognize" -> recognize(args(0))
8587
"startNewPage" -> startNewPage()
8688
"stopScanner" -> stopScanner()
87-
"startRFIDReader" -> startRFIDReader(args(0), args(1), args(2))
88-
"readRFID" -> readRFID(args(0), args(1), args(2))
89+
"startRFIDReader" -> startRFIDReader(argsNullable(0))
90+
"readRFID" -> readRFID(argsNullable(0))
8991
"stopRFIDReader" -> stopRFIDReader()
9092
"providePACertificates" -> providePACertificates(argsNullable(0))
9193
"provideTACertificates" -> provideTACertificates(argsNullable(0))
9294
"provideTASignature" -> provideTASignature(args(0))
95+
"selectPACEProtocol" -> selectPACEProtocol(args(0))
96+
"selectCAProtocol" -> selectCAProtocol(args(0))
9397
"setTCCParams" -> setTCCParams(callback, args(0))
9498
"addPKDCertificates" -> addPKDCertificates(args(0))
9599
"clearPKDCertificates" -> clearPKDCertificates()
@@ -150,6 +154,8 @@ const val rfidOnRetryReadChipEvent = "rfidOnRetryReadChipEvent"
150154
const val paCertificateCompletionEvent = "pa_certificate_completion"
151155
const val taCertificateCompletionEvent = "ta_certificate_completion"
152156
const val taSignatureCompletionEvent = "ta_signature_completion"
157+
const val paceProtocolCompletionEvent = "paceProtocolCompletionEvent"
158+
const val caProtocolCompletionEvent = "caProtocolCompletionEvent"
153159

154160
const val videoEncoderCompletionEvent = "video_encoder_completion"
155161
const val onCustomButtonTappedEvent = "onCustomButtonTappedEvent"
@@ -248,22 +254,13 @@ fun startNewPage() = Instance().startNewPage()
248254

249255
fun stopScanner() = Instance().stopScanner(context)
250256

251-
fun startRFIDReader(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
257+
fun startRFIDReader(config: JSONObject?) {
252258
stopBackgroundRFID()
253-
requestType = RfidReaderRequestType(
254-
onRequestPACertificates,
255-
onRequestTACertificates,
256-
onRequestTASignature
257-
)
258-
Instance().startRFIDReader(activity, rfidReaderCompletion, requestType.getRfidReaderRequest())
259+
Instance().startRFIDReader(activity, rfidReaderCompletion, getRfidReaderRequest(config))
259260
}
260261

261-
fun readRFID(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
262-
requestType = RfidReaderRequestType(
263-
onRequestPACertificates,
264-
onRequestTACertificates,
265-
onRequestTASignature
266-
)
262+
fun readRFID(config: JSONObject?) {
263+
rfidReaderRequest = getRfidReaderRequest(config)
267264
startForegroundDispatch("readRFID")
268265
}
269266

@@ -284,6 +281,14 @@ fun provideTASignature(signature: String?) = taSignatureCompletion.onSignatureRe
284281
signature.toByteArray()
285282
)
286283

284+
fun selectPACEProtocol(protocol: JSONObject) = paceProtocolCompletion.onPaceProtocolSelected(
285+
paceProtocolFromJSON(protocol)!!
286+
)
287+
288+
fun selectCAProtocol(protocol: JSONObject) = caProtocolCompletion.onCaProtocolSelected(
289+
caProtocolFromJSON(protocol)!!
290+
)
291+
287292
fun setTCCParams(callback: Callback, params: JSONObject) {
288293
Instance().setTccParams(tccParamsFromJSON(params)) { success, error ->
289294
callback(generateSuccessCompletion(success, error))
@@ -545,49 +550,47 @@ fun initCompletion(callback: Callback) = IDocumentReaderInitCompletion { success
545550
lateinit var paCertificateCompletion: IRfidPKDCertificateCompletion
546551
lateinit var taCertificateCompletion: IRfidPKDCertificateCompletion
547552
lateinit var taSignatureCompletion: IRfidTASignatureCompletion
553+
lateinit var paceProtocolCompletion: IPaceProtocolCompletion
554+
lateinit var caProtocolCompletion: ICaProtocolCompletion
555+
556+
var rfidReaderRequest = getRfidReaderRequest()
557+
558+
fun getRfidReaderRequest(config: JSONObject? = null): IRfidReaderRequest {
559+
val result = IRfidReaderRequest()
560+
if (config == null) return result
548561

549-
class RfidReaderRequestType(
550-
val doPACertificates: Boolean,
551-
val doTACertificates: Boolean,
552-
val doTASignature: Boolean
553-
) {
554-
private val onRequestPACertificates = IRfidPACertificates { serialNumber, issuer, completion ->
562+
if (config.getBoolean("paCertificates")) result.setPACertificates { serialNumber, issuer, completion ->
555563
paCertificateCompletion = completion
556564
sendEvent(paCertificateCompletionEvent, generatePACertificateCompletion(serialNumber, issuer))
557565
}
558-
private val onRequestTACertificates = IRfidTACertificates { keyCAR, completion ->
566+
if (config.getBoolean("taCertificates")) result.setTACertificates { keyCAR, completion ->
559567
taCertificateCompletion = completion
560568
sendEvent(taCertificateCompletionEvent, keyCAR)
561569
}
562-
private val onRequestTASignature = IRfidTASignature { challenge, completion ->
570+
if (config.getBoolean("taSignature")) result.setTASignature { challenge, completion ->
563571
taSignatureCompletion = completion
564572
sendEvent(taSignatureCompletionEvent, generateTAChallenge(challenge))
565573
}
574+
if (config.getBoolean("paceProtocol") || config.getBoolean("caProtocol")) result.setRfidAccessControl(object : IRfidAccessControl {
575+
override fun onRequestPaceProtocol(list: List<PaceProtocol?>, completion: IPaceProtocolCompletion) {
576+
paceProtocolCompletion = completion
577+
sendEvent(paceProtocolCompletionEvent, list.toJson(::generatePaceProtocol))
578+
}
579+
override fun onRequestCaProtocol(list: List<CaProtocol?>, completion: ICaProtocolCompletion) {
580+
caProtocolCompletion = completion
581+
sendEvent(caProtocolCompletionEvent, list.toJson(::generateCaProtocol))
582+
}
583+
})
566584

567-
fun getRfidReaderRequest(): IRfidReaderRequest? = when {
568-
!doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTASignature)
569-
!doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestTACertificates)
570-
!doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTACertificates, onRequestTASignature)
571-
doPACertificates && !doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates)
572-
doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTASignature)
573-
doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates)
574-
doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates, onRequestTASignature)
575-
else -> null
576-
}
585+
return result
577586
}
578587

579-
var requestType = RfidReaderRequestType(
580-
doPACertificates = false,
581-
doTACertificates = false,
582-
doTASignature = false
583-
)
584-
585588
@Suppress("DEPRECATION", "MissingPermission")
586589
fun newIntent(intent: Intent): Boolean {
587590
if (intent.action != NfcAdapter.ACTION_TECH_DISCOVERED) return false
588591
val isoDep = IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG))
589592
when (nfcFunction) {
590-
"readRFID" -> Instance().readRFID(isoDep, rfidReaderCompletion, requestType.getRfidReaderRequest())
593+
"readRFID" -> Instance().readRFID(isoDep, rfidReaderCompletion, rfidReaderRequest)
591594
"engageDeviceNFC" -> Instance().engageDeviceNFC(isoDep) { v1, v2 -> engageDeviceNFCCallback(generateDeviceEngagementCompletion(v1, v2)) }
592595
"retrieveDataNFC" -> Instance().retrieveDataNFC(isoDep, retrieveDataNFCProp) { v1, v2, v3 -> retrieveDataNFCCallback(generateCompletion(v1, v2, v3)) }
593596
}

android/src/test/kotlin/com/regula/plugin/documentreader/FlutterDocumentReaderApiPlugin.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,12 @@ class FlutterDocumentReaderApiPluginTest {
328328
@Test
329329
fun tccParams() = compare("tccParams", ::tccParamsFromJSON, ::generateTccParams)
330330

331+
@Test
332+
fun paceProtocol() = compare("paceProtocol", ::paceProtocolFromJSON, ::generatePaceProtocol)
333+
334+
@Test
335+
fun caProtocol() = compare("caProtocol", ::caProtocolFromJSON, ::generateCaProtocol)
336+
331337
// mdl
332338

333339
@Test

example/ios/Tests/Tests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,14 @@ class Tests: XCTestCase {
430430
compare(name: "tccParams", fromJson: RGLWJSONConstructor.tccParams, generate: RGLWJSONConstructor.generate)
431431
}
432432

433+
func test_paceProtocol() {
434+
compare(name: "paceProtocol", fromJson: RGLWJSONConstructor.paceProtocol, generate: RGLWJSONConstructor.generatePaceProtocol)
435+
}
436+
437+
func test_caProtocol() {
438+
compare(name: "caProtocol", fromJson: RGLWJSONConstructor.caProtocol, generate: RGLWJSONConstructor.generateCaProtocol)
439+
}
440+
433441
// mdl
434442

435443
func test_deviceRetrievalMethod() {

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies:
1414
sdk: flutter
1515
flutter_document_reader_api:
1616
path: ../
17-
flutter_document_reader_core_fullauthrfid: 9.3.1980
17+
flutter_document_reader_core_fullauthrfid: 9.4.2203
1818
flutter_document_reader_btdevice: 9.1.42
1919
cupertino_icons: ^1.0.8
2020

ios/Classes/FlutterDocumentReaderApiPlugin.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ static NSMutableDictionary<NSString*, FlutterEventSink>* _Nonnull eventSinks;
2222
@end
2323
@interface RGLWTASignatureCompletionStreamHandler : NSObject <FlutterStreamHandler>
2424
@end
25+
@interface RGLWPACEProtocolCompletionStreamHandler : NSObject <FlutterStreamHandler>
26+
@end
27+
@interface RGLWCAProtocolCompletionStreamHandler : NSObject <FlutterStreamHandler>
28+
@end
2529
@interface RGLWVideoEncoderCompletionStreamHandler : NSObject <FlutterStreamHandler>
2630
@end
2731
@interface RGLWOnCustomButtonTappedStreamHandler : NSObject <FlutterStreamHandler>

ios/Classes/FlutterDocumentReaderApiPlugin.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
2626
setupEventChannel(registrar, paCertificateCompletionEvent, [RGLWPACertificateCompletionStreamHandler new]);
2727
setupEventChannel(registrar, taCertificateCompletionEvent, [RGLWTACertificateCompletionStreamHandler new]);
2828
setupEventChannel(registrar, taSignatureCompletionEvent, [RGLWTASignatureCompletionStreamHandler new]);
29+
setupEventChannel(registrar, paceProtocolCompletionEvent, [RGLWPACEProtocolCompletionStreamHandler new]);
30+
setupEventChannel(registrar, caProtocolCompletionEvent, [RGLWCAProtocolCompletionStreamHandler new]);
2931
setupEventChannel(registrar, drVideoEncoderCompletionEvent, [RGLWVideoEncoderCompletionStreamHandler new]);
3032
setupEventChannel(registrar, drOnCustomButtonTappedEvent, [RGLWOnCustomButtonTappedStreamHandler new]);
3133

@@ -146,6 +148,30 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
146148
}
147149
@end
148150

151+
@implementation RGLWPACEProtocolCompletionStreamHandler
152+
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
153+
eventSinks[paceProtocolCompletionEvent] = eventSink;
154+
return nil;
155+
}
156+
157+
- (FlutterError*)onCancelWithArguments:(id)arguments {
158+
eventSinks[paceProtocolCompletionEvent] = nil;
159+
return nil;
160+
}
161+
@end
162+
163+
@implementation RGLWCAProtocolCompletionStreamHandler
164+
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
165+
eventSinks[caProtocolCompletionEvent] = eventSink;
166+
return nil;
167+
}
168+
169+
- (FlutterError*)onCancelWithArguments:(id)arguments {
170+
eventSinks[caProtocolCompletionEvent] = nil;
171+
return nil;
172+
}
173+
@end
174+
149175
@implementation RGLWVideoEncoderCompletionStreamHandler
150176
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
151177
eventSinks[drVideoEncoderCompletionEvent] = eventSink;

0 commit comments

Comments
 (0)