xtea-0.1.0.0: XTEA (eXtended Tiny Encryption Algorithm).
Safe HaskellSafe-Inferred
LanguageHaskell2010

Crypto.Cipher.Xtea

Description

Implementation of the XTEA (eXtended Tiny Encryption Algorithm) block cipher.

Its specification can be found here.

Synopsis

Documentation

data SymmetricKey Source #

128-bit XTEA symmetric key.

data Endianness Source #

Byte ordering.

Constructors

LittleEndian

Little-endian byte ordering.

BigEndian

Big-endian byte ordering.

Instances

Instances details
Show Endianness Source # 
Instance details

Defined in Crypto.Cipher.Xtea

Eq Endianness Source # 
Instance details

Defined in Crypto.Cipher.Xtea

Encryption

data EncryptionError Source #

XTEA encryption error.

Constructors

EncryptionInvalidInputLengthError !Int

Input length is not a multiple of XTEA's block size (64 bits).

encryptBlock :: SymmetricKey -> (Word32, Word32) -> (Word32, Word32) Source #

XTEA encrypt a 64-bit block.

This function is based on the following C implementation:

  void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
      unsigned int i;
      uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
      for (i=0; i < num_rounds; i++) {
          v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
          sum += delta;
          v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
      }
      v[0]=v0; v[1]=v1;
  }

Decryption

data DecryptionError Source #

XTEA decryption error.

Constructors

DecryptionInvalidInputLengthError !Int

Input length is not a multiple of XTEA's block size (64 bits).

decryptBlock :: SymmetricKey -> (Word32, Word32) -> (Word32, Word32) Source #

Decrypt an XTEA-encrypted 64-bit block.

This function is based on the following C implementation:

  void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
      unsigned int i;
      uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
      for (i=0; i < num_rounds; i++) {
          v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
          sum -= delta;
          v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
      }
      v[0]=v0; v[1]=v1;
  }

decrypt :: SymmetricKey -> ByteString -> Either DecryptionError ByteString Source #

Decrypt an XTEA-encrypted ByteString.

Endianness defaults to BigEndian.