Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception => extractData: Invalid DG 30 #11

Open
amusarra opened this issue Aug 10, 2021 · 11 comments
Open

Exception => extractData: Invalid DG 30 #11

amusarra opened this issue Aug 10, 2021 · 11 comments

Comments

@amusarra
Copy link
Member

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
Copy link
Member Author

amusarra commented Sep 9, 2021

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.

@danielabrozzoni
Copy link
Collaborator

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...

@amusarra
Copy link
Member Author

amusarra commented Sep 9, 2021

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?

@afilini
Copy link
Member

afilini commented Sep 10, 2021

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.

@amusarra
Copy link
Member Author

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

@Saifer707
Copy link

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

@amusarra
Copy link
Member Author

@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.

@Saifer707
Copy link

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

@Saifer707
Copy link

@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: #11 (comment), 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: #13

@amusarra
Copy link
Member Author

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

@Saifer707
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants