Linux 2.6.38 User-space interface for Crypto API
来源:互联网 发布:数据库物理设计阶段 编辑:程序博客网 时间:2024/05/22 11:30
origin: http://blog.yufeng.info/archives/1150
Linux内核里面自带非常多的加密模块,这是模块经过调优性能非常高, 而且现在又很多硬件本身支持加密功能,比如intel的CPU支持AES加密指令,那些内核的那帮人知道更好如何利用这些硬件更快的完成加密功能的, 他们写的这些硬件的驱动在drivers/crypto目录里. 所以如果我们能在用户空间的应用程序中用到这些加密库有二个好处: 1. 无须再造轮子. 2. 性能高.
幸运的是2.6.38的内核给我们带来了这些功能. 这些功能是通过socket方式暴露的,思路非常独特优雅,同时由于支持gather write, scatter read, 无须拷贝数据,性能应该非常高.
具体可以参考底下材料:
User-space interface for Crypto API : 这里, 这里
在ubuntu10.10下安装新的内核2.6.38, 参考这里
安装完了系统,我们可以演示下如何使用新的API调用:
$ uname -r2.6.38-yufeng$ cat /etc/lsb-release DISTRIB_ID=UbuntuDISTRIB_RELEASE=10.10DISTRIB_CODENAME=maverickDISTRIB_DESCRIPTION="Ubuntu 10.10"$ cat > example.c#include <stdio.h>#include <sys/socket.h>#include <linux/if_alg.h>#ifndef AF_ALG#define AF_ALG 38#define SOL_ALG 279#endifint main(void){int opfd;int tfmfd;struct sockaddr_alg sa = {.salg_family = AF_ALG,.salg_type = "hash",.salg_name = "sha1"};char buf[20];int i;tfmfd = socket(AF_ALG, SOCK_SEQPACKET, 0);bind(tfmfd, (struct sockaddr *)&sa, sizeof(sa));opfd = accept(tfmfd, NULL, 0);write(opfd, "abc", 3);read(opfd, buf, 20);for (i = 0; i < 20; i++) {printf("%02x", (unsigned char)buf[i]);}printf("\n");close(opfd);close(tfmfd);return 0;}CTRL+D$ cd /usr/src/linux-2.6.38 && make headers_install INSTALL_HDR_PATH=~ && cd ~$ gcc -I include example.c$ ./a.out 687b37ba3c7f0000100940000000000000000000
玩得开心!
0 0
- Linux 2.6.38 User-space interface for Crypto API
- Linux Kernel(Android) 加密算法总结(二)- A netlink-based user-space crypto API
- Linux Kernel(Android) 加密算法总结(二)- A netlink-based user-space crypto API
- API-user Interface翻译
- Crypto API (Linux)
- Crypto++ for linux
- /dev/crypto for Linux
- Android API Guides---User Interface
- User Interface Design for Programmers
- Linux callstack 使用 [User space]
- Android API Guide 之 User Interface笔记
- Android API Guide 之 User Interface笔记
- Android API Guides——User Interface
- GNU Pth for User-Space Context
- User Interface Design for Mere Mortals
- Linux-System-Call and User Space
- Controlling GPIO from Linux User Space
- Design Patterns for User Interface for Mobile Applications
- Oracle使用spool命令导出文本文件
- Linux 命令大全
- JMeter分布式测试
- 南阳理工学院-n-1位数
- 免费公开课:讲解文档集成组件Aspose,分享扫描识别开发案例
- Linux 2.6.38 User-space interface for Crypto API
- unity VR Unet 多人互联的实现 以及unet组件的的坑
- a series of Fourier
- 总结和分析几种判断RecyclerView到达底部的方法
- shell脚本 set 选项
- 使用FTPClient构造自己的FTP类
- 将SVG 图引入到HTML页面
- listview 多布局 根据type加载
- Flask + Gunicorn + Nginx 部署