From c597afc9f59af4d4596068d042f467127311bfed Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 24 Feb 2008 19:10:34 +0000 Subject: added NullKeyDerivation added KeyDerivationFactory --- keyDerivation.cpp | 64 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) (limited to 'keyDerivation.cpp') diff --git a/keyDerivation.cpp b/keyDerivation.cpp index cfd70d4..79086b2 100644 --- a/keyDerivation.cpp +++ b/keyDerivation.cpp @@ -41,49 +41,66 @@ #include -void KeyDerivation::init(Buffer key, Buffer salt) +void KeyDerivation::setLogKDRate(const uint8_t log_rate) { Lock lock(mutex_); - gcry_error_t err; + if( log_rate < 49 ) + ld_kdr_ = log_rate; +} - // TODO: hardcoded cipher-type and keysize?? - err = gcry_cipher_open( &cipher_, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, 0 ); - if( err ) { - cLog.msg(Log::PRIO_ERR) << "KeyDerivation::init: Failed to open cipher: " << gpg_strerror( err ); - return; - } +//****** NullKeyDerivation ****** - master_salt_ = SyncBuffer(salt); - master_key_ = SyncBuffer(key); +void NullKeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer& key) +{ + for(u_int32_t i=0; i < key.getLength(); ++i) key[i] = 0; +} - updateMasterKey(); +//****** AesIcmKeyDerivation ****** + +AesIcmKeyDerivation::~AesIcmKeyDerivation() +{ + Lock lock(mutex_); + if(cipher_) + gcry_cipher_close( cipher_ ); } -void KeyDerivation::updateMasterKey() +void AesIcmKeyDerivation::updateMasterKey() { - gcry_error_t err; + if(!cipher_) + return; - err = gcry_cipher_setkey( cipher_, master_key_.getBuf(), master_key_.getLength() ); + gcry_error_t err = gcry_cipher_setkey( cipher_, master_key_.getBuf(), master_key_.getLength() ); if( err ) cLog.msg(Log::PRIO_ERR) << "KeyDerivation::updateMasterKey: Failed to set cipher key: " << gpg_strerror( err ); } -KeyDerivation::~KeyDerivation() +void AesIcmKeyDerivation::init(Buffer key, Buffer salt) { Lock lock(mutex_); - gcry_cipher_close( cipher_ ); -} + if(cipher_) + gcry_cipher_close( cipher_ ); -void KeyDerivation::setLogKDRate(const uint8_t log_rate) -{ - Lock lock(mutex_); - if( log_rate < 49 ) - ld_kdr_ = log_rate; + // TODO: hardcoded cipher-type and keysize?? + gcry_error_t err = gcry_cipher_open( &cipher_, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, 0 ); + if( err ) { + cLog.msg(Log::PRIO_ERR) << "KeyDerivation::init: Failed to open cipher: " << gpg_strerror( err ); + return; + } + + master_salt_ = SyncBuffer(salt); + master_key_ = SyncBuffer(key); + + updateMasterKey(); } -void KeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer& key) +void AesIcmKeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer& key) { Lock lock(mutex_); + if(!cipher_) + { + cLog.msg(Log::PRIO_ERR) << "KeyDerivation::generate: cipher not opened"; + return; + } gcry_error_t err = gcry_cipher_reset( cipher_ ); if( err ) @@ -133,3 +150,4 @@ void KeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer& key) if( err ) cLog.msg(Log::PRIO_ERR) << "KeyDerivation::generate: Failed to generate cipher bitstream: " << gpg_strerror( err ); } + -- cgit v1.2.3