The crypto/ functionality is inspired by:
    Scott Arciszewski
    https://github.com/paragonie/sapient
    https://github.com/paragonie/paseto
    https://github.com/paragonie/halite
    It uses libsodium found in PHP 7.2.

The crypto/ functionality facilitates secure messages between AliasAPI servers.
The design allows that each AliasAPI can update its own public+private keypair.
The public keys are used to create the shared key so it's not stored or managed.
All messages are signed and verified to eliminate certificate authority risks.
All messages are encrypted using a symmetric shared key for additional security.
The client_public_keys for the alias can be updated using an authorized request.
The system can work without managing and sending an paseto authorization tokens.
After messages are decrypted and verified, there are still more security checks.
Finally, each AliasAPI is designed with minimal functionality to mitigate risks.

Here is the flow of the pairing between two AliasAPI servers:

Client (Remember: base64 encode and decode)
The client_public_key is set in the basic auth header
An Alias is set to define actions and passwords
A Request is sent requesting the Server public_key
----------------------------------------------------> Server
                                                      Checks to make sure the Alias has been configured
                                                      Stores client_public_key associated with the alias
                                                      Encrypts server_public_key using client_public_key
                                                      Returns the encrypted Response
Client <---------------------------------------------
Decrypts the message using the client_public_key
Stores the server_public_key
Derives a symmetric shared key using the public_keys
Creates a Request
Signs the Request using the client_private_key
Encrypts the Request using the shared_key
Sends the encrypted Request
----------------------------------------------------> Server
                                                      Alias ??? How does it know which key?
                                                        Append Alias and/or nonce.

                                                      Derives the shared_key using both public_keys
                                                      Decrypts Request using the shared_key
                                                      Verifies the message using client_public_key
                                                      Verifies that the alias action is authorized
                                                      Processes the Request
                                                      Signs the Response with server_private_key
                                                      Encrypts the Response with the shared_key
                                                      Returns encrypted Response
Client <---------------------------------------------
Derives the shared_key using both public_keys
Decrypts the message using the shared_key
Verifies signed response using server_public_key
Processes the Response
