We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi all,
I want to use aes instructions for implementing AES-128 ECB algorithm. Such implementation contains several aes instructions (e.g., the aese, aesmc, aesd, aesimc).
I implement the prototype of AES encryption and AES decryption. In decryption, I use the aesimc to replace the aesmc instruction, then use aesd to replace the aese. Moreover, I select the key in decryption is the same as that in encryption.
To verify it, I encrypt one 128-bit plaintext, then decrypt it. However the result of my decryption is not the same as my plaintext.
I check my codes and find the reason: the output of one aese-aesd round will be different from the input.
Specifically, my codes are listed as follows:
ld1 {v0.16b}, [x0] //x0 stores the plaintext
aese v0.16b, v1.16b //v1 stores the key, and the result of aese is stored in v0
aesd v0.16b v1.16b //v1 stores the key, and the result of aesd is stored in v0
//fetch the value in v0 and compare it with the plaintext stored in x0.
Can someone helps me?
You might refer to linux kernel code here elixir.bootlin.com/.../crypto