Building & Porting

This Python package uses the OPTIGA™ Trust Host Library for C as a shared library (.so or .dll). Precompiled libraries are available for the following platforms in src/optigatrust/lib.

OS

Architecture

Interface

Library name

Linux

armv7l

I²C

liboptigatrust-i2c-linux-armv7l.so

Linux

aarch64

I²C

liboptigatrust-i2c-linux-aarch64.so

Linux

x86_64

I²C

liboptigatrust-i2c-linux-x86_64.so

Linux

armv7l

I²C-GPIOD

liboptigatrust-i2c-gpiod-linux-armv7l.so

Linux

aarch64

I²C-GPIOD

liboptigatrust-i2c-gpiod-linux-aarch64.so

Linux

x86_64

I²C-GPIOD

liboptigatrust-i2c-gpiod-linux-x86_64.so

Linux

armv7l

UART

liboptigatrust-uart-linux-armv7l.so

Linux

aarch64

UART

liboptigatrust-uart-linux-aarch64.so

Linux

x86_64

UART

liboptigatrust-uart-linux-x86_64.so

Linux

armv7l

libusb

liboptigatrust-libusb-linux-armv7l.so

Linux

aarch64

libusb

liboptigatrust-libusb-linux-aarch64.so

Linux

x86_64

libusb

liboptigatrust-libusb-linux-x86_64.so

Windows

i686

UART

liboptigatrust-uart-win-x86_64.dll

Windows

amd64

UART

liboptigatrust-uart-win-x86_64.dll

Windows

i686

libusb

liboptigatrust-libsub-win-x86_64.dll

Windows

amd64

libusb

liboptigatrust-libsub-win-x86_64.dll

Building the OPTIGA™ Trust Host Library for C

This chapter describes how to build the optigatrust Python module from scratch.

Linux

If you want to port this module to other Linux platforms, perform the following steps.

  1. Clone the git submodule for the OPTIGA™ Trust Host Library for C in extras/optiga-trust-m.:

    git submodule update --init
    
  2. Install CMake:

    sudo apt-get install cmake
    
  3. Install prerequisites:

    sudo apt-get install libgpio-dev libusb-dev
    
  4. Build the library

    To build the library from this folder (extras/optiga-trust-m), run the following commands. You can enable/disable the build of individual interfaces via -D<variant>=ON.

    cmake -B build -Di2c=ON -Di2c-gpiod=ON -Duart=ON -Dlibusb=ON
    cmake --build build
    
Sample output
cmake -B build -Di2c=ON -Di2c-gpiod=ON -Duart=ON -Dlibusb=ON
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /python-optiga-trust/extras/optiga-trust-m/build

cmake --build build
[  1%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal.c.o
[  2%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_gpio.c.o
[  3%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_i2c.c.o
[  4%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/target/rpi3/pal_ifx_i2c_config.c.o
[  5%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_event.c.o
[  6%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_datastore.c.o
[  7%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_logger.c.o
[  8%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_lock.c.o
[  9%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_timer.c.o
[ 10%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_memory.c.o
[ 12%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_shared_mutex.c.o
[ 13%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 14%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 15%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 16%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 17%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 18%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 19%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 20%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 21%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 23%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 24%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 25%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 26%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 27%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-i2c-linux-x86_64.so
[ 27%] Built target optigatrust-i2c-linux-x86_64
[ 28%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal.c.o
[ 29%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_gpio_gpiod.c.o
[ 30%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_i2c.c.o
[ 31%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/target/gpiod/pal_ifx_i2c_config.c.o
[ 32%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_event.c.o
[ 34%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_datastore.c.o
[ 35%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_logger.c.o
[ 36%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_lock.c.o
[ 37%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_timer.c.o
[ 38%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_memory.c.o
[ 39%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_shared_mutex.c.o
[ 40%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 41%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 42%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 43%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 45%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 46%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 47%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 48%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 49%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 50%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 51%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 52%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 53%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 54%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-i2c-gpiod-linux-x86_64.so
[ 54%] Built target optigatrust-i2c-gpiod-linux-x86_64
[ 56%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal.c.o
[ 57%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_common.c.o
[ 58%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_gpio.c.o
[ 59%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_i2c.c.o
[ 60%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_ifx_usb_config.c.o
[ 61%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_event.c.o
[ 62%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_logger.c.o
[ 63%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_datastore.c.o
[ 64%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_lock.c.o
[ 65%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_memory.c.o
[ 67%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_timer.c.o
[ 68%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 69%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 70%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 71%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 72%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 73%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 74%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 75%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 76%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 78%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 79%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 80%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 81%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 82%] Linking C shared library python-optiga-trust/src/optigatrust/lib/liboptigatrust-libusb-linux-x86_64.so
[ 82%] Built target optigatrust-libusb-linux-x86_64
[ 83%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/optiga_comms_tc_uart.c.o
[ 84%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_event.c.o
[ 85%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_gpio.c.o
[ 86%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_config.c.o
[ 87%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_datastore.c.o
[ 89%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_logger.c.o
[ 90%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_lock.c.o
[ 91%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_timer.c.o
[ 92%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_memory.c.o
[ 93%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 94%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 95%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 96%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 97%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 98%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[100%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-uart-linux-x86_64.so
[100%] Built target optigatrust-uart-linux-x86_64

Windows

To build the OPTIGA™ Trust Host Library for C, Microsoft Visual Studio 2022 is needed. The solution for the project is located in extras/optiga-trust-m.

Building and installing the Python module

Install the Python module optigatrust from source code as follows.

python -m pip install -r requirements.txt
python -m pip install .