class Jnacl implements Encryptor {

    @Override
    public byte[] seal(
            final byte[] message, final Nonce nonce, final PublicKey publicKey, final PrivateKey privateKey) {

        LOGGER.debug(
                "Sealing message using nonce {}, public key {} and private key {}",
                nonce,
                publicKey,
                privateKey);

        try {

            final NaCl nacl = new NaCl(privateKey.getKeyBytes(), publicKey.getKeyBytes());

            final byte[] cipherText = nacl.encrypt(message, nonce.getNonceBytes());

            LOGGER.debug(
                    "Created sealed payload using nonce {}, public key {} and private key {}",
                    nonce,
                    publicKey,
                    privateKey);

            return extract(cipherText, crypto_secretbox_BOXZEROBYTES);

        } catch (final Exception ex) {
            throw new EncryptorException(ex.getMessage());
        }
    }

    public  Jnacl(final SecureRandom secureRandom, final SecretBox secretBox);

}