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
58 * enum name for encryption_algorithm_t.
60 extern enum_name_t
*encryption_algorithm_names
;
63 * Generic interface for symmetric encryption algorithms.
68 * Encrypt a chunk of data and allocate space for the encrypted value.
70 * The length of the iv must equal to get_block_size(), while the length
71 * of data must be a multiple it.
72 * If encrypted is NULL, the encryption is done in-place (overwriting data).
74 * @param data data to encrypt
75 * @param iv initializing vector
76 * @param encrypted chunk to allocate encrypted data, or NULL
78 void (*encrypt
) (crypter_t
*this, chunk_t data
, chunk_t iv
,
82 * Decrypt a chunk of data and allocate space for the decrypted value.
84 * The length of the iv must equal to get_block_size(), while the length
85 * of data must be a multiple it.
86 * If decrpyted is NULL, the encryption is done in-place (overwriting data).
88 * @param data data to decrypt
89 * @param iv initializing vector
90 * @param encrypted chunk to allocate decrypted data, or NULL
92 void (*decrypt
) (crypter_t
*this, chunk_t data
, chunk_t iv
,
96 * Get the block size of the crypto algorithm.
98 * @return block size in bytes
100 size_t (*get_block_size
) (crypter_t
*this);
103 * Get the key size of the crypto algorithm.
105 * @return key size in bytes
107 size_t (*get_key_size
) (crypter_t
*this);
112 * The length of the key must match get_key_size().
114 * @param key key to set
116 void (*set_key
) (crypter_t
*this, chunk_t key
);
119 * Destroys a crypter_t object.
121 void (*destroy
) (crypter_t
*this);
124 #endif /*CRYPTER_H_ @} */