Buongiorno a tutti, spero non sia stato già aperta una discussione su questo argomento, nel qual caso chiedo scusa. Sto sviluppando un programma che ottenuta una stringa dalla lettura di un green pass deve decodificarla per poter comparare i dati con quelli letti dalla CIE o passaporto elettronico. Il programma è sviluppato su C (lavoro a basso livello) e non riesco a trovare il metodo corretto so che i passaggi sono Stringa (Che ottengo da un lettore) --> Base45(libreria che ho trovato su GitHub, testata e funzionante)-->Zlib(il codice decomprime ma ottengo un errore)-->COSE(non riesco a trovare nulla di concreto per C)--> Cbor(libreria trovata online ma non restituisce nulla di concreto). Per chiarire meglio la situazione posto il mio codice di lavoro, ovviamente il Green Pass è finto.
C:
int main(int argc, char **argv) {
unsigned char out[20000],u_out[20000],buf[20000];
size_t size_out;
char* in;
int err, i;
long int ucompSize_out;
long int compSize_out;
cbor_reader_t reader;
cbor_item_t item;
//stringa green pass
in="6BFOXN%TS3DHPVO13J /G-/2YRVA.Q/R8RNM2FC1J9M$DI9C3K9%SAR:PS$S:LC/GPWBILC9GGBYPLDXI25P-+R2YBV44PZB6H0CJ0%H0%P8. KOKGTM8$M8SNCXL9LM0C KPLIUM45FMCHGX2MUEE-JE6GQ2%KYZPQV6YP8412YPCGJ4HM84-2YNAG0B807+PE82D/K4EH05.4$M8WL6KN8LQE.UKK*R3T3+7A.N88J4R$F/MAITHP+PIJ6W*PP+PDPIGOK-*GN*Q:XJR-GM%O-RQV*Q6QS03L0QIRR97I2HOAZEKX:CIGF5JNCPIGSUXOQ0WBAMKK$F.UI%SUR+PLXEGAE%9OMPDNBH9JAZ%3KHJF0JEYI1DLNCKUCI5OI9YI:8DG:D%PDB2MLTC-NS K87NTFBNM/VGMNL%1Z8F 2D7DQHH3-31U98NQI7UQCLV64LO6B+U98-47KC2UU*9KEQ1A7OE3O7BPN47H.STS2JE5%CQC/AO1S112+B3XUE";
size_out=sizeof(out);
printf("GP:(\"%s\") ", (char*)in);
printf("\n%d",err);
//codifica in base45
err=base45_decode(out,&size_out,in,strlen(in));
printf("\nbase45(\"%s\") ", (char*)out);
printf("\n%d",err);
//decompressione zlib
ucompSize_out= strlen(out)+1;
compSize_out= compressBound(ucompSize_out);
err=uncompress ((Byte *)u_out, &ucompSize_out, (const Byte *) out, compSize_out );
printf("\nzlib(\"%s\") ", (char*)u_out);
printf("\n%d",err);
//cbor
cbor_reader_init(&reader,&u_out,sizeof(u_out));
item.type=CBOR_ITEM_STRING;
item.size=sizeof(u_out);
err=cbor_decode(&reader, &item, (char*)buf, sizeof(buf));
printf("\ncbor(\"%s\") ", (char*)buf);
printf("%d",err);
};