From 8178e71bce4b5c149857dd756eca137899b4f3a3 Mon Sep 17 00:00:00 2001
From: zhanmingkan <496160012@qq.com>
Date: 星期一, 11 五月 2026 13:51:14 +0800
Subject: [PATCH] 提交
---
aesni-enc-cbc.h | 67 +++++++++++++++++++++++++++++++++
1 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/aesni-enc-cbc.h b/aesni-enc-cbc.h
new file mode 100644
index 0000000..f3aaed0
--- /dev/null
+++ b/aesni-enc-cbc.h
@@ -0,0 +1,67 @@
+#ifndef AESNIENCCBC_H
+#define AESNIENCCBC_H
+
+#include <chrono>
+#include <iostream>
+#include <wmmintrin.h>
+
+namespace {
+
+void AES_CBC_encrypt(const unsigned char *in,
+ unsigned char *out,
+ unsigned char ivec[16],
+ unsigned long length,
+ const char *key,
+ int number_of_rounds)
+{
+ __m128i feedback,data;
+ unsigned long i;
+ int j;
+
+ if (length%16)
+ length = length/16+1;
+ else length /=16;
+
+ feedback=_mm_loadu_si128 ((__m128i*)ivec);
+ for(i=0; i < length; i++) {
+ data = _mm_loadu_si128 (&((__m128i*)in)[i]);
+ feedback = _mm_xor_si128 (data,feedback);
+ feedback = _mm_xor_si128 (feedback,((__m128i*)key)[0]);
+ for(j=1; j <number_of_rounds; j++)
+ feedback = _mm_aesenc_si128 (feedback,((__m128i*)key)[j]);
+ feedback = _mm_aesenclast_si128 (feedback,((__m128i*)key)[j]);
+ _mm_storeu_si128 (&((__m128i*)out)[i],feedback);
+ }
+}
+
+void AES_CBC_decrypt(const unsigned char *in,
+ unsigned char *out,
+ unsigned char ivec[16],
+ unsigned long length,
+ const char *key,
+ int number_of_rounds)
+{
+ __m128i data,feedback,last_in;
+ unsigned long i;
+ int j;
+ if (length%16)
+ length = length/16+1;
+ else length /=16;
+ feedback=_mm_loadu_si128 ((__m128i*)ivec);
+ for(i=0; i < length; i++) {
+ last_in=_mm_loadu_si128 (&((__m128i*)in)[i]);
+ data = _mm_xor_si128 (last_in,((__m128i*)key)[0]);
+ for(j=1; j <number_of_rounds; j++) {
+ data = _mm_aesdec_si128 (data,((__m128i*)key)[j]);
+ }
+ data = _mm_aesdeclast_si128 (data,((__m128i*)key)[j]);
+ data = _mm_xor_si128 (data,feedback);
+ _mm_storeu_si128 (&((__m128i*)out)[i],data);
+ feedback=last_in;
+ }
+}
+
+
+}
+
+#endif // AESNIENCCBC_H
--
Gitblit v1.9.1