我正在开发一个Android项目,该项目要求应用程序中存在的加密库经过FIPS认证。据我所知,没有FIPS验证的JAVA安全库。 Boucy城堡很好,但没有经过验证。在阅读了一些论坛帖子后,我发现OpenSSL的FIPS模块可以在NDK的帮助下使用。
现在我正在尝试为Android构建fips-openssl模块,为此我创建了一个用于交叉编译的环境变量的脚本。
我正在使用openssl-fips和ndk-r8来完成这个项目。我按照我在谷歌上找到的fips guideline。我希望这能清楚地说明我想要做的事情。
#! /bin/sh
export ANDROID_NDK="~/Android/android-ndk-r8"
export FIPS_SIG="${ANDROID_NDK}/incore"
export GCC_C1="/usr/lib/gcc/i686-pc-linux-gnu/4.7.0/"
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";
export MACHINE=armv71
export ARCH=arm.
export CROSS_COMPILE="arm-linux-androideabi-"
export SYSTEM=android
#export RELEASE=2.6.32.GMU
export ANDROID_DEV="$ANDROID_NDK/platforms/android-14/arch-arm/usr"
export HOSTCC=/usr/bin/gcc
在做make时这是我得到的错误。
arm-linux-androideabi-gcc: error trying to exec 'cc1': execvp: No such file or directory
make[1]: *** [cryptlib.o] Error 1
make[1]: Leaving directory `/home/abhiram/fips/openssl-fips-1.2.3/crypto'
make: *** [build_crypto] Error 1
当我执行“查找”时,cc1可执行文件存在于此特定目录中。
find . -name cc1
./toolchains/mipsel-linux-android-4.4.3/prebuilt/linux-x86/libexec/gcc/mipsel-linux-android/4.4.3/cc1
./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/cc1
./toolchains/x86-4.4.3/prebuilt/linux-x86/libexec/gcc/i686-android-linux/4.4.3/cc1
答案 0 :(得分:3)
看起来问题出在导出语句中,有一个空格,其中短划线应该在PATH行中。改变这个:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi 4.4.3/prebuilt/linux-x86/bin";
到此:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";
此外,您的查找显示cc1可执行文件不在路径中,因此也将其位置添加到路径导出中:
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin":"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/";
答案 1 :(得分:0)
现在我正在尝试为Android构建fips-openssl模块,为此我创建了一个用于交叉编译的环境变量的脚本。
如果您有兴趣,OpenSSL会为Android提供脚本。您可以在OpenSSL wiki上找到它:FIPS Library and Android。
在做make时这是我得到的错误:
arm-linux-androideabi-gcc: error trying to exec 'cc1'
看起来您的PATH
不包含交叉编译工具链。
你是如何调用脚本的?您需要包含一个前导点(“。”)以确保更改应用于当前shell(而不是执行脚本的子shell(它只是退出))。
这是'位于FIPS Library and Android的OpenSSL Android构建过程的第一步。注意前导点:
$ . .setenv-android.sh
运行脚本的结果设置了OpenSSL构建系统使用的一堆变量:
$ . ./setenv-android.sh
ANDROID_NDK_ROOT: /opt/android-ndk-r9
ANDROID_EABI: arm-linux-androideabi-4.6
ANDROID_API: android-14
ANDROID_SYSROOT: /opt/android-ndk-r9/platforms/android-14/arch-arm
ANDROID_TOOLCHAIN: /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin
FIPS_SIG:
CROSS_COMPILE: arm-linux-androideabi-
ANDROID_DEV: /opt/android-ndk-r9/platforms/android-14/arch-arm/usr
“$ {ANDROID_NDK} /toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3 /”
我不相信这是必要的。
导出ANDROID_NDK =“〜/ Android / android-ndk-r8”
根据Android NDK用户列表中的人员,您应该同时设置ANDROID_NDK_ROOT
和ANDROID_SDK_ROOT
。各种NDK和SDK工具使用这些环境变量。我认为您的安装的SDK值为"~/Android/android-sdk"
。
有关详细信息,请参阅Recommended NDK Directory?。
我也认为你应该使用ANDROID_SYSROOT
。它不被NDK或SDK工具使用;相反,它由OpenSSL使用,并在编译期间作为sysroot
传递。