MicrochipTech / mbedtls-examples

8 stars 10 forks source link

compilation failure during build of officially released mbedtls integration #10

Open vishalSpintly opened 2 years ago

vishalSpintly commented 2 years ago

Hello,

We have a Raspberry Pi platform with an ATECC608A connected over I2C. We intend to use it to store the private keys securely. The use case is to be able to connect to AWS IOT Core service, over a TLS connection.

In these regards, the mbedTLS library ( integrated with the ATECC608 cryptoAuth Library) is perfectly suited for my use case. So, I downloaded the sources from https://github.com/MicrochipTech/mbedtls-examples and followed the instructions for compilation and usage as listed in the Wiki.

However when I try to build them, I get compilation errors as listed below. This is not expected as I have followed instructions as listed and should be able to compile and use the library in my application with just a simple configuration change in initialisation for use with I2C interface in the test programs ( atcab_init(&cfg_ateccx08a_i2c_default))); )

Here is the detailed log of my compile process ( following the wiki guidelines ), for your reference:

pi@gateway:~/mbedTLS/mbedtls-examples/build$ cmake ../build/ -- Configuring done -- Generating done -- Build files have been written to: /home/pi/mbedTLS/mbedtls-examples/build pi@gateway:~/mbedTLS/mbedtls-examples/build$ make [ 1%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atca_cfgs.c.o [ 1%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atca_command.c.o [ 2%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atca_device.c.o [ 3%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atca_execution.c.o [ 3%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atca_iface.c.o [ 4%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_client.c.o [ 5%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_date.c.o [ 5%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_def.c.o [ 6%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_der.c.o [ 7%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_host_hw.c.o [ 7%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_host_sw.c.o [ 8%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/atcacert/atcacert_pem.c.o [ 9%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic.c.o [ 9%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_aes.c.o [ 10%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_aes_cbc.c.o [ 11%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_aes_cmac.c.o [ 11%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_aes_ctr.c.o [ 12%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_aes_gcm.c.o [ 13%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_checkmac.c.o [ 13%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_counter.c.o [ 14%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_derivekey.c.o [ 15%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_ecdh.c.o [ 15%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_gendig.c.o [ 16%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_genkey.c.o [ 17%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_hmac.c.o [ 17%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_info.c.o [ 18%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_kdf.c.o [ 19%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_lock.c.o [ 19%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_mac.c.o [ 20%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_nonce.c.o [ 21%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_privwrite.c.o [ 22%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_random.c.o [ 22%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_read.c.o [ 23%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_secureboot.c.o [ 24%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_selftest.c.o [ 24%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_sha.c.o [ 25%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_sign.c.o [ 26%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_updateextra.c.o [ 26%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_verify.c.o [ 27%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_basic_write.c.o [ 28%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/basic/atca_helpers.c.o [ 28%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/atca_crypto_sw_ecdsa.c.o [ 29%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/atca_crypto_sw_rand.c.o [ 30%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/atca_crypto_sw_sha1.c.o [ 30%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/atca_crypto_sw_sha2.c.o [ 31%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/hashes/sha1_routines.c.o [ 32%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/crypto/hashes/sha2_routines.c.o [ 32%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/host/atca_host.c.o [ 33%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/jwt/atca_jwt.c.o [ 34%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/hal/atca_hal.c.o [ 34%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/hal/hal_linux_timer.c.o [ 35%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/mbedtls/atca_mbedtls_ecdh.c.o In file included from /home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_ecdh.c:39: /home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_wrap.h:38:33: warning: �‘struct mbedtls_pk_context�’ declared inside parameter l ist will not be visible outside of this definition or declaration 38 | int atca_mbedtls_pk_init(struct mbedtls_pk_context pkey, uint16_t slotid); | ^~~~~~ /home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_wrap.h:39:66: warning: �‘struct atcacert_def_s�’ declared inside parameter list will not be visible outside of this definition or declaration 39 | tca_mbedtls_cert_add(struct mbedtls_x509_crt cert, struct atcacert_def_s * cert_def); | ^~~~~~

/home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_wrap.h:39:34: warning: �‘struct mbedtls_x509_crt�’ declared inside parameter lis t will not be visible outside of this definition or declaration 39 | int atca_mbedtls_cert_add(struct mbedtls_x509_crt cert, struct atcacert_def_s cert_def); | ^~~~ [ 36%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/mbedtls/atca_mbedtls_ecdsa.c.o [ 36%] Building C object cryptoauthlib/lib/CMakeFiles/cryptoauth.dir/mbedtls/atca_mbedtls_wrap.c.o /home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_wrap.c: In function �‘atca_mbedtls_cert_add�’: /home/pi/mbedTLS/mbedtls-examples/cryptoauthlib/lib/mbedtls/atca_mbedtls_wrap.c:171:46: warning: initialization discards �‘const�’ qualifier from pointer target type [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wdiscarded-qualifiers-Wdiscarded-qualifiers8;;] 171 | atcacert_device_loc_t * ca_key_cfg = &cert_def->ca_cert_def->public_key_dev_loc; | ^ [ 37%] Linking C static library libcryptoauth.a [ 37%] Built target cryptoauth [ 38%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/aes.c.o [ 38%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/aesni.c.o [ 39%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/arc4.c.o [ 40%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/aria.c.o [ 40%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/asn1parse.c.o [ 41%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/asn1write.c.o [ 42%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/base64.c.o [ 42%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/bignum.c.o [ 43%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/blowfish.c.o [ 44%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/camellia.c.o [ 44%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ccm.c.o [ 45%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/chacha20.c.o [ 46%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/chachapoly.c.o [ 47%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/cipher.c.o [ 47%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/cipher_wrap.c.o [ 48%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/cmac.c.o [ 49%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ctr_drbg.c.o [ 49%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/des.c.o [ 50%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/dhm.c.o [ 51%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecdh.c.o [ 51%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecdsa.c.o [ 52%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecjpake.c.o [ 53%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecp.c.o [ 53%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecp_curves.c.o [ 54%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/entropy.c.o [ 55%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/entropy_poll.c.o [ 55%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/error.c.o [ 56%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/gcm.c.o [ 57%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/havege.c.o [ 57%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/hkdf.c.o [ 58%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/hmac_drbg.c.o [ 59%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/md.c.o [ 59%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/md2.c.o [ 60%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/md4.c.o [ 61%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/md5.c.o [ 61%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/md_wrap.c.o [ 62%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/memory_buffer_alloc.c.o [ 63%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/nist_kw.c.o [ 63%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/oid.c.o [ 64%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/padlock.c.o [ 65%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pem.c.o [ 65%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pk.c.o [ 66%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pk_wrap.c.o [ 67%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pkcs12.c.o [ 67%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pkcs5.c.o [ 68%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pkparse.c.o [ 69%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/pkwrite.c.o [ 69%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/platform.c.o [ 70%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/platform_util.c.o [ 71%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/poly1305.c.o [ 72%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ripemd160.c.o [ 72%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/rsa.c.o [ 73%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/rsa_internal.c.o [ 74%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/sha1.c.o [ 74%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/sha256.c.o [ 75%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/sha512.c.o [ 76%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/threading.c.o [ 76%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/timing.c.o [ 77%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/version.c.o [ 78%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/version_features.c.o [ 78%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/xtea.c.o [ 79%] Linking C static library libmbedcrypto.a [ 79%] Built target mbedcrypto [ 79%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/certs.c.o [ 80%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/pkcs11.c.o [ 81%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509.c.o [ 81%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509_create.c.o [ 82%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509_crl.c.o [ 83%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509_crt.c.o [ 83%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509_csr.c.o [ 84%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509write_crt.c.o [ 85%] Building C object mbedtls/library/CMakeFiles/mbedx509.dir/x509write_csr.c.o [ 85%] Linking C static library libmbedx509.a [ 85%] Built target mbedx509 [ 86%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/debug.c.o [ 86%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/net_sockets.c.o [ 87%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_cache.c.o [ 88%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_ciphersuites.c.o [ 88%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_cli.c.o [ 89%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_cookie.c.o [ 90%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_srv.c.o [ 90%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_ticket.c.o [ 91%] Building C object mbedtls/library/CMakeFiles/mbedtls.dir/ssl_tls.c.o [ 92%] Linking C static library libmbedtls.a [ 92%] Built target mbedtls [ 93%] Building C object CMakeFiles/tests.dir/source/tests.c.o /home/pi/mbedTLS/mbedtls-examples/source/tests.c: In function �‘atca_tests�’: /home/pi/mbedTLS/mbedtls-examples/source/tests.c:163:14: warning: implicit declaration of function �‘atca_mbedtls_cert_init�’; did you mean �‘atca_mbedt ls_cert_add�’? [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-function-declaration-Wimplicit-function-declaration8;;] 163 | if (0 != atca_mbedtls_cert_init(&cert, &g_cert_def_2_device)) | ^~~~~~ | atca_mbedtls_cert_add [ 94%] Building C object CMakeFiles/tests.dir/source/cert_chain.c.o [ 95%] Linking C executable tests /usr/bin/ld: CMakeFiles/tests.dir/source/tests.c.o: in function atca_tests': **tests.c:(.text+0x1d4): undefined reference toatca_mbedtls_cert_init' /usr/bin/ld: tests.c:(.text+0x1fc): undefined reference to atca_mbedtls_cert_init' /usr/bin/ld: mbedtls/library/libmbedcrypto.a(ecdsa.c.o): in functionecdsa_sign_det_restartable': ecdsa.c:(.text+0x248): undefined reference to `mbedtls_ecdsa_sign' collect2: error: ld returned 1 exit status make[2]: ** [CMakeFiles/tests.dir/build.make:122: tests] Error 1 make[1]: [CMakeFiles/Makefile2:190: CMakeFiles/tests.dir/all] Error 2 make: *** [Makefile:149: all] Error 2 pi@gateway:~/mbedTLS/mbedtls-examples/build$

As you can see above, The symbols atca_mbedtls_cert_init & mbedtls_ecdsa_sign are reported undefined. Furthermore, atca_mbedtls_cert_init cannot be found defined in the source code downloaded.

Please have a look at these issues and kindly let me know how they can be resolved.

I was hoping using the library to establish a TLS connection, would be a straightforward job, and one that can be achieved without spending too much time in studying the internals of your libraries.

Please advice.

vishalSpintly commented 2 years ago

Moreover, running the configure.c application ( ./configure ) gives a segmentation fault. see: pi@gateway:~/mbedTLS/mbedtls-examples/build$ cmake --build . --target configure [ 39%] Built target cryptoauth Scanning dependencies of target mbedcrypto [ 39%] Building C object mbedtls/library/CMakeFiles/mbedcrypto.dir/ecdsa.c.o /home/pi/mbedTLS/mbedtls-examples/mbedtls/library/ecdsa.c: In function �‘mbedtls_ecdsa_sign�’: /home/pi/mbedTLS/mbedtls-examples/mbedtls/library/ecdsa.c:397:13: warning: implicit declaration of function �‘ecdsa_sign_restartable�’ [8;;https://gcc.gn u.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-function-declaration-Wimplicit-function-declaration8;;] 397 | return( ecdsa_sign_restartable( grp, r, s, d, buf, blen, | ^~~~~~ [ 40%] Linking C static library libmbedcrypto.a [ 84%] Built target mbedcrypto [ 91%] Built target mbedx509 [ 98%] Built target mbedtls [100%] Linking C executable configure [100%] Built target configure pi@gateway:~/mbedTLS/mbedtls-examples/build$ ./configure Segmentation fault