Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口

Linux Kernel(Android) 加密算法总结(cipher、compress、digest)文章中,介绍了如何在内核中加入三种不同类型的内核加密算法, 并给出了在内核模块中如何调用他们的实例。

本文将主要介绍,如何在应用程序空间中(user space) 调用内核空间(kernel space)加密模块提供的加密算法API。

方法一:通过调用crypto: af_alg - User-space interface for Crypto API, Herbert Xu <[email protected]> 2010年,给内核2.6.X 接口实现

具体情况请参考Linux Kernel(Android) 加密算法总结(二)- A netlink-based user-space crypto API

下面根据以上方法实现应用程序调用内核加密算法接口示例:

该方法经过在内核层实现与CPU加密模块,或者硬件加密卡对接,并为上层应用程序提供接口的方式,可以实现硬件加密。

应用程序调用内核 hash

hash.c

<span style="font-size:18px;">#include <stdio.h>
#include <sys/socket.h>
#include <linux/if_alg.h>

#ifndef AF_ALG
#define AF_ALG 38
#define SOL_ALG 279
#endif

int 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;
}</span>

Andrid.mk

<span style="font-size:18px;">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := testhash

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES :=     hash.c

include $(BUILD_EXECUTABLE)</span>

编译完成后在

adb push testhash /system/bin/

adb shell chmod a+x /system/bin/testhash

adb shell testhash

验证输出结果.

时间: 2024-10-19 06:14:38

Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口的相关文章

Linux Kernel(Android) 加密算法总结(四)-应用程序调用OpenSSL加密算法

Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口 讲到了如何调用内核中的接口的方法. 本节主要是介绍如何Android C/C++应用程序调用Openssl的AES加密算法. crypt_ssl.c #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <aes.h> #include

Linux Kernel(Android) 加密算法总结(cipher、compress、digest)

1. Linux内核支持哪些加密算法 ? 内核支持的加密算法很多,包括: 对称加密算法,如AES: 摘要算法,如sha1,md5: 压缩算法,如deflate. 不过内核好像不支持非对称加密算法. 2. 加密算法源文件位置 这些算法作为加密函数框架的最底层,提供加密和解密的实际操作.这些函数可以在内核crypto文件夹下,相应的文件中找到. 3.  配置编译选项将加密算法作为模块编入内核 Cryptographic options 加密选项 Cryptographic API 提供核心的加密AP

android定义可以被其他程序调用的activity

在测试android调用其他应用的activity时,提示找不到对于的activity,经过检查发现在intent-filter的<category>中忘了写<category android:name="android.intent.category.DEFAULT"/>,自己定义的filter一定要写上这句,这是android默认添加的要求. android定义可以被其他程序调用的activity

在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选

android 系统构架和应用程序目录结构分析

一.Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层. Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的. Linux 内核是硬件和软件层之间的抽象层. 中间件 中间件包括两部分:核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManage

android native HAL程序 java程序 linux kernel打印调用栈的方法

android native HAL程序 java程序 linux kernel打印调用栈的方法 关于android java打出调用栈的方法 1)方法一:refs:frameworks/base/services/java/com/android/server/ActivityManagerService.javastartProcessLocked(){Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "amProcessStart&quo

编译android的linux kernel goldfish

https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/android-4.2.2/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:${PATH} $ export ARCH=arm $ export SUBARCH=arm $ export CROSS_COMPILE=arm-eabi- $ make ARCH=arm g

Android 系统内核层(Linux Kernel)

Android 内核具有和标准 Linux 内核一样的功能,主要实现了内存管理.进程调度.进程间通信等功能.但在文件系统.进程间通信.内存管理等方面存在差异. 1.文件系统.移动设备采用的大多不是硬盘而是 Flash 作为存储介质,因此,Android 内核中增加了标准 Linux 专用于 Flash 的文件系统 YAFFS2(Yet Another Flash File System).YAFFS2 是基于 NAND flash 日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外

Android linux kernel privilege escalation vulnerability and exploit (CVE-2014-4322)

In this blog post we'll go over a Linux kernel privilege escalation vulnerability I discovered which enables arbitrary code execution within the kernel. The vulnerability affected all devices based on Qualcomm chipsets (that is, based on the "msm&quo