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

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

unix.superglobalmegacorp.com

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