UADK (User space Accelerator Development Kit), is a user space framework for using accelerators. Active branch is 'master'.
C
57
1,049 commits
updated Sep 17, 2026
UADK(User Space Accelerator Development Kit)是一个为用户应用程序提供硬件加速器访问能力的统一框架 1 。它抽象了硬件特定的细节,提供一致的API接口,使开发者能够轻松利用专用硬件加速器进行加密、压缩和数据处理操作,而无需管理硬件交互的复杂性 2 。
| 类别 | 算法 |
|---|---|
| 对称加密 | AES (ECB, CBC, CTR, XTS, OFB, CFB), SM4, DES, 3DES |
| 消息认证 | SHA1, SHA224, SHA256, SHA384, SHA512, SM3, MD5, AES-XCBC, AES-CMAC, AES-GMAC |
| 认证加密 | AES-GCM, SM4-GCM, AES-CCM, SM4-CCM |
| 公钥加密 | RSA, DH, ECC, SM2, X25519, X448 |
| 算法 | 描述 |
|---|---|
| zlib | 带zlib包装的DEFLATE |
| gzip | 带gzip包装的DEFLATE |
| deflate | 原始DEFLATE, lz77_zstd和zstd使用的LZ77算法 |
# 克隆仓库
git clone https://github.com/Linaro/uadk.git
cd uadk
# 配置和编译
./autogen.sh
./configure
make
# 安装
sudo make install
#include <wd_comp.h>
int main() {
// 初始化压缩库
struct wd_ctx_config config;
struct wd_sched sched;
wd_comp_init(&config, &sched);
// 分配会话
handle_t sess = wd_comp_alloc_sess(&setup);
// 执行压缩
wd_do_comp_sync(sess, &req);
// 清理资源
wd_comp_free_sess(sess);
wd_comp_uninit();
return 0;
}
#include <wd_comp.h>
int compress_data(struct wd_comp_sess_setup setup,
const char* input, size_t input_len,
char* output, size_t* output_len) {
struct wd_comp_req req;
handle_t sess;
int ret;
// 初始化请求
memset(&req, 0, sizeof(req));
req.src = (void*)input;
req.src_len = input_len;
req.dst = output;
req.dst_len = *output_len;
req.data_fmt = WD_FLAT_BUF;
req.op_type = WD_DIR_COMPRESS;
req.alg_type = WD_ZLIB;
// 分配会话并执行压缩
sess = wd_comp_alloc_sess(&setup);
ret = wd_do_comp_sync(sess, &req);
*output_len = req.dst_len;
wd_comp_free_sess(sess);
return ret;
}
#include <wd_cipher.h>
int encrypt_data(struct wd_cipher_sess_setup setup,
const void* plaintext, size_t len,
void* ciphertext, const void* key) {
struct wd_cipher_req req;
handle_t sess;
int ret;
// 设置加密请求
memset(&req, 0, sizeof(req));
req.src = (void*)plaintext;
req.src_len = len;
req.dst = ciphertext;
req.dst_len = len;
req.iv = iv;
req.iv_len = 16;
req.key = (void*)key;
req.key_len = 32;
req.alg = WD_CIPHER_AES;
req.mode = WD_CIPHER_CBC;
// 执行加密
sess = wd_cipher_alloc_sess(&setup);
ret = wd_do_cipher_sync(sess, &req);
wd_cipher_free_sess(sess);
return ret;
}
UADK 提供了完整的性能测试工具uadk_tool:
# 运行压缩性能测试
uadk_tool benchmark --alg zlib --mode sva --opt 0 --sync --pktlen 4096 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch
# 运行加密性能测试
uadk_tool benchmark --alg aes-128-ecb --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch
# 其它测试命令查询
uadk_tool benchmark --help
我们欢迎社区贡献!请遵循以下步骤:
// ✅ 正确的头文件顺序
#include <stddef.h> // 系统头文件
#include <string.h> // 系统头文件
#include <wd.h> // 库头文件
#include <wd_comp.h> // 库头文件
#include "wd_internal.h" // 内部头文件
// ✅ 正确的结构体定义
struct my_struct {
int arg1;
int arg2;
};
本项目采用 Apache License 2.0 许可证。详情请参见 LICENSE 文件。
感谢所有为 UADK 项目做出贡献的开发者和社区成员!
C
95.6%
Assembly
3.5%
UADK (User space Accelerator Development Kit), is a user space framework for using accelerators. Active branch is 'master'.
C
57
1,049 commits
updated Sep 17, 2026
UADK(User Space Accelerator Development Kit)是一个为用户应用程序提供硬件加速器访问能力的统一框架 1 。它抽象了硬件特定的细节,提供一致的API接口,使开发者能够轻松利用专用硬件加速器进行加密、压缩和数据处理操作,而无需管理硬件交互的复杂性 2 。
| 类别 | 算法 |
|---|---|
| 对称加密 | AES (ECB, CBC, CTR, XTS, OFB, CFB), SM4, DES, 3DES |
| 消息认证 | SHA1, SHA224, SHA256, SHA384, SHA512, SM3, MD5, AES-XCBC, AES-CMAC, AES-GMAC |
| 认证加密 | AES-GCM, SM4-GCM, AES-CCM, SM4-CCM |
| 公钥加密 | RSA, DH, ECC, SM2, X25519, X448 |
| 算法 | 描述 |
|---|---|
| zlib | 带zlib包装的DEFLATE |
| gzip | 带gzip包装的DEFLATE |
| deflate | 原始DEFLATE, lz77_zstd和zstd使用的LZ77算法 |
# 克隆仓库
git clone https://github.com/Linaro/uadk.git
cd uadk
# 配置和编译
./autogen.sh
./configure
make
# 安装
sudo make install
#include <wd_comp.h>
int main() {
// 初始化压缩库
struct wd_ctx_config config;
struct wd_sched sched;
wd_comp_init(&config, &sched);
// 分配会话
handle_t sess = wd_comp_alloc_sess(&setup);
// 执行压缩
wd_do_comp_sync(sess, &req);
// 清理资源
wd_comp_free_sess(sess);
wd_comp_uninit();
return 0;
}
#include <wd_comp.h>
int compress_data(struct wd_comp_sess_setup setup,
const char* input, size_t input_len,
char* output, size_t* output_len) {
struct wd_comp_req req;
handle_t sess;
int ret;
// 初始化请求
memset(&req, 0, sizeof(req));
req.src = (void*)input;
req.src_len = input_len;
req.dst = output;
req.dst_len = *output_len;
req.data_fmt = WD_FLAT_BUF;
req.op_type = WD_DIR_COMPRESS;
req.alg_type = WD_ZLIB;
// 分配会话并执行压缩
sess = wd_comp_alloc_sess(&setup);
ret = wd_do_comp_sync(sess, &req);
*output_len = req.dst_len;
wd_comp_free_sess(sess);
return ret;
}
#include <wd_cipher.h>
int encrypt_data(struct wd_cipher_sess_setup setup,
const void* plaintext, size_t len,
void* ciphertext, const void* key) {
struct wd_cipher_req req;
handle_t sess;
int ret;
// 设置加密请求
memset(&req, 0, sizeof(req));
req.src = (void*)plaintext;
req.src_len = len;
req.dst = ciphertext;
req.dst_len = len;
req.iv = iv;
req.iv_len = 16;
req.key = (void*)key;
req.key_len = 32;
req.alg = WD_CIPHER_AES;
req.mode = WD_CIPHER_CBC;
// 执行加密
sess = wd_cipher_alloc_sess(&setup);
ret = wd_do_cipher_sync(sess, &req);
wd_cipher_free_sess(sess);
return ret;
}
UADK 提供了完整的性能测试工具uadk_tool:
# 运行压缩性能测试
uadk_tool benchmark --alg zlib --mode sva --opt 0 --sync --pktlen 4096 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch
# 运行加密性能测试
uadk_tool benchmark --alg aes-128-ecb --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch
# 其它测试命令查询
uadk_tool benchmark --help
我们欢迎社区贡献!请遵循以下步骤:
// ✅ 正确的头文件顺序
#include <stddef.h> // 系统头文件
#include <string.h> // 系统头文件
#include <wd.h> // 库头文件
#include <wd_comp.h> // 库头文件
#include "wd_internal.h" // 内部头文件
// ✅ 正确的结构体定义
struct my_struct {
int arg1;
int arg2;
};
本项目采用 Apache License 2.0 许可证。详情请参见 LICENSE 文件。
感谢所有为 UADK 项目做出贡献的开发者和社区成员!
C
95.6%
Assembly
3.5%