# 基于LWR的通用和模块化的密钥封装机制


 对于基于LWR的通用和模块化的密钥封装协议， 我们给出了`lwr_akcn` 算法程序在 Windows 和 Linux系统下的实现，实现代码保存在 参考实现文件夹中。 下面我们针对基于LWR的通用和模块化的密钥封装机制Windows版本算法程序的安装方法和目录结构进行介绍。


##  解决方案概述

 解决方案打包在KEM_AKCN_Windows.zip文件中，解压出KEM_AKCN_Windows目录。

> 注意：为了程序实现的方便，我们将基于LWE和LWR的方案在同一个项目中进行了实现，但这并不影响代码的运行，并且只需要在运行时指定参数就可以运行不同的方案。

## AKCN 目录结构

AKCN-KEX-Windows的目录结构为：

- build 构建程序目录，编译后的文件存于此目录 
- ipch vs2010工程目录 
- KEM-AKCN 算法AKCN-KE子项目工程目录 
- src 代码目录


## 代码文件


- [[./benchmark/get_time.c](./benchmark/get_time.c) 取时间函数linux的实现 
- [./benchmark/get_time.win32.c](./benchmark/get_time.win32.c) 取时间函数Windows的实现 
- [./benchmark/kem_benchmark.c](./benchmark/kem_benchmark.c) 基准性能测试的实现
- [./test/kem_test.c](./test/kem_test.c) 功能测试的实现
- [./test/util.c](./test/util.c) 二进制数据输出的实现
- [./common/common.c](./common/common.c) 通用函数实现
- [./crypto/aes/aes.c](./crypto/aes/aes.c) AES加密实现
- [./crypto/aes/aes_c.c](./crypto/aes/aes_c.c) 
- [./crypto/aes/aes_ni.c](./crypto/aes/aes_ni.c)
- [./crypto/rand/rand.c](./crypto/rand/rand.c) 随机算法实现
- [./crypto/rand_urandom_aesctr/rand_urandom_aesctr.c](./crypto/rand_urandom_aesctr/rand_urandom_aesctr.c)
- [./crypto/rand_urandom_chacha20/external/chacha20.c](./crypto/rand_urandom_chacha20/external/chacha20.c)
- [./crypto/rand_urandom_chacha20/rand_urandom_chacha20.c](./crypto/rand_urandom_chacha20/rand_urandom_chacha20.c)
- [./crypto/sha3/sha3.c](./crypto/sha3/sha3.c) 哈希函数实现
- [./kem/kem.c](./kem/kem.c) 协议标准流程实现
- [./kem_api/kem_api.c](./kem_api/kem_api.c) 外部接口调用实现
- [./kem_lwe_akcn/kem_lwe_akcn.c](./kem_lwe_akcn/kem_lwe_akcn.c) 
- [./kem_lwe_akcn/kem_lwe_akcn_macrify.c](./kem_lwe_akcn/kem_lwe_akcn_macrify.c)
- [./kem_lwe_akcn/lwe_akcn.c](./kem_lwe_akcn/lwe_akcn.c)
- [./kem_lwe_akcn/lwe_akcn_macrify.c](./kem_lwe_akcn/lwe_akcn_macrify.c)
- [./kem_lwe_akcn/lwe_akcn_noise.c](./kem_lwe_akcn/lwe_akcn_noise.c)
- [./kem_lwr_akcn/kem_lwr_akcn.c](./kem_lwr_akcn/kem_lwr_akcn.c)
- [./kem_lwr_akcn/kem_lwr_akcn_macrify.c](./kem_lwr_akcn/kem_lwr_akcn_macrify.c)
- [./kem_lwr_akcn/lwr_akcn.c](./kem_lwr_akcn/lwr_akcn.c)
- [./kem_lwr_akcn/lwr_akcn_macrify.c](./kem_lwr_akcn/lwr_akcn_macrify.c)
- [./kem_lwr_akcn/lwr_akcn_noise.c](./kem_lwr_akcn/lwr_akcn_noise.c)


## Windows 系统下安装运行说明

1. 请先安装vs2010,进行目录，双击KEM-AKCN.sln打开工程。
2. 编译生成测试程序kem_test.exe和kem_benchmark.exe位于build目录下
3. run_benchmark.bat 执行基准性能测试。 



## Windows 系统下测试

可执行程序位于build目录下，主要有以下两个可执行程序

- kem_test.exe 功能测试程序,根据显示操作
- kem_benchmark.exe 基准性能测试程序
- 基准性能测试， 需传参数，形式为 kem_lwe_akcn|kem_lwr_akcn time|cpu   num 
  - 第一个参数表示算法名称，这里为kem_lwe_akcn和kem_lwr_akcn
  - 第二个参数cpu表示测试CPU时钟周期，time表示测试平均耗时
  - 第三个参数 num 表示测试的次数

> 注意：在本项目中我们只需要对kem_lwr_akcn进行测试即可。