AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Der DEC x32 ASM in x64/PurePascal Konvertierungsthread
Thema durchsuchen
Ansicht
Themen-Optionen

Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

Ein Thema von Assertor · begonnen am 7. Jan 2012 · letzter Beitrag vom 17. Sep 2020
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
hugie

Registriert seit: 5. Feb 2013
2 Beiträge
 
#41

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 6. Feb 2013, 16:43
Da wäre es langsam interessant, eine existierende OpenSource lib die weit verbreitet ist, via wrapper für delphi zur verfügung zu stellen.
Z.B. libgcrypt o.ä. Ist lgpl, sollte also auch in proprietärer Software einsetzbar sein.
Viele c/c++ OS Projekte sind up-to-date, häufig eingesetzt, gut geprüft etc.

Soweit ich weiß ist es doch relativ unkompliziert eine .dll oder .so via wrapper aus delphi heraus anzusprechen.
Damit würde man sich das regelmäßige neuentwickeln sparen, man müsste "nur" die api immer aktuell halten.
Ok, es ist kein PurePascal, aber sicherlich doch eine alternative Lösung zu unseren Problemen hier.

Gibt es da vielleicht schon was?

Lg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.589 Beiträge
 
Delphi 11 Alexandria
 
#42

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 6. Feb 2013, 17:37
Ich habe in der Zwischenzeit die meisten Anpassungen selbst durchgeführt, zumindest für die Teile, die ich benötige.

Eine zusätzliche DLL wäre zwar kein echtes Problem, möchte ich aber eigentlich nicht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#43

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 2. Dez 2013, 21:54
Hallo zusammen,

darf man fragen ob das Projekt Dec 6.0 noch weiter verfolgt wird?

Wäre schon toll und war doch schon bald fertig, oder?

Ich habe mir auch mal die Kryptoroutinen von gammatester angesehen aber hätte da schon so meine Probleme um die von mir verwendeten DEC-Funktionen umzusetzen.

Sowas zum Beispiel:
Delphi-Quellcode:
function EncryptString(const Password: RawByteString; const Value: RawByteString): RawByteString;
var
  Salt, SessionKey: Binary;
begin
  Salt := RandomBinary(16);
  with TCipher_Rijndael.Create do
    try
      SessionKey := THash_SHA1.KDFx(Password, Salt, Context.KeySize,
        TFormat_Copy);
      mode := cmCFS8;
      Init(SessionKey);
      Result := TFormat_MIME64.Encode(Salt + EncodeBinary(Value, TFormat_Copy));
    finally
      Free;
      ProtectBinary(Salt);
      ProtectBinary(SessionKey);
    end;
end;
Weiß jemand was die Entsprechung mit den gammatester-Kryptoroutinen wäre? Geht das damit?


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#44

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 2. Dez 2013, 22:25
Also auf DEC hoffe ich nicht mehr. Ich habe das System von Gammatester erfolgreich umgestellt.
Das, was Du möchtest, sollte auch (irgendwie) funktionieren.

Ich muß bei mir gucken, Moment.
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 ( 2. Dez 2013 um 22:33 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#45

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 2. Dez 2013, 22:31
So habe ich das gemacht. Das ist anscheinend von mir aus einem Beispiel von ihm zusammengestrickt :

Delphi-Quellcode:
function Encrypt(const AText: string; const APassword: string): string;
{ -Encrypt file InName to OutName using password }
// http://www.wolfgang-ehrhardt.de/crypt_en.html
const
  bufSize = $C000;
var
  N : word;
  len : int64;
  hdr : TFCA256Hdr;
  cxe : TAES_EAXContext;
  auth : TFCA256_AuthBlock;
  TextOut, TextIn: TStringStream;
  buf : array [0 .. bufSize - 1] of Byte;
begin
  randomize;
  TextIn := TStringStream.Create(AText);
  TextOut := TStringStream.Create;
  try
    len := TextIn.Size;
    GetSalt(hdr.salt);

    if FCA_EAX256_initS(cxe, APassword, hdr) <> 0 then
      raise Exception.Create('Fehler');

    TextOut.WriteBuffer(hdr, SizeOf(hdr));

    while len > 0 do
    begin
      if len > SizeOf(buf) then
        N := SizeOf(buf)
      else
        N := len;
      TextIn.ReadBuffer(buf, N);
      dec(len, N);
      if FCA_EAX256_encrypt(cxe, buf, N) <> 0 then
        raise Exception.Create('Fehler');
      TextOut.WriteBuffer(buf, N);
    end;
    FCA_EAX256_final(cxe, auth);
    TextOut.WriteBuffer(auth, SizeOf(auth));
    Result := Base64EncStr(TextOut.DataString);
  finally
    TextOut.Free;
    TextIn.Free;
  end;
end;

function Decrypt(const AText: string; const APassword: string): string;
{ -Decrypt file InName to OutName using password sPW }
// http://www.wolfgang-ehrhardt.de/crypt_en.html
const
  bufSize = $C000;
var
  N : word;
  I, len : longint;
  hdrk : TFCA256Hdr;
  hdrf : TFCA256Hdr;
  cxe : TAES_EAXContext;
  cxh : TFCA_HMAC256_Context;
  authf : TFCA256_AuthBlock;
  authc : TFCA256_AuthBlock;
  UseEAX : boolean;
  TextOut, TextIn: TStringStream;
  buf : array [0 .. bufSize - 1] of Byte;
begin
  if AText = 'then
    Exit('');
  TextIn := TStringStream.Create(Base64DecStr(AText));
  TextOut := TStringStream.Create;
  try
    len := TextIn.Size - SizeOf(hdrf) - SizeOf(authf);
    TextIn.ReadBuffer(hdrf, SizeOf(hdrf));

    if (hdrf.FCASig <> C_FCA_Sig) or (hdrf.Flags and $F0 <> $A0) then
      raise Exception.Create('Fehler');

    if hdrf.Flags and $02 <> 0 then
    begin
      writeln(#7'*** Warning: Found zlib compression flag, use t_zlibex to inflate <outfile>');
    end;

    if not(hdrf.Flags and $04 <> 0) then
    begin
      raise Exception.Create('Fehler');
    end;

    hdrk := hdrf;
    UseEAX := odd(hdrf.Flags);
    if UseEAX then
    begin
      if FCA_EAX256_initS(cxe, APassword, hdrk) <> 0 then
        raise Exception.Create('Fehler');
    end
    else
    begin
      if FCA_HMAC256_initS(cxh, APassword, hdrk) <> 0 then
        raise Exception.Create('Fehler');
    end;
    if hdrf.PW_ver <> hdrk.PW_ver then
      raise Exception.Create('Fehler');

    while len > 0 do
    begin
      if len > SizeOf(buf) then
        N := SizeOf(buf)
      else
        N := len;
      TextIn.ReadBuffer(buf, N);
      dec(len, N);
      if UseEAX then
      begin
        if FCA_EAX256_decrypt(cxe, buf, N) <> 0 then
          raise Exception.Create('Fehler');
      end
      else
      begin
        if FCA_HMAC256_decrypt(cxh, buf, N) <> 0 then
          raise Exception.Create('Fehler');
      end;
      TextOut.WriteBuffer(buf, N);
    end;
    if UseEAX then
    begin
      FCA_EAX256_final(cxe, authc);
    end
    else
    begin
      FCA_HMAC256_final(cxh, authc);
    end;
    TextIn.ReadBuffer(authf, SizeOf(authf));
    for I := 0 to 15 do
    begin
      if authf[I] <> authc[I] then
      begin
        raise Exception.Create('Fehler');
      end;
    end;
    Result := TextOut.DataString;
  finally
    TextOut.Free;
    TextIn.Free;
  end;
end;
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#46

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 2. Dez 2013, 22:35
Hallo Jens01,

vielen Dank. Werde ich mal ausprobieren.

Schade, wenn das mit DEC nichts mehr werden sollte. Ist ja doch um Einiges einfacher anzuwenden...


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#47

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 2. Dez 2013, 22:38
Zitat:
Ist ja doch um Einiges einfacher anzuwenden...
Glaube ich gar nicht. Man muß sich nur noch mal durch diese nicht so einfache Routinen durcharbeiten. Bei DEC hast Du das wahrscheinlich schon gemacht.
Gammatester ist aber öfter mal hier im Forum.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#48

AW: 256 bit Integer Addition von ASM in PurePascal

  Alt 3. Dez 2013, 07:42
Das läuft in x64 Delphi, das RDX Register scheint dem FPC x64 Compiler aber nicht zu gefallen:
Zitat:
Error: Unknown identifier "RDX"
Gleich in der ersten Zeile bei SHL RDX, 3.

Nun gut, ich kenne FPC nicht weiter, möglicherweise ist dies bekannt und über Defines steuerbar. Ggf bleibt dort der Weg über PurePascal, was wegen der breiteren Unterstützung ja mit o.g. Delphi Code möglich ist.
Ist zwar schon ne Weile her der Post, aber dennoch sollte man erklären woran es hier hakt: FPC arbeitet standardmäßig im AT&T Syntax Modus, wobei register mit einem "%"-Prefix benannt sind und noch dazu Source und Destination Register vertauscht sind. Will man den Intel Modus verwenden (der für i386 und x86_64 unterstützt ist), so muss man eine {$asmmode intel} Direktive einfügen.

Eine Anmerkung noch zu Calling Conventions: diese sind unter x86_64-win64 und x86_64-[alles andere] unterschiedlich. Letztere verwenden die Linux x86_64 ABI während nur Windows hier sein eigenes Süppchen kocht. Für FPC würde ich dennoch eine PurePascal Implementierung vorziehen, da es ja noch einige Plattformen mehr gibt (Achtung: auch mit unterschiedlicher Endianess!).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#49

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 3. Dez 2013, 08:45
Delphi-Quellcode:
      SessionKey := THash_SHA1.KDFx(Password, Salt, Context.KeySize,
        TFormat_Copy);
      mode := cmCFS8;
Weiß jemand was die Entsprechung mit den gammatester-Kryptoroutinen wäre? Geht das damit?
Das geht so überhaupt nicht! Es liegt aber nicht an meinen Routinen, sondern an den häufigen selbstgestrickten DEC-Routinen:
Zitat:
class function TDECHash.KDFx
// DEC's own KDF, even stronger
oder die selbstgebastelten Betriebsmodi, die zwar gut gemeint und wahrscheinlich auch sicher sind, allerdings mit nichts und niemand in der restlichen Welt kompatibel.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.589 Beiträge
 
Delphi 11 Alexandria
 
#50

AW: 256 bit Integer Addition von ASM in PurePascal

  Alt 3. Dez 2013, 09:27
Eine Anmerkung noch zu Calling Conventions: diese sind unter x86_64-win64 und x86_64-[alles andere] unterschiedlich. Letztere verwenden die Linux x86_64 ABI während nur Windows hier sein eigenes Süppchen kocht.
Genau genommen fällt UEFI aus dem "alles andere" auch heraus und nutzt die selbe Konvention wie Windows.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      

 

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 21: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