Annotation of truecrypt/volume/pkcs5kdf.cpp, revision 1.1.1.1

1.1       root        1: /*
                      2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
                      3: 
                      4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
                      5:  in the file License.txt included in TrueCrypt binary and source code
                      6:  distribution packages.
                      7: */
                      8: 
                      9: #include "Common/Pkcs5.h"
                     10: #include "Pkcs5Kdf.h"
                     11: #include "VolumePassword.h"
                     12: 
                     13: namespace TrueCrypt
                     14: {
                     15:        Pkcs5Kdf::Pkcs5Kdf ()
                     16:        {
                     17:        }
                     18: 
                     19:        Pkcs5Kdf::~Pkcs5Kdf ()
                     20:        {
                     21:        }
                     22: 
                     23:        void Pkcs5Kdf::DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt) const
                     24:        {
                     25:                DeriveKey (key, password, salt, GetIterationCount());
                     26:        }
                     27:        
                     28:        shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const wstring &name)
                     29:        {
                     30:                foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms())
                     31:                {
                     32:                        if (kdf->GetName() == name)
                     33:                                return kdf;
                     34:                }
                     35:                throw ParameterIncorrect (SRC_POS);
                     36:        }
                     37: 
                     38:        shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const Hash &hash)
                     39:        {
                     40:                foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms())
                     41:                {
                     42:                        if (typeid (*kdf->GetHash()) == typeid (hash))
                     43:                                return kdf;
                     44:                }
                     45: 
                     46:                throw ParameterIncorrect (SRC_POS);
                     47:        }
                     48: 
                     49:        Pkcs5KdfList Pkcs5Kdf::GetAvailableAlgorithms ()
                     50:        {
                     51:                Pkcs5KdfList l;
                     52:                
                     53:                l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160 ()));
                     54:                l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha512 ()));
                     55:                l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacWhirlpool ()));
                     56:                l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha1 ()));
                     57: 
                     58:                return l;
                     59:        }
                     60: 
                     61:        void Pkcs5Kdf::ValidateParameters (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const
                     62:        {
                     63:                if (key.Size() < 1 || password.Size() < 1 || salt.Size() < 1 || iterationCount < 1)
                     64:                        throw ParameterIncorrect (SRC_POS);
                     65:        }
                     66: 
                     67:        void Pkcs5HmacRipemd160::DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const
                     68:        {
                     69:                ValidateParameters (key, password, salt, iterationCount);
                     70:                derive_key_ripemd160 ((char *) password.DataPtr(), (int) password.Size(), (char *) salt.Get(), (int) salt.Size(), iterationCount, (char *) key.Get(), (int) key.Size());
                     71:        }
                     72: 
                     73:        void Pkcs5HmacSha1::DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const
                     74:        {
                     75:                ValidateParameters (key, password, salt, iterationCount);
                     76:                derive_key_sha1 ((char *) password.DataPtr(), (int) password.Size(), (char *) salt.Get(), (int) salt.Size(), iterationCount, (char *) key.Get(), (int) key.Size());
                     77:        }
                     78: 
                     79:        void Pkcs5HmacSha512::DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const
                     80:        {
                     81:                ValidateParameters (key, password, salt, iterationCount);
                     82:                derive_key_sha512 ((char *) password.DataPtr(), (int) password.Size(), (char *) salt.Get(), (int) salt.Size(), iterationCount, (char *) key.Get(), (int) key.Size());
                     83:        }
                     84: 
                     85:        void Pkcs5HmacWhirlpool::DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const
                     86:        {
                     87:                ValidateParameters (key, password, salt, iterationCount);
                     88:                derive_key_whirlpool ((char *) password.DataPtr(), (int) password.Size(), (char *) salt.Get(), (int) salt.Size(), iterationCount, (char *) key.Get(), (int) key.Size());
                     89:        }
                     90: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.