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
Ort: Bruck an der Mur
66 Beiträge
 
#1

Fast Base64 encoding/decoding

  Alt 20. Mai 2023, 14:33
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.847 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fast Base64 encoding/decoding

  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

Registriert seit: 13. Dez 2007
Ort: Bruck an der Mur
66 Beiträge
 
#3

AW: Fast Base64 encoding/decoding

  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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.186 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fast Base64 encoding/decoding

  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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Mai 2023 um 21:48 Uhr)
  Mit Zitat antworten Zitat
rabatscher

Registriert seit: 13. Dez 2007
Ort: Bruck an der Mur
66 Beiträge
 
#5

AW: Fast Base64 encoding/decoding

  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

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.847 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fast Base64 encoding/decoding

  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

Registriert seit: 13. Dez 2007
Ort: Bruck an der Mur
66 Beiträge
 
#7

AW: Fast Base64 encoding/decoding

  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

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.847 Beiträge
 
Delphi 12 Athens
 
#8

AW: Fast Base64 encoding/decoding

  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
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 11:03 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