class Ed25519BlockCipher implements BlockCipher {

  @Override
  public byte[] decrypt(final byte[] input) {
    if (input == null) {
      throw new CryptoException("Cannot decrypt. Input is required.");
    }
    int minSize = TAG_LENGTH + IV_LENGTH;
    if (input.length < minSize) {
      throw new CryptoException(
          "Cannot decrypt input. Size is "
              + input.length
              + " when at least "
              + minSize
              + " is expected.");
    }
    final byte[] authTag = Arrays.copyOfRange(input, 0, TAG_LENGTH);
    final byte[] ivData = Arrays.copyOfRange(input, TAG_LENGTH, IV_LENGTH + TAG_LENGTH);
    final byte[] cypherText = Arrays.copyOfRange(input, TAG_LENGTH + IV_LENGTH, input.length);
    return decode(authTag, ivData, cypherText);
  }

  public  Ed25519BlockCipher(final KeyPair senderKeyPair, final KeyPair recipientKeyPair);

}