SOL9 2.0 Class: KeyedMessageDigest

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * KeyedMessageDigest.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2009/02/17

#pragma once

#include <sol/crypt/CryptServiceProvider.h>
#include <sol/crypt/CryptHash.h>
#include <sol/crypt/CryptKey.h>
#include <sol/crypt/MessageDigest.h>
#include <sol/crypt/SymmetricKey.h>


namespace SOL {

class KeyedMessageDigest :public CryptHash {


private:
    MessageDigest md;
    SymmetricKey  key;

public:
    /**
     * algId: Hash algorithm
            CALG_HMAC       Keyed hash alogoritm  
            CALG_MAC        MessageAuth keyed hash algorithm
     */
    KeyedMessageDigest(CryptServiceProvider& csp, ALG_ID algId, CryptKey& key)
    :CryptHash() {

        if (create(csp.getProviderHandle(), 
            algId, key.getKeyHandle(), 0) != NO_ERROR) {
            
            throw Exception(GetLastError(), 
                "KeyedMessageDigest#KeyedMessageDigest,1,CryptCreateHash failed");
        }
    }

public:
    /**
     * algId: Hash algorithm
            CALG_HMAC       Keyed hash alogoritm  
            CALG_MAC        MessageAuth keyed hash algorithm
    */
    KeyedMessageDigest(CryptServiceProvider& csp, ALG_ID algId, 
        ALG_ID mdAlgId = CALG_SHA1, ALG_ID keyAlgId = CALG_RC2,
        const char* password="")

    :CryptHash() {

        md.create(csp.getProviderHandle(), mdAlgId);    //SHA1
        md.hashString(password);    //Dummy string
    
        //Derive a default rc2 key from the above message-digest of sha1
        key.derive(csp, md, keyAlgId, 0);    //RC2

        if (create(csp.getProviderHandle(), 
            algId, key.getKeyHandle(), 0) != NO_ERROR) {
            
            throw Exception(GetLastError(), 
                "KeyedMessageDigest#KeyedMessageDigest,1,CryptCreateHash failed");
        }
    }

public:
    /**
     * Destructor
     */
    ~KeyedMessageDigest() {
    }

};

}


Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.