![]() |
Covid Zertifikatscheck
Hi,
ich wollte eine Plattformunabhängige kleine App erstellen die Covid Zertifikate hinterlegt und auf Gültigkeit überprüft. Im Prinzip ist das recht einfach. In dem QR Code ist ein Base45 kodierter String hinterlegt:
Delphi-Quellcode:
Der Text ist ein bzip stream und wenn dieser dekodiert ist, dann hat man ein CBOR/COSE Json. COSE hab ich ja auf Github schon gefunden bzw. eine eigene Version (basierend auf einer C Implementierung) geschrieben. CBOR gibt es aber irgendwie nicht für Delphi. Kennt sich jemand eventuell damit aus?
const
_C2I: array[0..255] of byte = ( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 36, 255, 255, 255, 37, 38, 255, 255, 255, 255, 39, 40, 255, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, 255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, (* uppercase *) 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, (* lowercase *) 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255); procedure base45_decode(const AInput, AOutput: TStream); var ch, a, b: byte; x: word; begin ch := 0; repeat AInput.Read(ch, 1); a := _C2I[ch]; AInput.Read(ch, 1); b := _C2I[ch]; if (a = 255) or (b = 255) then exit; x := a + 45 * b; if AInput.Position < AInput.Size then begin AInput.Read(ch, 1); a := _C2I[ch]; if a = 255 then exit; x := x + (a * 45 * 45); ch := x shr 8; AOutput.Write(ch, 1); end; ch := x and $FF; AOutput.Write(ch, 1); until AInput.Position = AInput.Size; end; Peter |
AW: Covid Zertifikatscheck
Magst du den Base45 Algorithmus evtl. zur DEC beisteuern?
![]() Würde in Dem Format.pas rein gehören... |
AW: Covid Zertifikatscheck
Zitat:
Moin, hab ich die Frage nicht richtig verstanden oder hast du das auf ![]() |
AW: Covid Zertifikatscheck
Für Base45 muss ich noch einen Encoder schreiben, aber du kannst das gerne übernehmen.
CBOR kenne ich, das hatte ich zu erst verwendet - auch wenn es Indy braucht. Du brauchst allerdings COSE (CBOR Object Signing and Encryption) was neben CBOR noch einen Teil für Header und Signatur hat. Peter |
AW: Covid Zertifikatscheck
Hallo,
wollte nur fragen ob du hier erfolgt hattest ? Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz