iv_gen: aead_t implementations provide an IV generator

This commit is contained in:
Tobias Brunner
2013-10-11 15:55:40 +02:00
parent b3e1eb2afe
commit 50bd28d549
6 changed files with 84 additions and 1 deletions
+19 -1
View File
@@ -1,4 +1,7 @@
/*
* Copyright (C) 2013 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2010 Martin Willi
* Copyright (C) 2010 revosec AG
*
@@ -16,6 +19,7 @@
#include "aead.h"
#include <utils/debug.h>
#include <crypto/iv/iv_gen_rand.h>
typedef struct private_aead_t private_aead_t;
@@ -35,9 +39,14 @@ struct 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,
@@ -126,6 +135,12 @@ METHOD(aead_t, get_iv_size, size_t,
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)
{
@@ -148,6 +163,7 @@ METHOD(aead_t, set_key, bool,
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);
@@ -167,12 +183,14 @@ aead_t *aead_create(crypter_t *crypter, signer_t *signer)
.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;
+11
View File
@@ -1,4 +1,7 @@
/*
* Copyright (C) 2013 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2010 Martin Willi
* Copyright (C) 2010 revosec AG
*
@@ -26,6 +29,7 @@ typedef struct aead_t aead_t;
#include <library.h>
#include <crypto/crypters/crypter.h>
#include <crypto/signers/signer.h>
#include <crypto/iv/iv_gen.h>
/**
* Authenticated encryption / authentication decryption interface.
@@ -88,6 +92,13 @@ struct aead_t {
*/
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).
*