Comstackr openssl-fips sur Solaris10 x86

Je suis en train d’essayer de comstackr openssl-fips sur un ordinateur Solaris 10×86, et j’ai du mal à me connecter à fipscanister.o dans mon utilisation de la bibliothèque. Voici le problème qui apparaît lorsque je tente de créer un lien:

{PWD}/dist/openssl/bin/../lib/fipscanister.o: wrong ELF class: ELFCLASS64 

D’après ce que j’ai compris lors de mes recherches, le problème est le suivant: le fichier fipscanister.o a été compilé en tant que fichier binary 64 bits et il est lié à une bibliothèque 32 bits. J’ai essayé de suivre le problème dans ma compilation des openssl-fips. Voici la commande qui, à mon avis, est à l’origine du problème:

 ./config fipscanisterbuild 

C’est la partie de la sortie qui, je crois, est en train de tout gâcher:

 Configuring for solaris64-x86_64-gcc no-camellia [default] OPENSSL_NO_CAMELLIA (skip dir) no-gmp [default] OPENSSL_NO_GMP (skip dir) no-krb5 [krb5-flavor not specified] OPENSSL_NO_KRB5 no-mdc2 [default] OPENSSL_NO_MDC2 (skip dir) no-rc5 [default] OPENSSL_NO_RC5 (skip dir) no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir) no-seed [default] OPENSSL_NO_SEED (skip dir) no-zlib [default] no-zlib-dynamic [default] IsMK1MF=0 CC =gcc CFLAG =-fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM EX_LIBS =-lsocket -lnsl -ldl CPUID_OBJ =x86_64cpuid.o BN_ASM =x86_64-gcc.o x86_64-mont.o DES_ENC =des_enc.o fcrypt_b.o AES_ASM_OBJ =aes-x86_64.o BF_ENC =bf_enc.o CAST_ENC =c_enc.o RC4_ENC =rc4-x86_64.o RC5_ENC =rc5_enc.o MD5_OBJ_ASM =md5-x86_64.o SHA1_OBJ_ASM =sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o RMD160_OBJ_ASM= PROCESSOR = RANLIB =/usr/ccs/bin/ranlib ARFLAGS = PERL =/opt/csw/bin/perl SIXTY_FOUR_BIT_LONG mode DES_UNROLL used DES_INT used RC4_CHUNK is unsigned long BF_PTR2 used e_os2.h => include/openssl/e_os2.h 

Il y a plusieurs choses que je remarque ici:

  1. fipscanisterbuild détecte (à tort) que je travaille sur un solaris64-x86_64. Voici mon uname -a:

     SunOS hostname 5.10 Generic_147441-01 i86pc i386 i86pc 
  2. CFLAG a le -m64 dedans. Cela oblige fipscanister.o à comstackr en binary 64 bits

  3. A la fin, on dit le mode SIXTY_FOUR_BIT_LONG

J’ai essayé de le forcer à comstackr en tant que binary 32 bits avec les méthodes suivantes:

  1. J’ai d’abord essayé d’utiliser une variable env pour la forcer à comstackr en tant que binary 32 bits avec l’indicateur -m32

     export CC="gcc -m32" 
  2. J’ai également essayé de faire en sorte que le CFLAG utilise ma propre variable env avec la commande

     export CFLAG="gcc -m32" 

    mais en vain.

  3. J’ai essayé de faire en sorte que la configuration utilise mon architecture en changeant la commande

     ./config fipscanisterbuild 

    à

     ./Configure solaris-x86-gcc 

    et cela semblait fonctionner, au moins il a changé le mode SIXTY_FOUR_BIT_LONG en mode THIRTY_TWO_BIT. Cependant, quand j’ai compilé et essayé de créer un lien vers le fipscanister.o j’ai eu la même erreur ELFCLASS64.

Un côté des questions:

Pourquoi mon option fipscanister dans ./config fipscanister reconnaît-elle ma machine en tant que x86_64 lorsqu’il s’agit d’une machine 32 bits?

Je suis extrêmement coincé, donc ce serait formidable si quelqu’un pouvait nous éclairer sur ce problème très déconcertant.

Après quelques rotations des variables d’environnement, j’ai pu obtenir le sortingplet solaris-whatever-gcc en mode 32 bits ( THIRTY_TWO_BIT mode ).

Je ne suis pas sûr que ce soit attendu, et cela ressemble plus à un bogue dans le système de configuration d’OpenSSL (en particulier la partie SYSTEM="gcc" ).

Vous pourriez toujours avoir besoin de l’astuce CC=gcc -m32 .

 export KERNEL_BITS=32 export ARCH=x86 export MACHINE="solaris" export RELAEASE="10" export SYSTEM="gcc" export BUILD="Solaris; Solaris 10; x86" openssl-fips-2.0.5$ ./config Operating system: solaris-whatever-gcc Auto Configuring fipsonly Auto Configuring fipsonly Configuring for gcc Auto Configuring fipsonly Configuring for gcc no-bf [option] OPENSSL_NO_BF (skip dir) no-camellia [option] OPENSSL_NO_CAMELLIA (skip dir) no-cast [option] OPENSSL_NO_CAST (skip dir) no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir) no-gmp [default] OPENSSL_NO_GMP (skip dir) no-idea [option] OPENSSL_NO_IDEA (skip dir) no-jpake [experimental] OPENSSL_NO_JPAKE (skip dir) no-krb5 [krb5-flavor not specified] OPENSSL_NO_KRB5 no-md2 [option] OPENSSL_NO_MD2 (skip dir) no-md5 [option] OPENSSL_NO_MD5 (skip dir) no-mdc2 [option] OPENSSL_NO_MDC2 (skip dir) no-rc2 [option] OPENSSL_NO_RC2 (skip dir) no-rc4 [option] OPENSSL_NO_RC4 (skip dir) no-rc5 [option] OPENSSL_NO_RC5 (skip dir) no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir) no-ripemd [option] OPENSSL_NO_RIPEMD (skip dir) no-seed [option] OPENSSL_NO_SEED (skip dir) no-srp [forced] OPENSSL_NO_SRP (skip dir) no-ssl2 [forced] OPENSSL_NO_SSL2 (skip dir) no-ssl3 [forced] OPENSSL_NO_SSL3 (skip dir) no-store [experimental] OPENSSL_NO_STORE (skip dir) no-tls1 [forced] OPENSSL_NO_TLS1 (skip dir) no-tlsext [forced] OPENSSL_NO_TLSEXT (skip dir) no-zlib [default] no-zlib-dynamic [default] IsMK1MF=0 CC =gcc CFLAG =-DOPENSSL_FIPSCANISTER -O3 EX_LIBS = CPUID_OBJ =mem_clr.o BN_ASM =bn_asm.o DES_ENC =des_enc.o fcrypt_b.o AES_ENC =aes_core.o aes_cbc.o BF_ENC =bf_enc.o CAST_ENC =c_enc.o RC4_ENC =rc4_enc.o rc4_skey.o RC5_ENC =rc5_enc.o MD5_OBJ_ASM = SHA1_OBJ_ASM = RMD160_OBJ_ASM= CMLL_ENC =camellia.o cmll_misc.o cmll_cbc.o MODES_OBJ = ENGINES_OBJ = PROCESSOR = RANLIB =/usr/bin/ranlib ARFLAGS = PERL =/opt/local/bin/perl5 THIRTY_TWO_BIT mode BN_LLONG mode RC4_CHUNK is undefined ... 

Henry Unger sur la liste de diffusion OpenSSL a partagé les éléments suivants:

Pour créer une bibliothèque OpenSSL 32 bits sur Solaris 10 32 bits ou 64 bits à l’aide de gcc, nous faisons:

 export MACHINE=x86 export CC='gcc -m32' 

Après avoir exporté CC et MACHINE , lancez config .

Ok donc je l’ai corrigé je pense

Auparavant, j’utilisais cette commande:

 ./config fipscanisterbuild 

et j’avais essayé cette commande aussi

 ./Configure solaris-x86-gcc 

J’ai été en mesure de forcer configure à créer un fichier binary 32 bits avec les dépendances correctes en utilisant cette commande:

 ./Configure solaris-x86-gcc fipscanisterbuild 

Semblable à ce que dit jww, cette commande force Configure à identifier l’ordinateur en tant que machine solaris-x86 compilée sur gcc. La différence est que je ne quitte pas le Configure pour décider quelle architecture est la machine et pour append un drapeau pour montrer au compilateur ce que je veux, au lieu de cela je le fais utiliser le solaris-x86-gcc.