This document summarizes the design aspects of the crypto-native project.
One of the most important aspects was that the crypto-native is not a complex library with many dependencies but a collection of thin layers around well defined standards.
The project is divided in many independent sub-projects so that you can choose only the parts you need.
The programming interface had to be designed as simple as possible, trying to hide the tedious low level operations (such as memory allocations) firstly for the sake of easier understanding and usage, secondly in order to avoid needless complexity.
As a result of this approach users can dialog with low level libraries in a "natural" java-like way, forgetting about the complexity the c-style calls. However when maximum performance is needed users can interact directly with JNA forgetting about wrappers.