[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/qca/plugins/qca-gcrypt
From: Brad Hards <bradh () frogmouth ! net>
Date: 2005-04-12 11:52:08
Message-ID: 20050412115208.BF388633 () office ! kde ! org
[Download RAW message or body]
CVS commit by bhards:
Add in HMAC support, and turn on the new secure memory
code. HMAC appears to be fine, but the memory allocation
code is showing a few problems (probably in qca proper,
but I need to track it down).
M +69 -19 qca-gcrypt.cpp 1.19
--- kdesupport/qca/plugins/qca-gcrypt/qca-gcrypt.cpp #1.18:1.19
@@ -89,4 +89,62 @@ protected:
};
+class gcryHMACContext : public QCA::MACContext
+{
+public:
+ gcryHMACContext(int hashAlgorithm, QCA::Provider *p, const QString &type) : \
QCA::MACContext(p, type) + {
+ m_hashAlgorithm = hashAlgorithm;
+ err = gcry_md_open( &context, m_hashAlgorithm, GCRY_MD_FLAG_HMAC );
+ if ( GPG_ERR_NO_ERROR != err ) {
+ std::cout << "Failure: " ;
+ std::cout << gcry_strsource(err) << "/";
+ std::cout << gcry_strerror(err) << std::endl;
+ }
+ }
+
+ ~gcryHMACContext()
+ {
+ gcry_md_close( context );
+ }
+
+ void setup(const QCA::SymmetricKey &key)
+ {
+ gcry_md_setkey( context, key.data(), key.size() );
+ }
+
+ Context *clone() const
+ {
+ return new gcryHMACContext(*this);
+ }
+
+ void clear()
+ {
+ gcry_md_reset( context );
+ }
+
+ QCA::KeyLength keyLength() const
+ {
+ return anyKeyLength();
+ }
+
+ void update(const QSecureArray &a)
+ {
+ gcry_md_write( context, a.data(), a.size() );
+ }
+
+ void final( QSecureArray *out)
+ {
+ out->resize( gcry_md_get_algo_dlen( m_hashAlgorithm ) );
+ unsigned char *md;
+ md = gcry_md_read( context, m_hashAlgorithm );
+ memcpy( out->data(), md, out->size() );
+ }
+
+protected:
+ gcry_md_hd_t context;
+ gcry_error_t err;
+ int m_hashAlgorithm;
+};
+
class gcryCipherContext : public QCA::CipherContext
@@ -304,5 +362,5 @@ protected:
}
-// #define I_WANT_TO_CRASH 1
+#define I_WANT_TO_CRASH 1
#ifdef I_WANT_TO_CRASH
static void * qca_func_malloc(size_t n)
@@ -318,22 +376,5 @@ static void * qca_func_secure_malloc(siz
static void * qca_func_realloc(void *oldBlock, size_t newBlockSize)
{
- std::cout << "re-alloc: " << newBlockSize << std::endl;
- if (oldBlock == NULL) {
- return qca_secure_alloc(newBlockSize);
- }
-
- // backtrack to read the size value
- char *c = (char *)oldBlock;
- c -= sizeof(int);
- size_t oldBlockSize = ((size_t *)c)[0];
-
- char *newBlock = (char *)qca_secure_alloc(newBlockSize);
- if (newBlockSize < oldBlockSize) {
- memcpy(newBlock, oldBlock, newBlockSize);
- } else { // oldBlock is smaller
- memcpy(newBlock, oldBlock, oldBlockSize);
- }
- qca_secure_free(oldBlock);
- return newBlock;
+ return qca_secure_realloc(oldBlock, newBlockSize);
};
@@ -389,4 +430,7 @@ public:
list += "sha384";
list += "sha512";
+ list += "hmac(md5)";
+ list += "hmac(sha1)";
+ list += "hmac(ripemd160)";
list += "aes128-ecb";
list += "aes128-cfb";
@@ -427,4 +471,10 @@ public:
else if ( type == "sha512" )
return new gcryptQCAPlugin::gcryHashContext( GCRY_MD_SHA512, this, type \
); + else if ( type == "hmac(md5)" )
+ return new gcryptQCAPlugin::gcryHMACContext( GCRY_MD_MD5, this, type );
+ else if ( type == "hmac(sha1)" )
+ return new gcryptQCAPlugin::gcryHMACContext( GCRY_MD_SHA1,this, type );
+ else if ( type == "hmac(ripemd160)" )
+ return new gcryptQCAPlugin::gcryHMACContext( GCRY_MD_RMD160, this, type \
); else if ( type == "aes128-ecb" )
return new gcryptQCAPlugin::gcryCipherContext( GCRY_CIPHER_AES128, \
GCRY_CIPHER_MODE_ECB, false, this, type );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic