
AES256 CBC Mode Decoder und Encoder - Update 27.02.2014
AES256 CBC Mode Decoder und Encoder - Update 27.02.2014

Zuletzt geändert von walbus am 07.02.2015 22:59, insgesamt 9-mal geändert.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh
Im Grunde kannst du das etwas optimieren. Zum Beispiel brauchst du *iv2 und ii gar nicht. Außerdem kann man die PeekQ durch Pointer ersetzen.
Allerdings hab ich nicht verstanden, warum du das Ergebnis von 'AESEncoder()' gegen 16 prüfst. Laut Hilfe war das Encoden erfolgreich, wenn der Rückgabewert ungleich 0 ist und nicht, wenn er gleich 16 war. Ich würde jedenfalls immer so programmieren wie es im Handbuch steht. Wenn das mit der 16 jetzt noch funktioniert, dann kann das im nächsten PB-Update schon wieder ganz anders sein.
Code: Alles auswählen
Procedure.q AES256CBC_Encoder(*inBuffer.Quad, *outBuffer.Quad, bytes.q, *key, *i_v)
;(AES256_CBC mode encoder , by Werner Albus , www.nachtoptik.de :-)
Protected result_1.q
If (bytes % 16)
ProcedureReturn 0
EndIf
Protected *iv.Quad = AllocateMemory(16)
CopyMemory(*i_v, *iv, 16)
Protected rounds.q = (bytes >> 4) - 1
Protected i.q, result.i
For i = 0 To rounds
result = AESEncoder(*inBuffer, *outBuffer, 16, *key, 256, *iv)
If (Not result)
FreeMemory(*iv)
ProcedureReturn 0
EndIf
result_1 + result
*iv\q ! *outBuffer\q
*outBuffer + 8 : *iv + 8
*iv\q ! *outBuffer\q
*outBuffer + 8 : *iv - 8
*inBuffer + 16
Next i
FreeMemory(*iv)
ProcedureReturn result_1
EndProcedure
Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh

Zuletzt geändert von walbus am 08.02.2015 23:29, insgesamt 3-mal geändert.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh
Dann vielleicht einfach so. Übersichtlich und kompakt
///Edit: For-Schleife-Bug mit Quads gefixt
Code: Alles auswählen
Structure AES_IV
q.q[0]
EndStructure
Macro AES256CBC(Type, dir)
Procedure.i AES256CBC_#Type(*inBuffer.AES_IV, *outBuffer.AES_IV, bytes.q, *key, *i_v)
;(AES256_CBC mode encoder , by Werner Albus (www.nachtoptik.de) and NicTheQuick (www.freakscorner.de)
If (bytes % 16)
ProcedureReturn 0
EndIf
Protected *iv.AES_IV = AllocateMemory(16)
CopyMemory(*i_v, *iv, 16)
Protected rounds.q = (bytes >> 4)
Protected i.q, result.i
While i < rounds
result = AES#Type(*inBuffer, *outBuffer, 16, *key, 256, *iv)
If (Not result)
FreeMemory(*iv)
ProcedureReturn #False
EndIf
*iv\q[0] ! *dir#Buffer\q[0]
*iv\q[1] ! *dir#Buffer\q[1]
*outBuffer + 16
*inBuffer + 16
i + 1
Wend
FreeMemory(*iv)
ProcedureReturn #True
EndProcedure
EndMacro
AES256CBC(Encoder, out)
AES256CBC(Decoder, in)
Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh

Zuletzt geändert von walbus am 08.02.2015 23:29, insgesamt 6-mal geändert.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh
Achja, die 32-Bit-ler haben damit ja Probleme. Hab's gefixt.