Results 1 to 3 of 3

Thread: PByte naar Array of Byte en terug

  1. #1
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289

    PByte naar Array of Byte en terug

    Hoi

    Ik heb weer een lastig iets waar ik niet uit kom.

    Ik genereer een AES key en plaats deze met alle parameters in een record.

    Code:
     TKeyStructure                     = packed record
        AESKeyLen                       : DWORD;                        
        AESKey                          : Array [0..47] of Byte;        
    <knip> 
      end;
    De CryptExport functie export de data als PByte.
    Export gaat goed en ik heb de juiste key in de file.

    Code:
    function TAES.ExportKey (Output : TMemoryStream) : boolean;
    var
      dwDataLen : DWORD;
      pbAESKey : PByte;
      I : Integer;
    begin
      result := false;
    
      if (Output <> nil) AND (FSessionKey <> 0) then
        begin
          result := CryptExportKey(FSessionKey, 0, PLAINTEXTKEYBLOB, 0, nil, @dwDataLen); // Get size of the key in dwDataLen
          if result then
            begin // get size succesful
              GetMem(pbAESKey, dwDataLen);
              try
                result := CryptExportKey(FSessionKey, 0, PLAINTEXTKEYBLOB, 0, pbAESKey, @dwDataLen);
                if result then
                  begin // Export AESKey succesful
                    ZeroMemory(@FKeyStructure,SizeOf(FKeyStructure));
                    FKeyStructure.AESKeyLen := dwDataLen;
                    for I := 0 to dwDataLen -1 do
                      FKeyStructure.AESKey[i] := BYTE(pbAESKey[I]);
     
                   Output.SetSize(SizeOf(FKeyStructure));
                    Output.Position := 0;
    
                    Output.Write(FKeyStructure, SizeOf(FKeyStructure));
    <knip>
              finally
                FreeMem(pbAESKey, dwDataLen);
              end;
    <knip>
    Zoals vermeld, bovenstaand werkt, wat niet werkt is de import.
    Ik dacht vrij eenvoudig de export functie om te draaien maar dat werkt dus niet --> result = Key not valid for use in specified state
    Ik weet dan ook niet hoe ik data in een PBYTE moet debuggen.

    Code:
    function TAES.ImportKey (Input : TMemoryStream) : boolean;
    
    var
      dwDataLen : DWORD;
      Buffer : TBytes;
      I : Integer;
      S : AnsiString;
      pbAESKey : PByte;
    
      result := false;
      if (Input <> nil) AND (FSessionKey = 0) then
        begin
          ZeroMemory(@FKeyStructure,SizeOf(FKeyStructure));
          Input.SetSize(SizeOf(FKeyStructure));
     <knip> Wat code verwijderd die checked of dat de file wel een geldige file is.
    
              dwDataLen := FKeyStructure.AESKeyLen;
              for I := 0 to dwDataLen -1 do
                 BYTE(pbAESKey[I]) := FKeyStructure.AESKey[i];
    
              //dwDataLen := SizeOf(pbAESKey);
    
              result := (CryptImportKey(FProv, pbAESKey, dwDataLen, 0, 0, @FSessionKey));
    Alvast bedankt maar weer ;-)

    Herby

  2. #2
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    Ben nog niet echt verder mee gekomen, code iets aangepast.


    Code:
    function TAES.ImportKey (Input : TMemoryStream) : boolean;
    
    var
      dwDataLen : DWORD;
      Buffer : TBytes;
      I : Integer;
      S : AnsiString;
      pbAESKey : PByte;
    
      result := false;
      if (Input <> nil) AND (FSessionKey = 0) then
        begin
          ZeroMemory(@FKeyStructure,SizeOf(FKeyStructure));
          Input.SetSize(SizeOf(FKeyStructure));
     <knip> Wat code verwijderd die checked of dat de file wel een geldige file is.
    
              dwDataLen := FKeyStructure.AESKeyLen;
             // for I := 0 to dwDataLen -1 do
             //    BYTE(pbAESKey[I]) := FKeyStructure.AESKey[i];
    
             pbAESKey := @FKeyStructure.AESKey[0]; 
              //dwDataLen := SizeOf(pbAESKey);
    
              result := (CryptImportKey(FProv, pbAESKey, dwDataLen, 0, 0, @FSessionKey)); --> Key not valid for use in specified state

  3. #3
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    En inmiddels gevonden waar het mis gaat.
    In tegenstelling tot RSA kun je een geimporteerde key weer exporteren.
    Met AES lijkt dit niet te kunnen.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •