2014-09-10 1 views
3

Я могу успешно (по крайней мере без предупреждений и с результирующими файлами .a) скомпилировать для arm7, x86_64 и i386.Неизвестный тип cpu при компиляции OpenSSL FIPS Поддерживаемые библиотеки для arm64 или arm7s

Когда я компилирую для arm64, я получаю Unknown cpu type 100000c, no adjustments made. Когда я компилирую для arm7s, я получаю Unknown cpu type 100000c, no adjustments made. Скрипт для этих двух архитектур, который модифицирован и использует сценарии среды от https://github.com/noloader/openssl-1.0.1i-ios, находится ниже, включая arm7, который работает, и arm7s и arm64, за которым следует хвост журнала для arm64. Сценарии успешно строят библиотеки non-fips перед изменением. контейнеры incore_macho и fips предварительно создаются и ссылаются на этот скрипт. Я создал канистры fips аналогичным образом, изменив инструкции из приложения IOS OpenSSL FIPS 2.0 User Guide, которое невероятно устарело и не работает само по себе. Как можно скомпилировать FIPS-совместимую библиотеку для этих двух платформ?

Edit:

Я вижу, что libssl.a и libcrypto.a фактически были созданы и имеют правильные архитектуры, но incore_macho возвращает идентичную Unknown cpu type ошибка.

Update:

Используя копию incore_macho, который обновляется для ARMv7 из @jww в https://github.com/noloader/incore_macho, теперь компилируется без ошибок для arm7s, так что я нахожусь теперь в предположении, что core_macho, возможно, потребуется обновлено для arm64. Это можно сделать?

sed -i "" 's|\"iphoneos-cross\"\,\"llvm-gcc\:-O3|\"iphoneos-cross\"\,\"clang\:-Os|g' Configure 
sed -i "" 's/CC= cc/CC= clang/g' Makefile.org 
sed -i "" 's/CFLAG= -O/CFLAG= -Os/g' Makefile.org 
sed -i "" 's/MAKEDEPPROG=makedepend/MAKEDEPPROG=$(CC) -M/g' Makefile.org 

export LANG=$OLD_LANG 
export CC=clang 
export IOS_INSTALLDIR="/usr/local/ssl/ios" 
unset OPENSSLDIR 

################################################################ 
# Third, build ARMv7 
echo "****************************************" 
THIS_ARCH=armv7 
unset CROSS_ARCH 

. ./setenv-ios-$THIS_ARCH.sh 
export HOSTCC=/usr/bin/cc 
export HOSTCFLAGS="-arch i386" 
export FIPS_SIG="/tmp/incore_macho" 

./config fips -no-ssl2 -no-ssl3 -no-asm -no-shared -no-hw -no-engine --with-fipsdir="/tmp/openssl fips-2.0.1-iOS-${THIS_ARCH}" --openssldir=$IOS_INSTALLDIR 
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.1 !" "Makefile" 
make clean 2>&1>/dev/null && make all 
mkdir $THIS_ARCH 
\cp ./libcrypto.a $THIS_ARCH/libcrypto.a 
\cp ./libssl.a $THIS_ARCH/libssl.a 

################################################################ 
# Fourth, build ARMv7s 
echo "****************************************" 
THIS_ARCH=armv7s 
unset CROSS_ARCH 

. ./setenv-ios-$THIS_ARCH.sh 
export HOSTCC=/usr/bin/cc 
export HOSTCFLAGS="-arch i386" 
export FIPS_SIG="/tmp/incore_macho" 

./config fips -no-ssl2 -no-ssl3 -no-asm -no-shared -no-hw -no-engine --with-fipsdir="/tmp/openssl-fips-2.0.1-iOS-${THIS_ARCH}" --openssldir=$IOS_INSTALLDIR 
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.1 !" "Makefile" 
make clean 2>&1>/dev/null && make all 
mkdir $THIS_ARCH 
\cp ./libcrypto.a $THIS_ARCH/libcrypto.a 
\cp ./libssl.a $THIS_ARCH/libssl.a 

################################################################ 
# Fifth, build ARM64 
#echo "****************************************" 
THIS_ARCH=arm64 
unset CROSS_ARCH 

. ./setenv-ios-$THIS_ARCH.sh 
export HOSTCC=/usr/bin/cc 
export HOSTCFLAGS="-arch i386" 
export FIPS_SIG="/tmp/incore_macho" 

./config fips -no-ssl2 -no-ssl3 -no-asm -no-shared -no-hw -no-engine --with-fipsdir="/tmp/openssl-fips-2.0.1-iOS-${THIS_ARCH}" --openssldir=$IOS_INSTALLDIR 
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.1 !" "Makefile" 
make clean 2>&1>/dev/null && make all 
mkdir $THIS_ARCH 
\cp ./libcrypto.a $THIS_ARCH/libcrypto.a 
\cp ./libssl.a $THIS_ARCH/libssl.a 

хвост выход для arm64:

shlib_target=; if [ -n "" ]; then \ 
     shlib_target="darwin-shared"; \ 
    elif [ -n "libcrypto" ]; then \ 
     FIPSLD_CC="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"; CC=/tmp/openssl-fips-2.0.1-iOS-arm64/bin/fipsld; export CC FIPSLD_CC; \ 
    fi; \ 
    LIBRARIES="-L.. -lssl -L.. -lcrypto" ; \ 
    make -f ../Makefile.shared -e \ 
     APPNAME=openssl OBJECTS="openssl.o verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o srp.o" \ 
     LIBDEPS="-Wl,-search_paths_first $LIBRARIES " \ 
     link_app.${shlib_target} 
(:; LIBDEPS="${LIBDEPS:--Wl,-search_paths_first -L.. -lssl -L.. -lcrypto }"; LDCMD="${LDCMD:-/tmp/openssl-fips-2.0.1-iOS-arm64/bin/fipsld}"; LDFLAGS="${LDFLAGS:--isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -miphoneos-version-min=7.1 -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch arm64 -Os -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -fomit-frame-pointer -fno-common -I/tmp/openssl-fips-2.0.1-iOS-arm64/include}"; LIBPATH=`for x in $LIBDEPS; do echo $x; done | sed -e 's/^ *-L//;t' -e d | uniq`; LIBPATH=`echo $LIBPATH | sed -e 's/ /:/g'`; LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH ${LDCMD} ${LDFLAGS} -o ${APPNAME:=openssl} openssl.o verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o srp.o ${LIBDEPS}) 
Unknown cpu type 100000c, no adjustments made 
+0

* «Неизвестный тип процессора» * - Я думаю, что проблема связана с подтипом CPU, а не с типом ЦП. В этом GitHub есть новый 'incore_macho', который распознает подтип и предоставляет более значимое сообщение об ошибке. У меня нет устройства ARM64 для тестирования, поэтому я не знаю наверняка, если изменения будут хорошими. noloader, gmail-аккаунт, вероятно, лучше всего скоординировать. – jww

+0

Спасибо. По состоянию на начало октября он не работал без тяжелой модификации. Мне бы очень хотелось услышать, если кто-нибудь заработает в новых версиях. –

+0

@PeterDeWeese Я знаю, что этот вопрос старый, но у вас все еще есть свои скрипты для компиляции версии opensl, совместимой с FIPS, для iOS для armv7 и arm64? – Bot

ответ

0

Я изменил тип процессора и раньше, так что это выполнимо. Вам также может потребоваться изменить настройку ЦП. Вам нужно добавить запись в cpu_adjustment [] в файле incore_macho.c и cputype

Я думаю, что для arm64 это CPU_SUBTYPE_ARM64_V8 Я не знаю настройки. Пожалуйста, дайте нам знать, если вы получите эту работу

3

Это будет работать, если вы добавите это cpu_adjustment []

CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_ALL, 12, 12 , 

Для справки:

#define CPU_ARCH_ABI64 0x01000000  /* 64 bit ABI */ 

#define CPU_TYPE_ARM64   (CPU_TYPE_ARM | CPU_ARCH_ABI64) 

/* 
* ARM64 subtypes 
*/ 
#define CPU_SUBTYPE_ARM64_ALL   ((cpu_subtype_t) 0) 

Поиск регулировки было весело. ;-)

+0

Спасибо. Очень круто. Будет ли это отменять соответствие FIPS? –

+0

@PeterDeWeese - Я не верю, что это приведет к аннулированию проверки. Исходный код для * FIPS Object Module * секвестрирован, и вы можете его модифицировать. Процедура построения * FIPS Object Module * также является жесткой и не может быть изменена. Тем не менее, вам разрешено модифицировать поддерживающие файлы по причине, например 'fipsld' и' incore_macho'. * «В пределах разумности» * субъективен и открыт для интерпретации, но это фактически означает, что вы не оказываете неблагоприятного воздействия на * FIPS Object Module *. В нем есть вопрос о списке рассылки пользователей OpenSSL, но на данный момент я не могу найти его. – jww

+0

Прохладный. Однако я не мог пройти проверку после добавления или изменения архитектур. –