# AWS RNDR Engine for OpenSSL A Random Number Generation Engine for OpenSSL making use of the Arm instruction RNDR. ## Build Requirements * CMake * OpenSSL Development files (ie openssl-devel/libssl-dev) * The development files' versions must match the version of OpenSSL which will run the engine. * C compiler * OpenSSL * Perl * Target Host of Arm 64 CPU ## Test and Run Requirements * OpenSSL * Host running on Arm 64 CPU which has access to RNDR and RNDRRS instructions ## Installation Run once: ``` mkdir build cd build cmake ../ ``` ### Quick Install ``` make make install ``` ### Configuring Build ``` cmake ../ ``` Run `cmake --help` for details regarding configuration options. Some useful configuration options are: ``` -DCMAKE_INSTALL_PREFIX=DIR install library to specified directory prefix -DCMAKE_INSTALL_LIBDIR=DIR install library to specified directory -DOPENSSL_ROOT_DIR=DIR set destination for OpenSSL root directory -DCMAKE_C_FLAGS=FLAGS set additional CFLAGS for compilation ```
Installing to a non-default engine location Engine libraries (`eng_rndr.so`) are installed by default to `${CMAKE_INSTALL_LIBDIR}` where `${CMAKE_INSTALL_LIBDIR}` usually refers to `/usr/local/lib/`. This location can be overwritten in the configurations using `-DCMAKE_INSTALL_PREFIX=DIR`. i.e. To install the engine library to `/usr/lib/aarch64-linux-gnu/engines-1.1/` ``` cmake -DCMAKE_INSTALL_PREFIX=/usr/lib/aarch64-linux-gnu/engines-1.1/ ../ ```
### Make ``` make ``` Generated shared library files `libeng_rndr.so*` will be located in `./build`. ### Testing Verify that random number generation functions for the engine work. ``` make test ARGS="-V" ``` The output will generate test run messages. ``` Loading test... Running 'sanity_check_rndr_bytes'... Test succeeded Running 'sanity_check_rndrrs_bytes'... Test succeeded ``` Test the engine built successfully and can be installed ``` openssl engine -t -c src/.libs/libeng_rndr.so ``` This will generate the engines details and availability. ``` (eng_rndr) Arm RNDR engine Loaded: (rndr) Arm RNDR engine [RAND] [ available ] ``` Test random number generating using the engine. ``` openssl rand -engine build/libeng_rndr.so -hex 10 ``` This will display the randomly generated 10 hex numbers. ``` engine "rndr" set. 01c1269d93d9f01ebff4 ``` ### Installation Installation may require root privileges. To install, run: ``` make install ```
Environment Variable Set `export OPENSSL_ENGINES=INSTALLATION_DIR` environment variable in shell startup files. This will allow openssl to find the RNDR engine. If using OpenSSL 1.0.2, the engine will be called `eng_rndr`. If using OpenSSL 1.1.1 or above the engine will be called `libeng_rndr`. Verify installation works `openssl engine -t -c libeng_rndr` ``` ... (rndr) Arm RNDR engine [RAND] [ available ] ```
Dynamic Engine Installation After installing update `openssl.cnf` to contain the following. ``` openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] eng_rndr = eng_rndr_section [eng_rndr_section] engine_id = libeng_rndr dynamic_path = init = 0 ``` Verify installation works `openssl engine -t -c` ``` ... (rndr) Arm RNDR engine [RAND] [ available ] ```
## Security See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information. ## License This project is licensed under the Apache-2.0 License.