2012-06-12 5 views
1

Я работаю над проектом android, который требует, чтобы криптографические библиотеки, присутствующие в приложении, были сертифицированы FIPS. Насколько я знаю, нет проверенных FIPS библиотек безопасности JAVA. Замок Буси хорош, но не подтвержден. Прочитав некоторые сообщения на форуме, я узнал, что модуль FIPS OpenSSL можно использовать с помощью NDK.Building FIPS module for android

Прямо сейчас я пытаюсь создать модуль fips-openssl для Android, чтобы сделать это, я создал скрипт для переменных окружения для кросс-компиляции.

Я использую openssl-fips и ndk-r8 для этого проекта. Я следил за fips guideline Я нашел в google. Надеюсь, это даст четкое представление о том, что я пытаюсь сделать.

#! /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

«Насколько я знаю, нет библиотек безопасности JAVA, совместимых с FIPS» - не верно. Например, 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

Пустое пространство было typo.I добавил путь, но я все равно получаю ту же ошибку. Кажется, что компилятор «arm-linux-androideabigcc» уже ищет в каталоге libexec. Я запустил «arm-linux-androideabigcc -print-search-dirs», и я вижу, что в нем присутствует указатель. Спасибо – feverDream

0

Сейчас я пытаюсь создать модуль fips-openssl для Android, чтобы сделать это, я создал скрипт для переменных окружения для кросс-компиляции.

OpenSSL предоставляет скрипт для Android, если вы заинтересованы. Вы можете найти его на вики OpenSSL: FIPS Library and Android.


при выполнении сделайте это ошибка, что я получаю:

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

Похоже, ваш PATH не включает в себя кросс-компиляции набора инструментов.

Как вы ссылаетесь на сценарий? Вам нужно включить ведущую точку ("."), Чтобы гарантировать, что изменения будут применены к текущей оболочке (а не под-оболочке, которая выполняет скрипт (который просто выходит)).

Вот первый шаг процедур сборки 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}/компилированные инструменты/арм-линукс-androideabi-4.4.3/прекомпилированное/Linux-x86/libexec/ССАГПЗ/рычажного линукс-androideabi/4.4.3 /»

Я не полагайте, что это необходимо.


экспорт ANDROID_NDK = "~/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 во время компиляции.