[openssl-users] POST Integrity test/fingerprint failure on 32-bit MIPS/R3000 with openssl-fips-2.0.5

Rohit Kaushal rohit.kaushal at gmail.com
Tue Jan 6 02:02:21 UTC 2015

I am working on a validation with a FIPS lab including algorithm testing
etc. and not claim any OpenSSL 2.0.5 FIPS certs.
For this, i have made minor changes to the fips-openssl-2.0.5 source
including the fips_test_suite.c file.
This (modified) fips_test_suite binary with fipscanister.o static linkage
runs fine on MIPS.
A cloned binary (my_fips_test_suite) linked via a FIPS capable libcrypto.so
(openssl-1.0.1j) fails.

This behavior is seen when compiled natively on MIPS or via a mipscross
toolchain (mipsisa32-xlr-linux).
The configure env on my (x86) build machine provides the necessary ARCH and
CC so CROSS_COMPILE isn't specified.
The incore allows the binary creation to compute the hmac-sha1 for
fipscanister and fips_premain.

The fipsopenssl objects get installed in /usr/local/ssl/fips-2.0 fine.
The fipscanister.o, fips_premain.c and their .sha1 files are copied to
/myinstall/usr/lib as the fipslibdir path prior to building openssl 1.0.1j.

-------- begin script for fipsopenssl
> cd openssl-fips-2.0.5
> export MACHINE=mips
> export SYSTEM=Linux
> export ARCH=mips
> export FIPS_SIG=/mysrc/openssl-fips-2.0.5/util/incore
> export HOSTCC=gcc
> ./config
> make
> make build_tests
> make build_algvs
-------- end script for fipsopenssl

-------- begin script for openssl
   ./config no-asm threads shared fips
   --prefix=/usr --install_prefix=/myinstall \
-------- end script for openssl

-------- begin cross compilation output for fipsopenssl
+ cd /mysrc/openssl-fips-2.0.5
+ export MACHINE=mips
+ MACHINE=mips
+ export SYSTEM=Linux
+ SYSTEM=Linux
+ export ARCH=mips
+ ARCH=mips
+ export FIPS_SIG=/mysrc/openssl-fips-2.0.5/util/incore
+ FIPS_SIG=/mysrc/openssl-fips-2.0.5/util/incore
+ export HOSTCC=gcc
+ HOSTCC=gcc
+ /mysrc/openssl-fips-2.0.5/config
Operating system: mips-whatever-linux2
Auto Configuring fipsonly
Configuring for linux-generic32

pointer -Wall
------- end cross compilation output for fipsopenssl

------- begin objdump on x86 build machine with MIPS cross compiler
-bash-3.2$ objdump -t fipscanister.o | grep  FIPS_ro
00000000 g     O .rodata        00000010 FIPS_rodata_start
0000ca40 g     O .rodata        00000010 FIPS_rodata_end
-bash-3.2$ objdump -t fipscanister.o | grep  FIPS_text
00000000 l     F .text  00000000 FIPS_text_startX
000578e0 l     F .text  00000000 FIPS_text_endX
00057900 g     F .text  00000000 FIPS_text_end
00000020 g     F .text  00000000 FIPS_text_start
-bash-3.2$ objdump -t libcrypto.so.1.0.1 | grep  FIPS_ro
001c4770 g     O .rodata        00000010              FIPS_rodata_start
001d11b0 g     O .rodata        00000010              FIPS_rodata_end
-bash-3.2$ objdump -t libcrypto.so.1.0.1 | grep  FIPS_text
0004a800 l     F .text  00000000              FIPS_text_startX
000a20e0 l     F .text  00000000              FIPS_text_endX
000a2100 g     F .text  00000000              FIPS_text_end
0004a820 g     F .text  00000000              FIPS_text_start
The .text offset differs by 0x0004a800 b/w libcrypto and fispcanister.o
The .rodata offset differs by 0x001c4770 b/w libcrypto and fispcanister.o

-bash-3.2$ objdump -t fipscanister.o | grep -i FIPS | wc
    776    4654   42131
-bash-3.2$ objdump -t libcrypto.so.1.0.1 | grep -i FIPS | wc
    787    4722   52864
The additional objdump output for libcrypto.so are...
00000000 l    df *ABS*  00000000              o_fips.c
00000000 l    df *ABS*  00000000              fips_ers.c
00200190 l     O .data  000001b0              FIPS_str_reasons
00200340 l     O .data  00000200              FIPS_str_functs
0020b540 l     O .data  00000004              fips_drbg_flags
0020b544 l     O .data  00000004              fips_drbg_type
00000000 l    df *ABS*  00000000              evp_fips.c
001359c4 g     F .text  00000000              RAND_set_fips_drbg_type
0004a6f0 g     F .text  00000000              ERR_load_FIPS_strings
0004a5b8 g     F .text  00000000              FIPS_mode_set
0004a580 g     F .text  00000000              FIPS_mode
001359e4 g     F .text  00000000              RAND_init_fips
0004a580 g     F .text  00000000              FIPS_mode
--------- end objdump on x86 build machine with MIPS cross compiler

--------- begin runtime output on MIPS target
1. Non-Approved cryptographic operation test...
                DRBG AES-256-CTR DF test started
                DRBG AES-256-CTR DF test OK
        a. Included algorithm (D-H)......successful
        POST started
                Integrity  test started
                Integrity  test Failed Incorrectly!!
        POST Failed
2. Automatic power-up self test...Failed!
--------- end runtime output on MIPS target
Happy to provide any details to get some guidance on what to debug or edit
for MIPS configure/incore ?
Thank you.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.opensslfoundation.net/pipermail/openssl-users/attachments/20150105/5fea9533/attachment.html>

More information about the openssl-users mailing list