![]() |
Fast Base64 encoding/decoding
Nachdem ich über ein interessantes Paper bezüglich Base64 encoding/decoding gestolpert bin musste ich das
einfach in Delphi implementieren: ![]() 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. |
AW: Fast Base64 encoding/decoding
Hallo,
nette Sache! Würde was dagegen sprechen, dass ich das mal irgendwann als Option in DEC ![]() 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 |
AW: Fast Base64 encoding/decoding
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 ![]() 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 ;) ) |
AW: Fast Base64 encoding/decoding
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? |
AW: Fast Base64 encoding/decoding
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 ;) |
AW: Fast Base64 encoding/decoding
Zitat:
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 |
AW: Fast Base64 encoding/decoding
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... |
AW: Fast Base64 encoding/decoding
Zitat:
Rom wurde auch nicht an einem Tag gebaut! Ich biete auch gerne einen Branch und Commit Rechte an... |
AW: Fast Base64 encoding/decoding
Ok super - ich würde mal mit nem einfachen checkout von DEC von Github starten und mich mal anfangen durchzuwurschteln...
|
AW: Fast Base64 encoding/decoding
Zitat:
Da sind auch Klassenhierarchie Diagramme drin.. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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 by Thomas Breitkreuz