return 0;
}
+METHOD(aead_t, get_iv_gen, iv_gen_t*,
+ private_aead_t *this)
+{
+ /* IVs are retrieved via keymat_v1.get_iv() */
+ return NULL;
+}
+
METHOD(aead_t, get_key_size, size_t,
private_aead_t *this)
{
.get_block_size = _get_block_size,
.get_icv_size = _get_icv_size,
.get_iv_size = _get_iv_size,
+ .get_iv_gen = _get_iv_gen,
.get_key_size = _get_key_size,
.set_key = _set_key,
.destroy = _aead_destroy,
/*
+ * Copyright (C) 2013 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
* Copyright (C) 2010 Martin Willi
* Copyright (C) 2010 revosec AG
*
#include "aead.h"
#include <utils/debug.h>
+#include <crypto/iv/iv_gen_rand.h>
typedef struct private_aead_t private_aead_t;
crypter_t *crypter;
/**
- * draditional signer
+ * traditional signer
*/
signer_t *signer;
+
+ /**
+ * IV generator
+ */
+ iv_gen_t *iv_gen;
};
METHOD(aead_t, encrypt, bool,
return this->crypter->get_iv_size(this->crypter);
}
+METHOD(aead_t, get_iv_gen, iv_gen_t*,
+ private_aead_t *this)
+{
+ return this->iv_gen;
+}
+
METHOD(aead_t, get_key_size, size_t,
private_aead_t *this)
{
METHOD(aead_t, destroy, void,
private_aead_t *this)
{
+ this->iv_gen->destroy(this->iv_gen);
this->crypter->destroy(this->crypter);
this->signer->destroy(this->signer);
free(this);
.get_block_size = _get_block_size,
.get_icv_size = _get_icv_size,
.get_iv_size = _get_iv_size,
+ .get_iv_gen = _get_iv_gen,
.get_key_size = _get_key_size,
.set_key = _set_key,
.destroy = _destroy,
},
.crypter = crypter,
.signer = signer,
+ .iv_gen = iv_gen_rand_create(),
);
return &this->public;
/*
+ * Copyright (C) 2013 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
* Copyright (C) 2010 Martin Willi
* Copyright (C) 2010 revosec AG
*
#include <library.h>
#include <crypto/crypters/crypter.h>
#include <crypto/signers/signer.h>
+#include <crypto/iv/iv_gen.h>
/**
* Authenticated encryption / authentication decryption interface.
*/
size_t (*get_iv_size)(aead_t *this);
+ /**
+ * Get the IV generator implementation
+ *
+ * @return IV generator
+ */
+ iv_gen_t *(*get_iv_gen)(aead_t *this);
+
/**
* Get the size of the key material (for encryption and authentication).
*
#include "ccm_aead.h"
+#include <crypto/iv/iv_gen_seq.h>
+
#define BLOCK_SIZE 16
#define SALT_SIZE 3
#define IV_SIZE 8
*/
crypter_t *crypter;
+ /**
+ * IV generator.
+ */
+ iv_gen_t *iv_gen;
+
/**
* Length of the integrity check value
*/
return IV_SIZE;
}
+METHOD(aead_t, get_iv_gen, iv_gen_t*
+ private_ccm_aead_t *this)
+{
+ return this->iv_gen;
+}
+
METHOD(aead_t, get_key_size, size_t,
private_ccm_aead_t *this)
{
private_ccm_aead_t *this)
{
this->crypter->destroy(this->crypter);
+ this->iv_gen->destroy(this->iv_gen);
free(this);
}
.get_block_size = _get_block_size,
.get_icv_size = _get_icv_size,
.get_iv_size = _get_iv_size,
+ .get_iv_gen = _get_iv_gen,
.get_key_size = _get_key_size,
.set_key = _set_key,
.destroy = _destroy,
},
},
.crypter = lib->crypto->create_crypter(lib->crypto, algo, key_size),
+ .iv_gen = iv_gen_seq_create(),
.icv_size = icv_size,
);
#include "gcm_aead.h"
#include <limits.h>
+#include <crypto/iv/iv_gen_seq.h>
#define BLOCK_SIZE 16
#define NONCE_SIZE 12
*/
crypter_t *crypter;
+ /**
+ * IV generator.
+ */
+ iv_gen_t *iv_gen;
+
/**
* Size of the integrity check value
*/
return IV_SIZE;
}
+METHOD(aead_t, get_iv_gen, iv_gen_t*,
+ private_gcm_aead_t *this)
+{
+ return this->iv_gen;
+}
+
METHOD(aead_t, get_key_size, size_t,
private_gcm_aead_t *this)
{
private_gcm_aead_t *this)
{
this->crypter->destroy(this->crypter);
+ this->iv_gen->destroy(this->iv_gen);
free(this);
}
.get_block_size = _get_block_size,
.get_icv_size = _get_icv_size,
.get_iv_size = _get_iv_size,
+ .get_iv_gen = _get_iv_gen,
.get_key_size = _get_key_size,
.set_key = _set_key,
.destroy = _destroy,
},
},
.crypter = lib->crypto->create_crypter(lib->crypto, algo, key_size),
+ .iv_gen = iv_gen_seq_create(),
.icv_size = icv_size,
);
#include "openssl_gcm.h"
#include <openssl/evp.h>
+#include <crypto/iv/iv_gen_seq.h>
/** as defined in RFC 4106 */
#define IV_LEN 8
*/
size_t icv_size;
+ /**
+ * IV generator
+ */
+ iv_gen_t *iv_gen;
+
/**
* The cipher to use
*/
return IV_LEN;
}
+METHOD(aead_t, get_iv_gen, iv_gen_t*,
+ private_aead_t *this)
+{
+ return this->iv_gen;
+}
+
METHOD(aead_t, get_key_size, size_t,
private_aead_t *this)
{
private_aead_t *this)
{
chunk_clear(&this->key);
+ this->iv_gen->destroy(this->iv_gen);
free(this);
}
.get_block_size = _get_block_size,
.get_icv_size = _get_icv_size,
.get_iv_size = _get_iv_size,
+ .get_iv_gen = _get_iv_gen,
.get_key_size = _get_key_size,
.set_key = _set_key,
.destroy = _destroy,
}
this->key = chunk_alloc(key_size);
+ this->iv_gen = iv_gen_seq_create();
return &this->public;
}