AES256 CBC Mode Decoder und Encoder - Update 27.02.2014

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

AES256 CBC Mode Decoder und Encoder - Update 27.02.2014

Beitrag von walbus »

:)
Zuletzt geändert von walbus am 07.02.2015 22:59, insgesamt 9-mal geändert.
Benutzeravatar
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

Beitrag von NicTheQuick »

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.

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
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.
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh

Beitrag von walbus »

:)
Zuletzt geändert von walbus am 08.02.2015 23:29, insgesamt 3-mal geändert.
Benutzeravatar
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

Beitrag von NicTheQuick »

Dann vielleicht einfach so. Übersichtlich und kompakt

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)
///Edit: For-Schleife-Bug mit Quads gefixt
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: AES 256 CBC Mode Decoder und Encoder - Voll funktionsfäh

Beitrag von walbus »

:)
Zuletzt geändert von walbus am 08.02.2015 23:29, insgesamt 6-mal geändert.
Benutzeravatar
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

Beitrag von NicTheQuick »

Achja, die 32-Bit-ler haben damit ja Probleme. Hab's gefixt.
Antworten