Code Monkey home page Code Monkey logo

Comments (14)

M0Rf30 avatar M0Rf30 commented on May 27, 2024

Ciao @amusarra ciò è dovuto al fatto che ho isolato la libreria in un archivio tra le release. Non è buona pratica caricare blob in repo sorgente

Prima di meson procedi da root del repo con

curl -sL "https://github.com/M0Rf30/cie-middleware-linux/releases/download/podofo-1.4.2/libpodofo-1.4.2.tar.gz" -o libpodofo.tar.gz
tar xf libpodofo.tar.gz --directory=libs/lib

dovrebbe partire senza problemi. purtroppo, per via di questa libreria fornita senza sorgenti, non è possibile parlare neanche di progetto open.

La compilazione con libpodofo vanilla non è possibile come riportato anche qui italia/cie-middleware#87

in quanto mancano dei simboli. penso che tu debba trovare un escamotage su arm

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

Ciao @M0Rf30, grazie si avevo infatti ipotizzato. Adesso sto facendo la build di cryptopp. Mi chiedo una cosa. Se cryptopp è una dipendenza obbligatoria, come mai meson termina correttamente? Forse perché di Runtime?

image

Non capisco inoltre perché mi dia XML2 mancante anche se in realtà è installato sul sistema.

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

se noti c'è una doppia dichiarazione:
una come libcrypto++ (risolta)
l'altra è libcryptopp.

Purtroppo la risoluzione del nome libreria non è sempre la stessa tra distro. in questo caso si è presentata questa evenienza, in particolar modo tra Arch Linux e Debian-based. spulciando in giro questo è buon modo per risolvere.

stesso ragionamento per xml2. infatti non dovrebbe fallire la build. hai libxml-2.0 e xml2 (non risolta)

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

In realtà libxml-2.0 è risolta come puoi vedere dall'immagine precedente, quella non risolta, "stranamente" è xml2.
Ti faccio sapere non appena finirò di compilare libcryptopp.

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

non è strano. dipende dal pkgconfig della libreria e da come è dichiarato il nome di essa sulla tua distro, a volte ci sono leggere differenze di nomenclatura. forse il mio approccio può essere migliorato nel meson file (anzi, sicuramente), ma non ho approfondito.

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

Ciao @amusarra ciò è dovuto al fatto che ho isolato la libreria in un archivio tra le release. Non è buona pratica caricare blob in repo sorgente

Prima di meson procedi da root del repo con

curl -sL "https://github.com/M0Rf30/cie-middleware-linux/releases/download/podofo-1.4.2/libpodofo-1.4.2.tar.gz" -o libpodofo.tar.gz
tar xf libpodofo.tar.gz --directory=libs/lib

dovrebbe partire senza problemi. purtroppo, per via di questa libreria fornita senza sorgenti, non è possibile parlare neanche di progetto open.

La compilazione con libpodofo vanilla non è possibile come riportato anche qui italia/cie-middleware#87

in quanto mancano dei simboli. penso che tu debba trovare un escamotage su arm

Su ARM infatti ottengo l'errore /usr/bin/ld: /home/amusarra/progetti/sources/cie-middleware-linux/libs/lib/libpodofo.a: error adding symbols: file in wrong format in quando libpodofo.a è per x86. Anche compilando dai sorgenti su ARM non funzionerebbe a causa di quanto riportato sulla issue da te indicata.

A questo punto la vedo dura, dovrei compilare podofo con la patch fatta da loro. Comunque è assurdo com'è stato realizzato il progetto. Volevo fare una cosa carina ma mi stanno facendo passare la voglia.

Grazie in ogni caso per il tuo supporto.

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

puoi provare a dare un occhio nel diff tra tag 1.4.2 e 1.4.1 se non ti occorre la firma e disabilitare le chiamate a podofo.
oppure fare qualche prova con qemu-static e binfmt. in ogni caso trovi il changelog, come vedi le novità non sono molto significative

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

ho provato a fare un po di reversing e ho ottenuto una draft di quello che fa SetGraphometricData

andrebbe posizionato nel file sorgente di podofo ./src/podofo/doc/PdfSignatureField.cpp

 // this is a call example within libs/sign-sdk/src/PdfSignatureGenerator.cpp  
 // SetGraphometricData(PdfString("Aruba_Sign_Biometric_Data"), PdfString(szGraphometricData), PdfString(szVersion));
    void PdfSignatureField::SetGraphometricData(const PdfString &rsGraphometricDataName,
                                                const PdfString &rsGraphometricData,
                                                const PdfString &rsVersion)
    {
        PdfError *this;
        long in_FS_OFFSET;
        undefined4 local_a8[34];
        undefined8 local_20;

        local_20 = *(undefined8 *)(in_FS_OFFSET + 0x28);
        if (*(long *)(param_1 + 0x20) == 0)
        {
            this = (PdfError *)__cxa_allocate_exception(0x60);
            local_a8[0] = 2;
            /* WARNING: Subroutine does not return */
            /* try { // try from 00102ed7 to 00102edb has its CatchHandler @ 00103122 */
            PoDoFo::PdfError::PdfError(this, (EPdfError *)local_a8,
                                       "/home/piero/Desktop/IPZS/podofo-0.9.1/src/doc/PdfSignatureField.cpp", 0x145,
                                       (char *)0x0);
        }
        /* WARNING: Subroutine does not return */
        PdfVariant::GetDictionary(*(PdfVariant **)(param_1 + 0x20));
    }

se è solo per la firma grafica puoi commentare libs/sign-sdk/src/PdfSignatureGenerator.cpp:188 e usare podofo vanilla

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

Ho ricompilato la versione 0.9.1 di podofo su ARM e commentato su PdfSignatureGenerator le parti per cui non trova i simboli, per i miei scopi non mi serve.

Ho modificato il file meson di build è aggiunta la riga add_global_link_arguments('-ljpeg', language: 'cpp') per evitare i vari errori undefined reference to jpeg_*`. Fatto questo la build è andata a buon fine.

image

Adesso non resta altro che provare se libcie-pkcs11.so funzioni correttamente.

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

Sarei curioso di sapere se funziona questa 1.4.2. tienimi aggiornato se possibile. per libjpeg molto strano. indagherò

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

Allora, ho provato a usare il programma TestCIE, che fa una serie di test suite (che funziona correttamente su x86), compilato in questo modo g++ -o TestCIE TestCIE.cpp UUCByteArray.cpp -ldl -g . Una volta lanciato ed eseguito il primo test, va in Segmentation Fault 😮‍💨 Con il debugger ho questo stacktrace. Al momento mi fermo, sono stanco, sto faticando un botto e nottate per una cosa che immaginavo fosse semplice, come dovrebbe essere. Se a te può venir in mente qualcosa, ben venga.

Load Module libcie-pkcs11.so
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x0000007ff734dde8 in CryptoPP::CPU_ProbePMULL() () from /lib/aarch64-linux-gnu/libcrypto++.so.8
(gdb) bt
#0  0x0000007ff734dde8 in CryptoPP::CPU_ProbePMULL() () from /lib/aarch64-linux-gnu/libcrypto++.so.8
#1  0x0000007ff7261848 in CryptoPP::DetectArmFeatures() () from /lib/aarch64-linux-gnu/libcrypto++.so.8
#2  0x0000007ff7fdac9c in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7ffffff3f8, env=env@entry=0x7ffffff408) at dl-init.c:72
#3  0x0000007ff7fdada4 in call_init (env=0x7ffffff408, argv=0x7ffffff3f8, argc=1, l=<optimized out>) at dl-init.c:30
#4  _dl_init (main_map=0x555557f5e0, argc=1, argv=0x7ffffff3f8, env=0x7ffffff408) at dl-init.c:119
#5  0x0000007ff7d55b14 in __GI__dl_catch_exception (exception=0x0, operate=0x7ff7fde130 <call_dl_init>, args=0x7fffffe510) at dl-error-skeleton.c:182
#6  0x0000007ff7fded28 in dl_open_worker (a=a@entry=0x7fffffe760) at dl-open.c:758
#7  0x0000007ff7d55ab4 in __GI__dl_catch_exception (exception=0x7fffffe748, operate=0x7ff7fde9b0 <dl_open_worker>, args=0x7fffffe760) at dl-error-skeleton.c:208
#8  0x0000007ff7fde610 in _dl_open (file=0x5555559900 "libcie-pkcs11.so", mode=-2147483647, caller_dlopen=0x5555554460 <main(int, char**)+608>, nsid=-2, argc=1, argv=0x7ffffff3f8, env=0x7ffffff408) at dl-open.c:837
#9  0x0000007ff7fb9264 in dlopen_doit (a=a@entry=0x7fffffea18) at dlopen.c:66
#10 0x0000007ff7d55ab4 in __GI__dl_catch_exception (exception=exception@entry=0x7fffffe9a0, operate=0x7ff7fb9200 <dlopen_doit>, args=0x7fffffea18) at dl-error-skeleton.c:208
#11 0x0000007ff7d55b80 in __GI__dl_catch_error (objname=0x7ff7fcb0c8 <last_result+16>, errstring=0x7ff7fcb0d0 <last_result+24>, mallocedp=0x7ff7fcb0c0 <last_result+8>, operate=<optimized out>, args=<optimized out>)
    at dl-error-skeleton.c:227
#12 0x0000007ff7fb9b10 in _dlerror_run (operate=operate@entry=0x7ff7fb9200 <dlopen_doit>, args=args@entry=0x7fffffea18) at dlerror.c:170
#13 0x0000007ff7fb9304 in __dlopen (file=<optimized out>, mode=<optimized out>) at dlopen.c:87
#14 0x0000005555554460 in main (argc=1, argv=0x7ffffff3f8) at TestCIE.cpp:794
(gdb)

image

from cie-middleware-linux.

M0Rf30 avatar M0Rf30 commented on May 27, 2024

Si immagino, ho espresso anche upstream la mia frustrazione. Vedrò cosa posso fare per sistemare le cose.
Nel frattempo ho caricato un branch qui https://github.com/M0Rf30/cie-middleware-linux/tree/podofo-vanilla
sostanzialmente uso le lib e gli header vanilla e evito la parte di "decorazione grafica" del documento. Se ti va di farci un giro.... Onestamente non farei affidamento sui test, ma farei una prova pratica. con firefox o chrome (modutil)

from cie-middleware-linux.

amusarra avatar amusarra commented on May 27, 2024

Appena posso vedrò il branch, grazie. In realtà il TestCIE è pratico, uno dei test è appunto il login sulla CIE via PIN code. Per il mio caso d'uso non mi serve il funzionamento con il browser (sul raspberry infatti non il desktop proprio installato). Il mio obiettivo è far funzionare il tutto per poi realizzare un sistema di accesso basato su CIE, così come ho fatto per la CNS e l'ultimo su questo articolo Raspberry Pi e Smart Card Mifare Classic 1K: Realizzare un sistema di accesso. Nel caso della CIE come anche già fatto per la CNS, utilizzerei un keypad connesso al Raspberry per inserire il PIN nel caso fosse corretto, verifico la validità del certificato e solo dopo "aprire la porta".

from cie-middleware-linux.

rnhmjoj avatar rnhmjoj commented on May 27, 2024

Onestamente non farei affidamento sui test, ma farei una prova pratica. con firefox o chrome (modutil)

Allora, ho appena finito di scrivere un bel pacchetto Nix che fa una build riproducibile di cie-middleware-linux usando il branch con podofo originale.
Ho provato le seguenti cose:

  1. abbinare la carta;
  2. firmare e verificare la firma (sia CAdES sia PAdES);
  3. aggiungere il modulo PKCS#11 al database NSS e fare un login;
  4. rimuovere la carta.

Sembra funzionare tutto correttamente tranne la firma PAdES. Se spunto "aggiungi la firma grafica" la firma fallisce con questo errore (che sembra essere un'incompatibilità tra ghost4j e jna):

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid calling convention 63
	at com.sun.jna.Native.createNativeCallback(Native Method)
	at com.sun.jna.CallbackReference.<init>(CallbackReference.java:320)
	at com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:506)
	at com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:483)
	at com.sun.jna.Function.convertArgument(Function.java:558)
	at com.sun.jna.Function.invoke(Function.java:345)
	at com.sun.jna.Library$Handler.invoke(Library.java:265)
	at jdk.proxy2/jdk.proxy2.$Proxy3.gsapi_set_stdio(Unknown Source)
	at org.ghost4j.Ghostscript.initialize(Ghostscript.java:323)
	at org.ghost4j.renderer.SimpleRenderer.run(SimpleRenderer.java:105)
	at org.ghost4j.renderer.AbstractRemoteRenderer.render(AbstractRemoteRenderer.java:86)
	at org.ghost4j.renderer.AbstractRemoteRenderer.render(AbstractRemoteRenderer.java:70)
	at it.ipzs.cieid.Firma.PdfPreview.<init>(PdfPreview.java:53)
	at it.ipzs.cieid.MainFrame$42.actionPerformed(MainFrame.java:2033)

Senza mettera la spunta il programma invece crasha

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fbe441740b0, pid=2393655, tid=2393968
#
# JRE version: OpenJDK Runtime Environment (17.0.4+8) (build 17.0.4+8-nixos)
# Java VM: OpenJDK 64-Bit Server VM (17.0.4+8-nixos, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# C  [libpodofo.so.0.9.8+0x14e0b0]  PoDoFo::PdfPagesTree::GetTotalNumberOfPages() const+0x0
#

Un'altra cosa è che ho dovuto patchare un sacco di headers in modo da includere PCSC/wintypes.h prima degli altri header di PCSC. Non so per quale motivo ma altrimenti varie typedef che sono usate nell'API non vengono trovati.

Comunque, ottimo lavoro, grazie.

from cie-middleware-linux.

Related Issues (6)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.