Page 1 of 1

Problems with PureAES

Posted: Fri May 24, 2013 7:56 pm
by AgManiX
Hello!
I have a problem with code (require PureAES library), on the line #17:

Code: Select all

Global SecuredContent, Password.s, Lenght, ReadyContent.s, Filename.s
Procedure GeneratePassword()
  OpenCryptRandom()
  Password.s=Str(CryptRandom(2147483647))
  CloseCryptRandom()
EndProcedure
Procedure Secure(Content.s)
  Lenght = StringByteLength(Content) ; Длина
  Debug Password
  Debug Content
  Debug Lenght
*SecuredContent = PureAES_Encrypt(@Content, @Lenght, Password) ;Засекреченый текст
SecuredContent = *SecuredContent
ReadyContent = PeekS(*SecuredContent, Lenght)
EndProcedure
Procedure Unsecure(SecuredContent.s,Password)
  *SecuredContent=SecuredContent;<----------------------------Problem are here
  *UnsecuredContent = PureAES_Decrypt(*SecuredContent, @Lenght, Password)
  Debug "PureAES_Decrypt : Returned value = " + Str(*UnsecuredContent)
  Debug "PureAES_Decrypt : BufferLen = " + Str(Lenght)
  Lenght / SizeOf(Character) ; ANSI != UNICODE
  ReadyContent=PeekS(*UnsecuredContent, Lenght)
  PureAES_FreeBuffer(*SecuredContent)
  PureAES_FreeBuffer(*UnsecuredContent) 
EndProcedure
Procedure SaveNote(Title.s,Content.s)
GeneratePassword()
Secure(Content)
Filename=CreateFile(0,Title+"."+Password)
WriteStringN(0,ReadyContent)
CloseFile(0)
EndProcedure
Procedure ReadNote(Filename.s)
  Password=GetExtensionPart(Filename)
  OpenFile(0,Filename.s)
  SecuredContent.s=""
  While Eof(0)=0
    SecuredContent=SecuredContent+ReadString(0)
  Wend
  Unsecure(SecuredContent,Password)
  CloseFile(0)
EndProcedure

  SaveNote("Save Test","Wow, it works!")
  ReadNote(Filename)
What is wrong? Help me please!

Best wishes, Max Nixischev, AGMAsoft.

Re: Problems with PureAES

Posted: Fri May 24, 2013 8:19 pm
by infratec
Hi,

here is a working example

Code: Select all

Procedure Unsecure(SecuredContent.s,Password.s)
  *SecuredContent=@SecuredContent
  Debug PeekS(*SecuredContent)
EndProcedure

Unsecure("Test01", "Test02")
And even if Password is global, if you use Password as parameter it is local and you need .s else it is an integer.

Bernd

Re: Problems with PureAES

Posted: Fri May 24, 2013 9:00 pm
by AgManiX
Thank you, Bernd!
But now I have a new one problem :(
When I use "Debug ReadyContent". i see this: This text must b????????d and decoded!
But it must be: This text must be encoded and decoded!
What's wrong whith this code?

Code: Select all

Global SecuredContent, Password.s, Lenght, ReadyContent.s, Filename.s
Procedure GeneratePassword()
  OpenCryptRandom()
  Password.s=Str(CryptRandom(2147483647))
  CloseCryptRandom()
EndProcedure
Procedure Secure(Content.s)
  Lenght = StringByteLength(Content) ; Длина
  Debug Password
  Debug Content
  Debug Lenght
*SecuredContent = PureAES_Encrypt(@Content, @Lenght, Password) ;Засекреченый текст
SecuredContent = *SecuredContent
ReadyContent = PeekS(*SecuredContent, Lenght)
  PureAES_FreeBuffer(*SecuredContent)
EndProcedure
Procedure Unsecure(SecuredContent.s,Password.s)
  *SecuredContent=@SecuredContent
  Debug PeekS(*SecuredContent)
  *UnsecuredContent = PureAES_Decrypt(*SecuredContent, @Lenght, Password)
  Debug "PureAES_Decrypt : Returned value = " + Str(*UnsecuredContent)
  Debug "PureAES_Decrypt : BufferLen = " + Str(Lenght)
  Lenght / SizeOf(Character) ; ANSI != UNICODE
  ReadyContent=PeekS(*UnsecuredContent, Lenght)
  PureAES_FreeBuffer(*UnsecuredContent) 
EndProcedure
Procedure SaveNote(Title.s,Content.s)
GeneratePassword()
Secure(Content)
Filename=Title+"."+Password
CreateFile(0,Filename)
WriteStringN(0,ReadyContent)
CloseFile(0)
EndProcedure
Procedure ReadNote(Filename.s)
  Password=GetExtensionPart(Filename)
  OpenFile(0,Filename.s)
  ReadSecuredContent.s=""
  While Eof(0)=0
    ReadSecuredContent=ReadSecuredContent+ReadString(0)
  Wend
  Unsecure(ReadSecuredContent,Password)
  CloseFile(0)
EndProcedure

  SaveNote("Тестируем сохраняшку","This text must be encoded and decoded!")
  ReadNote(Filename)
  Debug ReadyContent
Max Nixischev

Re: Problems with PureAES

Posted: Fri May 24, 2013 9:18 pm
by infratec
What is with your Length parameter???

Code: Select all

PureAES_Encrypt(*Buffer, *BufferLen.Long, EncryptionKey.s)
So you need

Code: Select all

Global Length.l
and

Code: Select all

Length = Len(SecuredContent)
before you call PureAES_Encrypt()

Bernd

Re: Problems with PureAES

Posted: Fri May 24, 2013 9:36 pm
by AgManiX
hm... I replaced Global Lenght -> Lenght.l, but nothing changed - the same text in output
And when I add Len() I have error (bugs), have you any ideas?

Code: Select all

Global SecuredContent, Password.s, Lenght.l, ReadyContent.s, Filename.s
Procedure GeneratePassword()
  OpenCryptRandom()
  Password.s=Str(CryptRandom(2147483647))
  CloseCryptRandom()
EndProcedure
Procedure Secure(Content.s)
  Lenght = StringByteLength(Content) ; Длина
*SecuredContent = PureAES_Encrypt(@Content, @Lenght, Password) ;Засекреченый текст
;SecuredContent = *SecuredContent
ReadyContent = PeekS(*SecuredContent, Lenght)
  PureAES_FreeBuffer(*SecuredContent)
EndProcedure
Procedure Unsecure(SecuredContent.s,Password.s)
  *SecuredContent=@SecuredContent
  Debug PeekS(*SecuredContent)
  *UnsecuredContent = PureAES_Decrypt(*SecuredContent, @Lenght, Password)
  Lenght / SizeOf(Character) ; ANSI != UNICODE
  ReadyContent=PeekS(*UnsecuredContent, Lenght)
  PureAES_FreeBuffer(*UnsecuredContent) 
EndProcedure
Procedure SaveNote(Title.s,Content.s)
GeneratePassword()
Secure(Content)
Filename=Title+"."+Password
CreateFile(0,Filename)
WriteStringN(0,ReadyContent)
CloseFile(0)
EndProcedure
Procedure ReadNote(Filename.s)
  Password=GetExtensionPart(Filename)
  OpenFile(0,Filename.s)
  ReadSecuredContent.s=""
  While Eof(0)=0
    ReadSecuredContent=ReadSecuredContent+ReadString(0)
  Wend
  Unsecure(ReadSecuredContent,Password)
  CloseFile(0)
EndProcedure

  SaveNote("Тестируем сохраняшку","This text must be encoded and decoded!")
  ReadNote(Filename)
  Debug ReadyContent

Re: Problems with PureAES

Posted: Fri May 24, 2013 10:07 pm
by infratec
Hi,

in my opinion you made it wrong.

The Length is needed before you call PureAES_Decrypt()

Like this:

Code: Select all

Procedure Unsecure(SecuredContent.s,Password.s)
  *SecuredContent=@SecuredContent
  Debug PeekS(*SecuredContent)
  Length = StringByteLength(SecuredContent)
  *UnsecuredContent = PureAES_Decrypt(*SecuredContent, @Lenght, Password)
  ;Lenght / SizeOf(Character) ; ANSI != UNICODE
  ;ReadyContent=PeekS(*UnsecuredContent, Lenght)
  ReadyContent=PeekS(*UnsecuredContent)
  PureAES_FreeBuffer(*UnsecuredContent)
EndProcedure
Bernd

Re: Problems with PureAES

Posted: Fri May 24, 2013 10:52 pm
by infratec
Maybe this works:

Code: Select all

EnableExplicit


Procedure.s GeneratePassword()
  
  Protected Result$
  
  OpenCryptRandom()
  Result$ = Str(CryptRandom(2147483647))
  CloseCryptRandom()
  
  ProcedureReturn Result$
  
EndProcedure

Procedure.s Secure(Content.s, Password$)
  
  Protected Result$, Length.l, *SecuredContent
   
  Length = StringByteLength(Content)
  Debug Password$
  Debug Content
  Debug Length
  *SecuredContent = PureAES_Encrypt(@Content, @Length, Password)
  Result$ = PeekS(*SecuredContent)
  PureAES_FreeBuffer(*SecuredContent)
  
  ProcedureReturn Result$
  
EndProcedure

Procedure.s Unsecure(SecuredContent.s,Password.s)
  
  Protected Result$, *SecuredContent, *UnsecuredContent, Length.l
  
  Length = StringByteLength(SecuredContent)
  *SecuredContent=@SecuredContent
  Debug PeekS(*SecuredContent)
  *UnsecuredContent = PureAES_Decrypt(*SecuredContent, @Lenght, Password)
  Debug "PureAES_Decrypt : Returned value = " + Str(*UnsecuredContent)
  Debug "PureAES_Decrypt : BufferLen = " + Str(Length)
  Result$ = PeekS(*UnsecuredContent)
  PureAES_FreeBuffer(*UnsecuredContent)
  
  ProcedureReturn Result$
  
EndProcedure

Procedure.s SaveNote(Title.s, Content.s)
  
  Protected Result$, Password$, Filename.s, Encoded$
  
  Password$ = GeneratePassword()
  Encoded$ = Secure(Content, Password$)
  Filename = Title + "." + Password$
  If CreateFile(0, Filename)
    WriteStringN(0, Encoded$)
    CloseFile(0)
    Result$ = Filename
  EndIf
  
  ProcedureReturn Result$
  
EndProcedure

Procedure.s ReadNote(Filename.s)
  
  Protected Password.s, Result$
  
  Password = GetExtensionPart(Filename)
  If ReadFile(0,Filename.s)
    While Not Eof(0)
      Result$ + ReadString(0)
    Wend
    CloseFile(0)
    Result$ = Unsecure(Result$, Password)
  EndIf
  
  ProcedureReturn Result$
  
EndProcedure


Define Filename$, ReadyContent$

Filename$ = SaveNote("Title","This text must be encoded and decoded!")
If Filename$
  ReadyContent$ = ReadNote(Filename$)
  Debug ReadyContent$
EndIf
Since I didn't installed the library I can not test it.

But why don't you use the inbuild AES functions (AESEncoder() and AESDecoder()) :?:
This is crossplatform.

Bernd