Italian Chiacchiericci

Star-Dust

Expert
Licensed User
Longtime User
Si ma intanto hanno distribuito i sorgenti ufficiali nel repository del Ministero della salute.

Magari lo avranno fatto per completare la collezione di @Xfood. Ma non sembra molto sensato
 

Sagenut

Expert
Licensed User
Longtime User
E' per sfottere:
"GNE GNE GNE! Non la abbiamo fatta fare a Voi!!! E se non avete Android 8 siete dei poracci e quindi non vi meritate nemmeno di convalidare il Green Pass!!"
 

Sagenut

Expert
Licensed User
Longtime User
E' la degna compagna di Immuni.
 

Star-Dust

Expert
Licensed User
Longtime User
Il mio falegnane lavrebve fatta meglio. Avrebbe fatto pure le dita
 

Star-Dust

Expert
Licensed User
Longtime User
io farei la versione iOs .... Santi Licheri permettendo
 

Star-Dust

Expert
Licensed User
Longtime User
Il ministero ho anche rilasciato la versione per ios con i sorgenti. Sarebbe bello poterlo integrare nelle proprie app la funzioncina di decodifica.
Sorgenti, sorgenti, sorgenti
 

PCastagnetti

Member
Licensed User
Longtime User
Si ma intanto hanno distribuito i sorgenti ufficiali nel repository del Ministero della salute.

Magari lo avranno fatto per completare la collezione di @Xfood. Ma non sembra molto sensato

Hanno fatto poca fatica: è esattamente quella europea con il cambiato nome, icona e link per scaricare le chiavi pubbliche e le businessrule e dicono di aver rimosso alcune info visualizzate per assecondare il Garante.
E' opensource in modo che il Garante della Privacy abbia potuto verificare e dare il benestare.
Gli europei l'hanno "fatta" in Kotlin e quindi anche per iOS

Anche il server di chiavi pubbliche e businessrule è opensource e lo ha fatto l'Europa e ogni Stato l'ha solo dovuto installare. Il server serve per distribuire (una volta al giorno) alla app (che quindi funzionerà poi offline) le chiavi pubbliche aggiornate e le regole per validare (in locale) i dati decodificati. Le regole applicano quanto scritto nel Allegato B al DPCM 17/06/2021

1627394501207.png


Sembra invece che siano stati più bravi gli Svizzeri perché la loro app "Covid Certificate Check" funziona già da Android 6
 

Star-Dust

Expert
Licensed User
Longtime User
Hanno fatto poca fatica: è esattamente quella europea con il cambiato nome, icona e link per scaricare le chiavi pubbliche e le businessrule e dicono di aver rimosso alcune info visualizzate per assecondare il Garante.
E' opensource in modo che il Garante della Privacy abbia potuto verificare e dare il benestare.
Gli europei l'hanno "fatta" in Kotlin e quindi anche per iOS

Anche il server di chiavi pubbliche e businessrule è opensource e lo ha fatto l'Europa e ogni Stato l'ha solo dovuto installare. Il server serve per distribuire (una volta al giorno) alla app (che quindi funzionerà poi offline) le chiavi pubbliche aggiornate e le regole per validare (in locale) i dati decodificati. Le regole applicano quanto scritto nel Allegato B al DPCM 17/06/2021

View attachment 117079

Sembra invece che siano stati più bravi gli Svizzeri perché la loro app "Covid Certificate Check" funziona già da Android 6
Quindi se prendiamo quella europea (non quella italiana) e la modifichiamo potremmo farlo... ci dichiariamo uno stato a se con una nostra App
 

PCastagnetti

Member
Licensed User
Longtime User
Sorgenti, sorgenti, sorgenti

sorgenti italiani

sorgenti europei

ma anche questi
che derivano dagli svedesi
 

Star-Dust

Expert
Licensed User
Longtime User
Immagino il garante che ha guardato il sorgente per verificare che rispettino la privacy....
 

PCastagnetti

Member
Licensed User
Longtime User
Ho fatto la prima parte del lavoro (quella facile!) ma andrebbe completato con decodifica CBOR, verifica della firma tramite le chiavi pubbliche, ottenimento del JSON in chiaro per verificare se in corso di validità applicando le regole sopra indicate.
In pratica la strada è ancora tanta per completare il codice

B4X:
    If qrcodeString.Length<4 Then Return ""
    If qrcodeString.SubString2(0,4) <> "HC1:" Then Return ""
    Dim data As String = qrcodeString.SubString(4)

    If data = "" Then
        xui.MsgboxAsync("Errore nei dati letti da QrCode", "B4X")
        Return
    End If
    
    Dim base45decoded() As Byte = base45decode(data)
    If base45decoded(0)<>0x78 Then
        xui.MsgboxAsync("Errore nei dati da decomprimere dopo base45decode", "B4X")
        Return
    End If
    
    Dim cs As CompressedStreams
    Dim decompressed() As Byte = cs.DecompressBytes(base45decoded, "zlib")

base45decode:
Private Sub base45decode(encodedString As String) As Byte()
    'Dim alphabet() As String = Array As String("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":")
    Dim mAlphabet As Map = CreateMap("0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20, "L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31, "W": 32, "X": 33, "Y": 34, "Z": 35, " ": 36, "$": 37, "%": 38, "*": 39, "+": 40, "-": 41, ".": 42, "/": 43, ":": 44)
    If encodedString.Length = 0 Then Return
    
    If (encodedString.Length Mod 3) = 1 Then Return  ' ERRORE
    
    Dim i As Int, l As Long
    Dim chunk3 As String, chunk2 As String, m As Int
    
    Dim bb As B4XBytesBuilder
    bb.Initialize
    
    For i = 0 To encodedString.Length-1 Step 3
        l = 0
        If i+3 > encodedString.Length Then
            chunk2 = encodedString.SubString2(i,i+2)
            m = mAlphabet.GetDefault(chunk2.SubString2(1,2),-1)
            If m = -1 Then Return
            l = l + m * 45
            m = mAlphabet.GetDefault(chunk2.SubString2(0,1),-1)
            If m = -1 Then Return
            l = l + m
        Else
            chunk3 = encodedString.SubString2(i,i+3)
            m = mAlphabet.GetDefault(chunk3.SubString2(2,3),-1)
            If m = -1 Then Return
            l = m * 2025
            m = mAlphabet.GetDefault(chunk3.SubString2(1,2),-1)
            If m = -1 Then Return
            l = l + m * 45
            m = mAlphabet.GetDefault(chunk3.SubString2(0,1),-1)
            If m = -1 Then Return
            l = l + m
        End If
            
        If l >= 256 Then
            bb.Append(Array As Byte(Floor( l / 256).As(Byte)))
            bb.Append(Array As Byte((l Mod 256).As(Byte)))
        Else
            bb.Append(Array As Byte(l.As(Byte)))
        End If
    Next
            
    Return bb.ToArray

End Sub

Per la decodifica CBOR ho trovato questa libreria java della quale poi occorrerebbe capire come chiamare i metodi
jar:
sorgenti:

Aggiungendola come #AdditionalJar funziona in B4J ma non in B4A.

Ho quindi trovato questo post di Erel
che spiega che le librerie fatte con Java 8 non possono essere importate così come sono in Android ma occorre fare un "desugar".
Ho quindi provato a seguire le istruzioni ma ottengo vari messaggi di errore...
 

Star-Dust

Expert
Licensed User
Longtime User
5255 per l'esattezza
 

Star-Dust

Expert
Licensed User
Longtime User
Scusa @amorosik perché non prendi il progetto di @sfsameer , alternativa a Team Viewer per controllare un dispositivo Android da PC, oppure quello web?

Creartelo da.solo ci vorrà tempo, loro con 20€ te lo danno già pronto...
 

Star-Dust

Expert
Licensed User
Longtime User
quasi quasi gli faccio sviluppare il mio, quello ideato nel 1492 e mai realizzato! Pure per 25€, toh! 😂
Mi pare che hanno annunciato di realizzare un server game.

Abbonati e ricevi ogni progetto che sfornano
 
Top