Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

libtomcrypt(3) [debian man page]

LIBTOMCRYPT(3)						     Library Functions Manual						    LIBTOMCRYPT(3)

NAME
libtomcrypt - public domain open source crypthographic toolkit SYNOPSIS
#include <tomcrypt.h> Link with -ltomcrypt (use pkg-config --libs libtomcrypt) DESCRIPTION
libtomcrypt is documented in /usr/share/doc/libtomcrypt-dev/crypt.pdf. To give you a very brief introduction, the following example is pro- vided. EXAMPLE
/* AES-XTS example for libtomcrypt. (c) 2008 Michael Stapelberg, Public Domain */ #include <stdint.h> #include <string.h> #include <tomcrypt.h> static symmetric_xts xts; /* * Initializes AES-XTS for use with encrypt(). Key must be at least 32 bytes long, only * the first 32 bytes will be used. * */ void initialize_xts(unsigned char *key) { int idx, err; unsigned char aeskey1[16], aeskey2[16]; /* You can use 32 different ciphers simultaneously. Before using a cipher, you must register it. */ register_cipher(&aes_desc); /* Get the index of the cipher registered before */ if ((idx = find_cipher("aes")) == -1) { fprintf(stderr, "ERROR: AES not available in libtomcrypt. Please upgrade/fix libtomcrypt. "); exit(EXIT_FAILURE); } /* Set up the two private keys required by AES-XTS (see 3.4.10 of crypt.pdf) */ strncpy((char*)aeskey1, key, 16); strncpy((char*)aeskey2, key+16, 16); printf("Initializing with keys "%.16s" and "%.16s" (AES-XTS) ", aeskey1, aeskey2); /* Initialize AES-XTS */ if ((err = xts_start(idx, aeskey1, aeskey2, 16, 0, &xts)) != CRYPT_OK) { fprintf(stderr, "ERROR starting XTS: %s ", error_to_string(err)); exit(EXIT_FAILURE); } } /* * Encrypts the input (of input_size) and stores the result in output. The piece index * is required because XTS wants a tweak for each block so that it doesn't generate * patterns which would be visible in the encrypted output. * */ void encrypt(const uint8_t *input, uint8_t *output, int input_size, int piece_idx) { unsigned char tweak[256]; int err; memset(tweak, '', 256); snprintf((char*)tweak, 256, "%d", piece_idx); if ((err = xts_encrypt(input, input_size, output, tweak, &xts)) != CRYPT_OK) { fprintf(stderr, "ERROR in AES encryption: %d: %s ", err, error_to_string(err)); exit(EXIT_FAILURE); } } SEE ALSO
pkg-config(1) AUTHOR
libtomcrypt was written by Tom St Denis. This manual page was written by Michael Stapelberg <michael@stapelberg.de>, for the Debian project (and may be used by others). June 2009 LIBTOMCRYPT(3)

Check Out this Related Man Page

Image::ExifTool::AES(3pm)				User Contributed Perl Documentation				 Image::ExifTool::AES(3pm)

NAME
Image::ExifTool::AES - AES encryption with cipher-block chaining SYNOPSIS
use Image::ExifTool::AES qw(Crypt); $err = Crypt($plaintext, $key, 1); # encryption $err = Crypt($ciphertext, $key); # decryption DESCRIPTION
This module contains an implementation of the AES encryption/decryption algorithms with cipher-block chaining (CBC) and RFC 2898 PKCS #5 padding. This is the AESV2 and AESV3 encryption mode used in PDF documents. EXPORTS
Exports nothing by default, but "Crypt" may be exported. METHODS
Crypt Implement AES encryption/decryption with cipher-block chaining. Inputs: 0) Scalar reference for data to encrypt/decrypt. 1) Encryption key string (must have length 16, 24 or 32). 2) [optional] Encrypt flag (false to decrypt). 3) [optional] Flag to avoid removing padding after decrypting, or to avoid adding 16 bytes of padding before encrypting when data length is already a multiple of 16 bytes. Returns: On success, the return value is undefined and the data is encrypted or decrypted as specified. Otherwise returns an error string and the data is left in an indeterminate state. Notes: The length of the encryption key dictates the AES mode, with lengths of 16, 24 and 32 bytes resulting in AES-128, AES-192 and AES-256. When encrypting, the input data may be any length and will be padded to an even 16-byte block size using the specified padding technique. If the encrypt flag has length 16, it is used as the initialization vector for the cipher-block chaining, otherwise a random IV is generated. Upon successful return the data will be encrypted, with the first 16 bytes of the data being the CBC IV. When decrypting, the input data begins with the 16-byte CBC initialization vector. BUGS
This code is blindingly slow. But in truth, slowing down processing is the main purpose of encryption, so this really can't be considered a bug. AUTHOR
Copyright 2003-2011, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. REFERENCES
<http://www.hoozi.com/Articles/AESEncryption.htm> http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf <http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf> <http://www.faqs.org/rfcs/rfc3602.html> SEE ALSO
Image::ExifTool(3pm) perl v5.12.4 2011-03-04 Image::ExifTool::AES(3pm)
Man Page