From 8178e71bce4b5c149857dd756eca137899b4f3a3 Mon Sep 17 00:00:00 2001
From: zhanmingkan <496160012@qq.com>
Date: 星期一, 11 五月 2026 13:51:14 +0800
Subject: [PATCH] 提交
---
aesni-key-init.h | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/aesni-key-init.h b/aesni-key-init.h
new file mode 100644
index 0000000..3fa31ad
--- /dev/null
+++ b/aesni-key-init.h
@@ -0,0 +1,105 @@
+#ifndef AESNIKEYINIT_H
+#define AESNIKEYINIT_H
+
+#if defined (__GNUC__)
+#define ALIGN16 __attribute__ ( (aligned (16)))
+#else
+#define ALIGN16 __declspec (align (16))
+#endif
+
+#include "aesni-key-exp.h"
+
+typedef struct KEY_SCHEDULE{
+ ALIGN16 unsigned char KEY[16*15];
+ unsigned int nr;
+} AES_KEY;
+
+/*!
+ * @brief AES_set_encrypt_key takes the "userKey" and computes it to an allowed AES_Encryption_Key "key" of size "bits"
+ * @param userKey
+ * @param bits
+ * @param key
+ * @return -1 if userKey or key is empty/nullptr
+ * @return 0 if encryption-key got succesfully computed
+ * @return -2 if bits didn't match 128 or 192 or 256 (allowed key sizes)
+ *
+ */
+int AES_set_encrypt_key (const unsigned char *userKey,
+ const int bits,
+ AES_KEY *key)
+ {
+ if (!userKey || !key)
+ return -1;
+
+ if (bits == 128)
+ {
+ AES_128_Key_Expansion (userKey,key->KEY);
+ key->nr = 10;
+ return 0;
+ }
+ else if (bits == 192)
+ {
+ AES_192_Key_Expansion (userKey,key->KEY);
+ key->nr = 12;
+ return 0;
+ }
+ else if (bits == 256)
+ {
+ AES_256_Key_Expansion (userKey,key->KEY);
+ key->nr = 14;
+ return 0;
+ }
+ return -2;
+}
+
+/*!
+ * @brief AES_set_decrypt_key takes the "userKey" and computes it to an allowed AES_Decryption_Key "key" of size "bits"
+ * @param userKey
+ * @param bits
+ * @param key
+ * @return -1 if userKey or key is empty/nullptr
+ * @return 0 if decryption-key got succesfully computed
+ * @return -2 if bits didn't match 128 or 192 or 256 (allowed key sizes)
+ *
+ */
+int AES_set_decrypt_key (const unsigned char *userKey,
+ const int bits,
+ AES_KEY *key)
+ {
+ int nr;
+ AES_KEY temp_key;
+ __m128i *Key_Schedule = (__m128i*)key->KEY;
+ __m128i *Temp_Key_Schedule = (__m128i*)temp_key.KEY;
+
+ if (!userKey || !key)
+ return -1;
+ if (AES_set_encrypt_key(userKey,bits,&temp_key) == -2)
+ return -2;
+
+ nr = temp_key.nr;
+ key->nr = nr;
+
+ Key_Schedule[nr] = Temp_Key_Schedule[0];
+ Key_Schedule[nr-1] = _mm_aesimc_si128(Temp_Key_Schedule[1]);
+ Key_Schedule[nr-2] = _mm_aesimc_si128(Temp_Key_Schedule[2]);
+ Key_Schedule[nr-3] = _mm_aesimc_si128(Temp_Key_Schedule[3]);
+ Key_Schedule[nr-4] = _mm_aesimc_si128(Temp_Key_Schedule[4]);
+ Key_Schedule[nr-5] = _mm_aesimc_si128(Temp_Key_Schedule[5]);
+ Key_Schedule[nr-6] = _mm_aesimc_si128(Temp_Key_Schedule[6]);
+ Key_Schedule[nr-7] = _mm_aesimc_si128(Temp_Key_Schedule[7]);
+ Key_Schedule[nr-8] = _mm_aesimc_si128(Temp_Key_Schedule[8]);
+ Key_Schedule[nr-9] = _mm_aesimc_si128(Temp_Key_Schedule[9]);
+ if(nr>10){
+ Key_Schedule[nr-10] = _mm_aesimc_si128(Temp_Key_Schedule[10]);
+ Key_Schedule[nr-11] = _mm_aesimc_si128(Temp_Key_Schedule[11]);
+ }
+ if(nr>12){
+ Key_Schedule[nr-12] = _mm_aesimc_si128(Temp_Key_Schedule[12]);
+ Key_Schedule[nr-13] = _mm_aesimc_si128(Temp_Key_Schedule[13]);
+ }
+ Key_Schedule[0] = Temp_Key_Schedule[nr];
+ return 0;
+}
+
+
+#endif // AESNIKEYINIT_H
--
Gitblit v1.9.1