AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Covid Zertifikatscheck

Ein Thema von Peter666 · begonnen am 12. Sep 2021 · letzter Beitrag vom 12. Sep 2021
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
337 Beiträge
 
#1

Covid Zertifikatscheck

  Alt 12. Sep 2021, 13:22
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:
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;
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?

Peter
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.654 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Covid Zertifikatscheck

  Alt 12. Sep 2021, 14:34
Magst du den Base45 Algorithmus evtl. zur DEC beisteuern?
https://github.com/MHumm/DelphiEncryptionCompendium

Würde in Dem Format.pas rein gehören...
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Covid Zertifikatscheck

  Alt 12. Sep 2021, 14:43
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:
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;
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?

Peter

Moin,
hab ich die Frage nicht richtig verstanden oder hast du das auf Github übersehen?
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
337 Beiträge
 
#4

AW: Covid Zertifikatscheck

  Alt 12. Sep 2021, 15:17
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf