2 * Copyright (C) 2005-2006 Martin Willi
3 * Copyright (C) 2005 Jan Hutter
4 * Hochschule fuer Technik Rapperswil
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 * @defgroup crypter crypter
27 typedef enum encryption_algorithm_t encryption_algorithm_t
;
28 typedef struct crypter_t crypter_t
;
33 * Encryption algorithm, as in IKEv2 RFC 3.3.2.
35 enum encryption_algorithm_t
{
36 ENCR_UNDEFINED
= 1024,
49 ENCR_AES_CCM_ICV8
= 14,
50 ENCR_AES_CCM_ICV12
= 15,
51 ENCR_AES_CCM_ICV16
= 16,
52 ENCR_AES_GCM_ICV8
= 18,
53 ENCR_AES_GCM_ICV12
= 19,
54 ENCR_AES_GCM_ICV16
= 20,
55 ENCR_CAMELLIA_CBC
= 22
59 * enum name for encryption_algorithm_t.
61 extern enum_name_t
*encryption_algorithm_names
;
64 * Generic interface for symmetric encryption algorithms.
69 * Encrypt a chunk of data and allocate space for the encrypted value.
71 * The length of the iv must equal to get_block_size(), while the length
72 * of data must be a multiple it.
73 * If encrypted is NULL, the encryption is done in-place (overwriting data).
75 * @param data data to encrypt
76 * @param iv initializing vector
77 * @param encrypted chunk to allocate encrypted data, or NULL
79 void (*encrypt
) (crypter_t
*this, chunk_t data
, chunk_t iv
,
83 * Decrypt a chunk of data and allocate space for the decrypted value.
85 * The length of the iv must equal to get_block_size(), while the length
86 * of data must be a multiple it.
87 * If decrpyted is NULL, the encryption is done in-place (overwriting data).
89 * @param data data to decrypt
90 * @param iv initializing vector
91 * @param encrypted chunk to allocate decrypted data, or NULL
93 void (*decrypt
) (crypter_t
*this, chunk_t data
, chunk_t iv
,
97 * Get the block size of the crypto algorithm.
99 * @return block size in bytes
101 size_t (*get_block_size
) (crypter_t
*this);
104 * Get the key size of the crypto algorithm.
106 * @return key size in bytes
108 size_t (*get_key_size
) (crypter_t
*this);
113 * The length of the key must match get_key_size().
115 * @param key key to set
117 void (*set_key
) (crypter_t
*this, chunk_t key
);
120 * Destroys a crypter_t object.
122 void (*destroy
) (crypter_t
*this);
125 #endif /*CRYPTER_H_ @} */