cie-nis-python-sdk icon indicating copy to clipboard operation
cie-nis-python-sdk copied to clipboard

Exception => extractData: Invalid DG 30

Open amusarra opened this issue 4 years ago • 11 comments

Ciao. Sto provando il vostro progetto, purtroppo ho riscontrato l'eccezione in oggetto di cui riporto lo stack trace. Sapreste darmi indicazioni in merito?

Il mio ambiente di esecuzione è il seguente:

  1. Sistema Operativo Fedora 34 (5.13.4-200.fc34.x86_64)
  2. Python 3.9.6
  3. pcsc-lite-devel-1.9.1-1.fc34.x86_64
  4. CIE Gemalto (BIT4ID miniLector AIR NFC v3)
Waiting for the CIE...
Connected!
Traceback (most recent call last):
  File "/uwfs03/progetti/developers-italia/sources/cie-nis-python-sdk/./main.py", line 46, in <module>
    main()
  File "/uwfs03/progetti/developers-italia/sources/cie-nis-python-sdk/./main.py", line 26, in main
    data = interface.extractData()
  File "/uwfs03/progetti/developers-italia/sources/cie-nis-python-sdk/pkg/lib/CIEInterface.py", line 418, in extractData
    raise Exception('extractData: Invalid DG 30')
Exception: extractData: Invalid DG 30

invalid_dg_30

Grazie.

amusarra avatar Aug 10 '21 10:08 amusarra

Ciao @danielabrozzoni , @astagi e @afilini riuscireste a dare un feedback su questo problema da me riscontrato? Immagino che il problema si di carattere generale. Grazie.

amusarra avatar Sep 09 '21 12:09 amusarra

Non guardo il progetto da anni ormai quindi non ho ben idea di cosa stia succedendo. Il problema risiede in queste due righe: https://github.com/italia/cie-nis-python-sdk/blob/master/pkg/lib/CIEInterface.py#L417-L418, un qualche controllo che i dati siano validi. Il mio ignorante consiglio è di commentare le due righe e vedere che succede...

danielabrozzoni avatar Sep 09 '21 13:09 danielabrozzoni

Grazie @danielabrozzoni Chiedo maggiori info a @afilini che dal blame vedo che il commit dell'eccezione è proprio il suo. Sapresti dirmi esattamente il significato dell'eccezione?

amusarra avatar Sep 09 '21 14:09 amusarra

Credo che in quel caso si stia facendo un check di versione: la sezione 4.6.1 di questo documento https://www.icao.int/publications/Documents/9303_p10_cons_en.pdf lo descrive.

A pagina 99 dello stesso documento vengono mostrati alcuni esempi di risposte in esadecimale, e le costanti che mostrano loro sono identiche a quelle controllate dal codice.

Quindi direi che il codice python controlla che la carta usi la versione LDS 1.7 e Unicode 4.0.0. Può essere che in alcune carte più recenti questo sia stato cambiato, e quindi quel controllo fallisce.

Se la versione LDS è corretta ma cambia solo quella Unicode forse puoi completamente saltare il check, immagino che Python possa gestire versioni Unicode recenti correttamente. Dovresti stampare i valori di risposta e vedere quale dei due non corrisponde.

afilini avatar Sep 10 '21 11:09 afilini

Ti ringrazio per la tua risposta di chiarimento. Farò delle attività di debug ed eventualmente vedrò di fare delle contribuzioni.

amusarra avatar Sep 10 '21 11:09 amusarra

@amusarra ciao, scusami, sei riuscito a trovare una soluzione? Anche io ho il tuo stesso problema, ma non so come risolvere

Saifer707 avatar Jul 18 '23 09:07 Saifer707

@amusarra ciao, scusami, sei riuscito a trovare una soluzione? Anche io ho il tuo stesso problema, ma non so come risolvere

Ciao @Saifer707 purtroppo no, mi sarei aspettato una risposta dai manutentori del progetto ma così non è stato e francamente non mi andava mi mettermi a fare RE sul codice, quindi ho lasciato perdere.

amusarra avatar Jul 18 '23 09:07 amusarra

Grazie mille per la risposta! Ti auguro una buona giornata!

Saifer707 avatar Jul 18 '23 09:07 Saifer707

@amusarra ciao di nuovo! Non so se sei ancora interessato, ma sono riuscito a trovare una soluzione, anzi 2. Cerco di spiegarle brevemente qui in modo che possano essere utili a te e a tutta la community.

Primo Metodo

Modificare il main.py commentando la riga data = interface.extractData() e aggiungendo la riga interface.extractAdditionalDetails(). In questo modo si hanno le informazioni base della CIE: card_id, full_name, vat_code, birth_date, birth_place, address. Si possono utilizzare anche gli altri metodi dell'interfaccia per ottenere la foto (interface.extractPhoto()) e l'MRZ (interface.extractMRZ()).

Secondo Metodo

Come si dice qui: https://github.com/italia/cie-nis-python-sdk/issues/11#issuecomment-916089129, il problema sta nella verifica che viene effettuata dal metodo interface.extractData(). Andando in modalità debug, ho visto che la variabile verifyChild0 mi veniva settata a false, mentre la variabile verifyChild1 era true: quindi il problema dipendeva dalla prima variabile. Ho così eliminato dall'if successivo il controllo sulla variabile verifyChild0 ed ho così ottenuto i dati della CIE senza alcun problema.

Molto probabilmente il primo metodo è più safe del secondo. Inoltre, la foto non viene estratta correttamente in formato jpeg, quindi rimando alla soluzione mostrata in un'altra issue: https://github.com/italia/cie-nis-python-sdk/issues/13

Saifer707 avatar Jul 18 '23 10:07 Saifer707

Ottima notiza @Saifer707 Non appena avrò la possibilità farò un test delle due soluzioni. Proverei a fare una pull request.

amusarra avatar Jul 18 '23 12:07 amusarra

Sì, sistemo un po' il codice e chiedo la Pull Request!

Saifer707 avatar Jul 18 '23 13:07 Saifer707