AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Fast Base64 encoding/decoding
Thema durchsuchen
Ansicht
Themen-Optionen

Fast Base64 encoding/decoding

Ein Thema von rabatscher · begonnen am 20. Mai 2023 · letzter Beitrag vom 22. Mai 2023
Antwort Antwort
rabatscher
Registriert seit: 13. Dez 2007
Nachdem ich über ein interessantes Paper bezüglich Base64 encoding/decoding gestolpert bin musste ich das
einfach in Delphi implementieren:

https://github.com/mikerabat/fastbase64/

Das Projekt nutzt AVX2 Assembler Instruktionen um Base64 zu kodieren und dekodieren
-> gegenüber Indy ist das Ding ca 10x Schneller (getested mit einem cor i7-1065G7)

Das Projekt bzw. die Codierroutinen sollten bis Delphi 2010 benutzbar sein sowie auch
für FPC basierte Umgebungen.
 
TurboMagic

 
Delphi 12 Athens
 
#2
  Alt 21. Mai 2023, 14:23
Hallo,

nette Sache!

Würde was dagegen sprechen, dass ich das mal irgendwann als Option
in DEC https://github.com/MHumm/DelphiEncryptionCompendium
als Alternative zum dort vorhandenen Base64 einbaue?

Ansonsten: schon gesehen, dass es in Delphi's System.pas auch ein GetCPUID und System.CPUIDTable gibt?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
rabatscher
 
#3
  Alt 21. Mai 2023, 21:18
Absolut nicht

und nein ich hab die CPUID Funktionen noch nicht gesehen allerdings brauchte ich die noch nie,
da meine Projekte ja doch etwas rückwärtskompatibel sein sollten und meine
Implementierungen zumindest bis Delphi2010 funktionieren sollten.
(was das Base64 Projekt auch tut )

Ach ja.. für DEC hätte meine andere Lib auf https://github.com/mikerabat/mrmath einen
ChaCha (Salsa20) basierten Zufallsgenerator (AVX und SEE Implementierungen). Evt könnte man dort
aus dem Basisalgorithmus einen Cipher basteln. Ich habs mir kurz mal angesehen aber
konnte es in DEC nicht wirklich unterbringen.... (Wir würdens gern mal benutzen )
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#4
  Alt 21. Mai 2023, 21:41
Dafür kannst oben einen eigenen Fallback einbauen:
Delphi-Quellcode:
{$IF not Declared(GetCPUID)}
type
  TCPUIDRec = record
    EAX, EBX, ECX, EDX: UInt32;
  end;

function IsCPUIDAvailable: Boolean;
begin
  ...
end;

//function GetCPUID(FunctionID: UInt32; SubFunctionID: UInt32 = 0): TCPUIDRec; // EAX=FunctionID, ECX=SubFunctionID
// Eigentlich so, aber Kürzer passt auch.
function GetCPUID(FunctionID: UInt32): TCPUIDRec; // EAX=FunctionID
asm
  ...
end;
{$IFEND}

Warum sind viele Konstenten im FastBase64 anstatt in FastBase64Const?

Geändert von himitsu (21. Mai 2023 um 21:48 Uhr)
  Mit Zitat antworten Zitat
rabatscher
 
#5
  Alt 21. Mai 2023, 22:36
Die Konstanten sind nur für die Fallback Dekodierung in FastBase64 gedacht - das ist so ca die gleiche Routine, die
auch Chormium benutzt... die Constanten unit wird in den AVX units benutzt.

If declared kannte ich nicht... werds mal ausprobieren
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#6
  Alt 22. Mai 2023, 07:42
Absolut nicht

und nein ich hab die CPUID Funktionen noch nicht gesehen allerdings brauchte ich die noch nie,
da meine Projekte ja doch etwas rückwärtskompatibel sein sollten und meine
Implementierungen zumindest bis Delphi2010 funktionieren sollten.
(was das Base64 Projekt auch tut )

Ach ja.. für DEC hätte meine andere Lib auf https://github.com/mikerabat/mrmath einen
ChaCha (Salsa20) basierten Zufallsgenerator (AVX und SEE Implementierungen). Evt könnte man dort
aus dem Basisalgorithmus einen Cipher basteln. Ich habs mir kurz mal angesehen aber
konnte es in DEC nicht wirklich unterbringen.... (Wir würdens gern mal benutzen )
Interessant, dass du so dinen ChaCha/SalSa20 Zufallsgenerator hast.
Es gibt ja ChaCha und SalSa als Stromchiffre und die könnte man sehr gerne in DEC unterbringen.
Es wäre auch nicht die erste Stromchiffre in DEC! z.B. ist ja schon RC4 enthalten.
Die Frage wäre, wass denn so anders an ChaCHa/SalSa wäre, dass man es nicht in die DEC Architektur
einbringen könnte? Es sollte halt so sein, dass es davon auch eine Pure Pascal Version gibt,
für Plattformen die nicht auf Intel ASM zurückgreifen können. Dafür könnte man vermutlich
die Umsetzungen von Wolfgang Erhardt benutzen, die ich noch als Kopie vorliegen habe. Nur hatte
ich dafür noch keine Zeit und sein Code ist leider Turbo Pascal kompatibel prozedurmäßig
geschrieben...

Außerdem müsste man sich noch defines überlegen mit denen man ggf. händisch steuern kann,
welche Variante zum Einsatz kommen soll, u.a. auch damit man all Code Pfade testen kann.

Könnten wir da irgendwie "ins Geschäft kommen"?
Da dein Code unter APL 2.0 steht ist das auch gar kein Problem, denn DEC ist auch APL 2.0.
Und selbstverständlich würdest du in der Liste der Beitragenden gelistet...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
rabatscher
 
#7
  Alt 22. Mai 2023, 08:15
Die Unit RandomEng.pas beinhaltet Chacha routinen in Pascal und SSE. Die AVX und SSE versionen wurden in separate files
ausgelagert, damit mein Tool, das die AVX codes ordentlich in DB Statements gewandelt werden können.

Die Cipher definiert die Initstruktur etwas anders - die Key und die letzten 2-3 Longwords werden etwas anders gehandelt. Ausserdem
kenne ich mich mit dem Keyaustausch nicht aus...
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#8
  Alt 22. Mai 2023, 09:35
Die Unit RandomEng.pas beinhaltet Chacha routinen in Pascal und SSE. Die AVX und SSE versionen wurden in separate files
ausgelagert, damit mein Tool, das die AVX codes ordentlich in DB Statements gewandelt werden können.

Die Cipher definiert die Initstruktur etwas anders - die Key und die letzten 2-3 Longwords werden etwas anders gehandelt. Ausserdem
kenne ich mich mit dem Keyaustausch nicht aus...
Das könnte man aber doch erarbeiten...
Rom wurde auch nicht an einem Tag gebaut!
Ich biete auch gerne einen Branch und Commit Rechte an...
  Mit Zitat antworten Zitat
rabatscher
 
#9
  Alt 22. Mai 2023, 11:46
Ok super - ich würde mal mit nem einfachen checkout von DEC von Github starten und mich mal anfangen durchzuwurschteln...
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#10
  Alt 22. Mai 2023, 12:13
Ok super - ich würde mal mit nem einfachen checkout von DEC von Github starten und mich mal anfangen durchzuwurschteln...
Klingt gut! Und wenn du Fragen zur Struktur hast oder auch andere, gerne melden! Und mal in die mitgelieferte Doku schauen...
Da sind auch Klassenhierarchie Diagramme drin..
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 20:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz