Provide a small and monolithic architecture that supports
the main standards and most important features of IKEv2.
Monolithic means that we do not even try to put lots of features in
lots of dynamic libraries.
Write readable and clean code following strict coding
Implement secure code with strict validity checking, bounded buffer
operations, and privilege separation to mitigate the security risks of
possible bugs. Use strong cryptography with sane but secure defaults.
Provide good interoperability with other IKEv2 implementations, support
non-standard extensions if it is required to interoperate with other
Make the configuration easy and nice with sane defaults, minimalistic
configuration files and good documentation in the manual pages. Avoid
the headaches of past and other IKE implementations.