Annotation of truecrypt/common/cache.c, revision 1.1.1.7

1.1.1.6   root        1: /* Legal Notice: The source code contained in this file has been derived from
                      2:    the source code of Encryption for the Masses 2.02a, which is Copyright (c)
                      3:    1998-99 Paul Le Roux and which is covered by the 'License Agreement for
                      4:    Encryption for the Masses'. Modifications and additions to that source code
1.1.1.7 ! root        5:    contained in this file are Copyright (c) 2004-2006 TrueCrypt Foundation and
1.1.1.6   root        6:    Copyright (c) 2004 TrueCrypt Team, and are covered by TrueCrypt License 2.0
                      7:    the full text of which is contained in the file License.txt included in
                      8:    TrueCrypt binary and source code distribution archives.  */
1.1       root        9: 
1.1.1.6   root       10: #include "Tcdefs.h"
1.1       root       11: 
                     12: #ifndef NT4_DRIVER
                     13: #pragma VxD_LOCKED_CODE_SEG
                     14: #pragma VxD_LOCKED_DATA_SEG
                     15: #endif
                     16: 
1.1.1.6   root       17: #include "Crypto.h"
                     18: #include "Fat.h"
                     19: #include "Volumes.h"
                     20: #include "Apidrvr.h"
                     21: #include "Common.h"
                     22: #include "Cache.h"
                     23: 
                     24: Password CachedPasswords[CACHE_SIZE];
1.1       root       25: int cacheEmpty = 1;
1.1.1.6   root       26: static int nPasswordIdx = 0;
1.1       root       27: 
                     28: int
1.1.1.6   root       29: VolumeReadHeaderCache (BOOL bCache, char *header, Password *password, PCRYPTO_INFO *retInfo)
1.1       root       30: {
                     31:        int nReturnCode = ERR_PASSWORD_WRONG;
                     32:        int i;
                     33: 
                     34:        /* Attempt to recognize volume using mount password */
1.1.1.6   root       35:        if (password->Length > 0)
1.1       root       36:        {
1.1.1.6   root       37:                nReturnCode = VolumeReadHeader (header, password, retInfo);
1.1       root       38: 
                     39:                /* Save mount passwords back into cache if asked to do so */
1.1.1.6   root       40:                if (bCache && (nReturnCode == 0 || nReturnCode == ERR_CIPHER_INIT_WEAK_KEY))
1.1       root       41:                {
                     42:                        for (i = 0; i < CACHE_SIZE; i++)
                     43:                        {
1.1.1.6   root       44:                                if (memcmp (&CachedPasswords[i], password, sizeof (Password)) == 0)
1.1       root       45:                                        break;
                     46:                        }
                     47: 
                     48:                        if (i == CACHE_SIZE)
                     49:                        {
                     50:                                /* Store the password */
1.1.1.6   root       51:                                CachedPasswords[nPasswordIdx] = *password;
1.1       root       52: 
                     53:                                /* Try another slot */
                     54:                                nPasswordIdx = (nPasswordIdx + 1) % CACHE_SIZE;
                     55: 
                     56:                                cacheEmpty = 0;
                     57:                        }
                     58:                }
                     59:        }
                     60:        else if (!cacheEmpty)
                     61:        {
                     62:                /* Attempt to recognize volume using cached passwords */
                     63:                for (i = 0; i < CACHE_SIZE; i++)
                     64:                {
1.1.1.6   root       65:                        if (CachedPasswords[i].Length > 0)
1.1       root       66:                        {
1.1.1.6   root       67:                                nReturnCode = VolumeReadHeader (header, &CachedPasswords[i], retInfo);
1.1       root       68: 
                     69:                                if (nReturnCode != ERR_PASSWORD_WRONG)
                     70:                                        break;
                     71:                        }
                     72:                }
                     73:        }
                     74: 
                     75:        return nReturnCode;
                     76: }
                     77: 
                     78: void
                     79: WipeCache ()
                     80: {
1.1.1.6   root       81:        burn (CachedPasswords, sizeof (CachedPasswords));
1.1       root       82:        nPasswordIdx = 0;
                     83:        cacheEmpty = 1;
                     84: }

unix.superglobalmegacorp.com

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