iv_gen: aead_t implementations provide an IV generator
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
|
||||
#include "ccm_aead.h"
|
||||
|
||||
#include <crypto/iv/iv_gen_seq.h>
|
||||
|
||||
#define BLOCK_SIZE 16
|
||||
#define SALT_SIZE 3
|
||||
#define IV_SIZE 8
|
||||
@@ -38,6 +40,11 @@ struct private_ccm_aead_t {
|
||||
*/
|
||||
crypter_t *crypter;
|
||||
|
||||
/**
|
||||
* IV generator.
|
||||
*/
|
||||
iv_gen_t *iv_gen;
|
||||
|
||||
/**
|
||||
* Length of the integrity check value
|
||||
*/
|
||||
@@ -305,6 +312,12 @@ METHOD(aead_t, get_iv_size, size_t,
|
||||
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)
|
||||
{
|
||||
@@ -323,6 +336,7 @@ METHOD(aead_t, destroy, void,
|
||||
private_ccm_aead_t *this)
|
||||
{
|
||||
this->crypter->destroy(this->crypter);
|
||||
this->iv_gen->destroy(this->iv_gen);
|
||||
free(this);
|
||||
}
|
||||
|
||||
@@ -384,12 +398,14 @@ ccm_aead_t *ccm_aead_create(encryption_algorithm_t algo, size_t key_size)
|
||||
.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,
|
||||
);
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "gcm_aead.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <crypto/iv/iv_gen_seq.h>
|
||||
|
||||
#define BLOCK_SIZE 16
|
||||
#define NONCE_SIZE 12
|
||||
@@ -39,6 +40,11 @@ struct private_gcm_aead_t {
|
||||
*/
|
||||
crypter_t *crypter;
|
||||
|
||||
/**
|
||||
* IV generator.
|
||||
*/
|
||||
iv_gen_t *iv_gen;
|
||||
|
||||
/**
|
||||
* Size of the integrity check value
|
||||
*/
|
||||
@@ -337,6 +343,12 @@ METHOD(aead_t, get_iv_size, size_t,
|
||||
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)
|
||||
{
|
||||
@@ -356,6 +368,7 @@ METHOD(aead_t, destroy, void,
|
||||
private_gcm_aead_t *this)
|
||||
{
|
||||
this->crypter->destroy(this->crypter);
|
||||
this->iv_gen->destroy(this->iv_gen);
|
||||
free(this);
|
||||
}
|
||||
|
||||
@@ -405,12 +418,14 @@ gcm_aead_t *gcm_aead_create(encryption_algorithm_t algo, size_t key_size)
|
||||
.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,
|
||||
);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "openssl_gcm.h"
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <crypto/iv/iv_gen_seq.h>
|
||||
|
||||
/** as defined in RFC 4106 */
|
||||
#define IV_LEN 8
|
||||
@@ -53,6 +54,11 @@ struct private_aead_t {
|
||||
*/
|
||||
size_t icv_size;
|
||||
|
||||
/**
|
||||
* IV generator
|
||||
*/
|
||||
iv_gen_t *iv_gen;
|
||||
|
||||
/**
|
||||
* The cipher to use
|
||||
*/
|
||||
@@ -161,6 +167,12 @@ METHOD(aead_t, get_iv_size, size_t,
|
||||
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)
|
||||
{
|
||||
@@ -183,6 +195,7 @@ METHOD(aead_t, destroy, void,
|
||||
private_aead_t *this)
|
||||
{
|
||||
chunk_clear(&this->key);
|
||||
this->iv_gen->destroy(this->iv_gen);
|
||||
free(this);
|
||||
}
|
||||
|
||||
@@ -200,6 +213,7 @@ aead_t *openssl_gcm_create(encryption_algorithm_t algo, size_t key_size)
|
||||
.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,
|
||||
@@ -258,6 +272,7 @@ aead_t *openssl_gcm_create(encryption_algorithm_t algo, size_t key_size)
|
||||
}
|
||||
|
||||
this->key = chunk_alloc(key_size);
|
||||
this->iv_gen = iv_gen_seq_create();
|
||||
|
||||
return &this->public;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user