114 lines
2.5 KiB
Markdown
114 lines
2.5 KiB
Markdown
# RSA Non-blocking Examples
|
|
|
|
## Design
|
|
|
|
Enables RsaKey support for non-blocking exptmod operations by setting a non-blocking context using a new API `wc_RsaSetNonBlock`. If the operation is not complete it will return `FP_WOULDBLOCK` and requires being called again until success `0` or failure `<0`.
|
|
|
|
Example code is based on wolfCrypt test `/wolfcrypt/test/test.c` `rsa_nb_test` function.
|
|
|
|
## Implementation
|
|
|
|
* Adds RSA non-blocking support enabled with `WC_RSA_NONBLOCK`.
|
|
* Adds new `wc_RsaSetNonBlock` function for enabling / non-block context.
|
|
* Adds wolfCrypt test function `rsa_nb_test` to validate.
|
|
* Adds RSA blocking time support using `WC_RSA_NONBLOCK_TIME` and `wc_RsaSetNonBlockTime`.
|
|
|
|
## Code Added in GitHub pull requests:
|
|
|
|
* 1901: https://github.com/wolfSSL/wolfssl/pull/1901
|
|
* 1991: https://github.com/wolfSSL/wolfssl/pull/1991
|
|
|
|
|
|
## Example RSA Non-block
|
|
|
|
This breaks RSA operations into smallest possible chunks of work.
|
|
|
|
### Building wolfSSL
|
|
|
|
```
|
|
./autogen.sh
|
|
./configure --enable-fastmath CFLAGS="-DWC_RSA_NONBLOCK"
|
|
make
|
|
sudo make install
|
|
```
|
|
|
|
### Building Example
|
|
|
|
```
|
|
make
|
|
gcc -o rsa-nb rsa-nb.c -Wall -I/usr/local/include -Os -L/usr/local/lib -lm -lwolfssl
|
|
```
|
|
|
|
### Example Output
|
|
|
|
```
|
|
./rsa-nb
|
|
File ../../certs/client-key.der is 1192 bytes
|
|
RSA non-block sign: 8200 times
|
|
RSA non-block verify: 264 times
|
|
```
|
|
|
|
|
|
## Example RSA Non-block with Time
|
|
|
|
This adds logic to estimate blocking time based on CPU speed and desired milliseconds to block.
|
|
|
|
### Building wolfSSL
|
|
|
|
```
|
|
./autogen.sh
|
|
./configure --enable-fastmath CFLAGS="-DWC_RSA_NONBLOCK -DWC_RSA_NONBLOCK_TIME"
|
|
make
|
|
sudo make install
|
|
```
|
|
|
|
### Building Example
|
|
|
|
```
|
|
make
|
|
gcc -o rsa-nb rsa-nb.c -Wall -I/usr/local/include -Os -L/usr/local/lib -lm -lwolfssl
|
|
```
|
|
|
|
### Example Output
|
|
|
|
```
|
|
./rsa-nb
|
|
File ../../certs/client-key.der is 1192 bytes
|
|
CPU Speed is 3100000000, blocking ms 1
|
|
RSA non-block sign: 1 times
|
|
RSA non-block verify: 1 times
|
|
```
|
|
|
|
|
|
## Debugging
|
|
|
|
|
|
1. Build wolfSSL adding `--enable-debug --disable-shared` to the ./configure and do a `sudo make install`:
|
|
|
|
```
|
|
./configure --enable-fastmath CFLAGS="-DWC_RSA_NONBLOCK -DWC_RSA_NONBLOCK_TIME" --enable-debug --disable-shared
|
|
make
|
|
sudo make install
|
|
```
|
|
|
|
2. Edit Makefile and edit lines 15 - 18 to be:
|
|
|
|
```
|
|
# Options
|
|
CFLAGS+=$(DEBUG_FLAGS)
|
|
#CFLAGS+=$(OPTIMIZE)
|
|
LIBS+=$(STATIC_LIB) -ldl -lm
|
|
#LIBS+=$(DYN_LIB)
|
|
```
|
|
|
|
```
|
|
make
|
|
gcc -o rsa-nb rsa-nb.c -Wall -I/usr/local/include -g -DDEBUG -L/usr/local/lib -lm /usr/local/lib/libwolfssl.a -ldl -lm
|
|
gdb ./rsa-nb
|
|
run
|
|
```
|
|
|
|
## Support
|
|
|
|
For questions please email us at support@wolfssl.com.
|