2012-06-12 34 views
1

我正在研究一个android项目,该项目要求应用程序中存在的加密库经过FIPS认证。据我所知,没有FIPS验证的JAVA安全库。布西城堡很好,但没有验证。在阅读了一些论坛帖子后,我发现OpenSSL的FIPS模块可以在NDK的帮助下使用。构建用于android的FIPS模块

现在我正在尝试为Android构建fips-openssl模块,为此我创建了用于交叉编译的环境变量的脚本。

我在这个项目中使用了openssl-fips和ndk-r8。我跟着我在google上找到的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 

当做这使得这是我得到的错误。

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

“据我所知,没有FIPS兼容的JAVA安全库” - 不正确。例如,RSA Data Security的[BSAFE](http://www.emc.com/security/rsa-bsafe.htm)已通过FIPS验证。 – jww

回答

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/"; 
+0

空白空间是一个错字。我添加了路径,但仍然收到相同的错误。它看起来像编译器“arm-linux-androideabigcc”已经在libexec目录中。 我跑了“arm-linux-androideabigcc -print-search-dirs”,我看到diretory存在。 谢谢 – feverDream

0

现在我正在尝试为Android构建fips-openssl模块,为此我创建了用于交叉编译的环境变量的脚本。

如果您有兴趣,OpenSSL为Android提供了一个脚本。你可以在OpenSSL wiki上找到它:FIPS Library and Android


做化妆的时候,这是错误,我得到:

arm-linux-androideabi-gcc: error trying to exec 'cc1'

它看起来像你的PATH不包括交叉编译工具链。

你是如何调用脚本的?您需要包含一个前导点(“。”)以确保将更改应用于当前shell(而不是执行该脚本的子shell(仅退出))。

这是OpenSSL的Android构建程序的第一步,位于FIPS Library and 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} /工具链/ arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3 /“

我没有相信这是必要的。


出口ANDROID_NDK = “〜/安卓/ Android的NDK-R8”

据到Android NDK用户名单上的人,你应该同时设置ANDROID_NDK_ROOTANDROID_SDK_ROOT。各种NDK和SDK工具使用这些环境变量。我想为你的安装SDK值将是"~/Android/android-sdk"

有关详细信息,请参阅Recommended NDK Directory?。我想你应该使用ANDROID_SYSROOT。它未被NDK或SDK工具使用;相反,它由OpenSSL使用,并在编译期间作为sysroot传递。