VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/Cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Cache.c')
-rw-r--r--src/Common/Cache.c230
1 files changed, 115 insertions, 115 deletions
diff --git a/src/Common/Cache.c b/src/Common/Cache.c
index e32896fa..ba6c6df8 100644
--- a/src/Common/Cache.c
+++ b/src/Common/Cache.c
@@ -1,115 +1,115 @@
-/*
- Legal Notice: Some portions of the source code contained in this file were
- derived from the source code of TrueCrypt 7.1a, which is
- Copyright (c) 2003-2012 TrueCrypt Developers Association and which is
- governed by the TrueCrypt License 3.0, also from the source code of
- Encryption for the Masses 2.02a, which is Copyright (c) 1998-2000 Paul Le Roux
- and which is governed by the 'License Agreement for Encryption for the Masses'
- Modifications and additions to the original source code (contained in this file)
- and all other portions of this file are Copyright (c) 2013-2016 IDRIX
- and are governed by the Apache License 2.0 the full text of which is
- contained in the file License.txt included in VeraCrypt binary and source
- code distribution packages. */
-
-#include "Tcdefs.h"
-#include "Crypto.h"
-#include "Fat.h"
-#include "Volumes.h"
-#include "Apidrvr.h"
-#include "Common.h"
-#include "Cache.h"
-
-Password CachedPasswords[CACHE_SIZE];
-int CachedPim[CACHE_SIZE];
-int cacheEmpty = 1;
-static int nPasswordIdx = 0;
-
-int ReadVolumeHeaderWCache (BOOL bBoot, BOOL bCache, BOOL bCachePim, char *header, Password *password, int pkcs5_prf, int pim, BOOL truecryptMode, PCRYPTO_INFO *retInfo)
-{
- int nReturnCode = ERR_PASSWORD_WRONG;
- int i, effectivePim;
-
- /* Attempt to recognize volume using mount password */
- if (password->Length > 0)
- {
- nReturnCode = ReadVolumeHeader (bBoot, header, password, pkcs5_prf, pim, truecryptMode, retInfo, NULL);
-
- /* Save mount passwords back into cache if asked to do so */
- if (bCache && (nReturnCode == 0 || nReturnCode == ERR_CIPHER_INIT_WEAK_KEY))
- {
- for (i = 0; i < CACHE_SIZE; i++)
- {
- if (memcmp (&CachedPasswords[i], password, sizeof (Password)) == 0)
- break;
- }
-
- if (i == CACHE_SIZE)
- {
- /* Store the password */
- CachedPasswords[nPasswordIdx] = *password;
-
- /* Store also PIM if requested, otherwise set to default */
- if (bCachePim && (pim > 0))
- CachedPim[nPasswordIdx] = pim;
- else
- CachedPim[nPasswordIdx] = 0;
-
- /* Try another slot */
- nPasswordIdx = (nPasswordIdx + 1) % CACHE_SIZE;
-
- cacheEmpty = 0;
- }
- else if (bCachePim)
- {
- CachedPim[i] = pim > 0? pim : 0;
- }
- }
- }
- else if (!cacheEmpty)
- {
- /* Attempt to recognize volume using cached passwords */
- for (i = 0; i < CACHE_SIZE; i++)
- {
- if (CachedPasswords[i].Length > 0)
- {
- if (truecryptMode)
- effectivePim = 0;
- else if (pim == -1)
- effectivePim = CachedPim[i];
- else
- effectivePim = pim;
- nReturnCode = ReadVolumeHeader (bBoot, header, &CachedPasswords[i], pkcs5_prf, effectivePim, truecryptMode, retInfo, NULL);
-
- if (nReturnCode != ERR_PASSWORD_WRONG)
- break;
- }
- }
- }
-
- return nReturnCode;
-}
-
-
-void AddPasswordToCache (Password *password, int pim)
-{
- int i;
- for (i = 0; i < CACHE_SIZE; i++)
- {
- if (memcmp (&CachedPasswords[i], password, sizeof (Password)) == 0)
- return;
- }
-
- CachedPasswords[nPasswordIdx] = *password;
- CachedPim[nPasswordIdx] = pim > 0? pim : 0;
- nPasswordIdx = (nPasswordIdx + 1) % CACHE_SIZE;
- cacheEmpty = 0;
-}
-
-
-void WipeCache ()
-{
- burn (CachedPasswords, sizeof (CachedPasswords));
- burn (CachedPim, sizeof (CachedPim));
- nPasswordIdx = 0;
- cacheEmpty = 1;
-}
+/*
+ Legal Notice: Some portions of the source code contained in this file were
+ derived from the source code of TrueCrypt 7.1a, which is
+ Copyright (c) 2003-2012 TrueCrypt Developers Association and which is
+ governed by the TrueCrypt License 3.0, also from the source code of
+ Encryption for the Masses 2.02a, which is Copyright (c) 1998-2000 Paul Le Roux
+ and which is governed by the 'License Agreement for Encryption for the Masses'
+ Modifications and additions to the original source code (contained in this file)
+ and all other portions of this file are Copyright (c) 2013-2016 IDRIX
+ and are governed by the Apache License 2.0 the full text of which is
+ contained in the file License.txt included in VeraCrypt binary and source
+ code distribution packages. */
+
+#include "Tcdefs.h"
+#include "Crypto.h"
+#include "Fat.h"
+#include "Volumes.h"
+#include "Apidrvr.h"
+#include "Common.h"
+#include "Cache.h"
+
+Password CachedPasswords[CACHE_SIZE];
+int CachedPim[CACHE_SIZE];
+int cacheEmpty = 1;
+static int nPasswordIdx = 0;
+
+int ReadVolumeHeaderWCache (BOOL bBoot, BOOL bCache, BOOL bCachePim, char *header, Password *password, int pkcs5_prf, int pim, BOOL truecryptMode, PCRYPTO_INFO *retInfo)
+{
+ int nReturnCode = ERR_PASSWORD_WRONG;
+ int i, effectivePim;
+
+ /* Attempt to recognize volume using mount password */
+ if (password->Length > 0)
+ {
+ nReturnCode = ReadVolumeHeader (bBoot, header, password, pkcs5_prf, pim, truecryptMode, retInfo, NULL);
+
+ /* Save mount passwords back into cache if asked to do so */
+ if (bCache && (nReturnCode == 0 || nReturnCode == ERR_CIPHER_INIT_WEAK_KEY))
+ {
+ for (i = 0; i < CACHE_SIZE; i++)
+ {
+ if (memcmp (&CachedPasswords[i], password, sizeof (Password)) == 0)
+ break;
+ }
+
+ if (i == CACHE_SIZE)
+ {
+ /* Store the password */
+ CachedPasswords[nPasswordIdx] = *password;
+
+ /* Store also PIM if requested, otherwise set to default */
+ if (bCachePim && (pim > 0))
+ CachedPim[nPasswordIdx] = pim;
+ else
+ CachedPim[nPasswordIdx] = 0;
+
+ /* Try another slot */
+ nPasswordIdx = (nPasswordIdx + 1) % CACHE_SIZE;
+
+ cacheEmpty = 0;
+ }
+ else if (bCachePim)
+ {
+ CachedPim[i] = pim > 0? pim : 0;
+ }
+ }
+ }
+ else if (!cacheEmpty)
+ {
+ /* Attempt to recognize volume using cached passwords */
+ for (i = 0; i < CACHE_SIZE; i++)
+ {
+ if (CachedPasswords[i].Length > 0)
+ {
+ if (truecryptMode)
+ effectivePim = 0;
+ else if (pim == -1)
+ effectivePim = CachedPim[i];
+ else
+ effectivePim = pim;
+ nReturnCode = ReadVolumeHeader (bBoot, header, &CachedPasswords[i], pkcs5_prf, effectivePim, truecryptMode, retInfo, NULL);
+
+ if (nReturnCode != ERR_PASSWORD_WRONG)
+ break;
+ }
+ }
+ }
+
+ return nReturnCode;
+}
+
+
+void AddPasswordToCache (Password *password, int pim)
+{
+ int i;
+ for (i = 0; i < CACHE_SIZE; i++)
+ {
+ if (memcmp (&CachedPasswords[i], password, sizeof (Password)) == 0)
+ return;
+ }
+
+ CachedPasswords[nPasswordIdx] = *password;
+ CachedPim[nPasswordIdx] = pim > 0? pim : 0;
+ nPasswordIdx = (nPasswordIdx + 1) % CACHE_SIZE;
+ cacheEmpty = 0;
+}
+
+
+void WipeCache ()
+{
+ burn (CachedPasswords, sizeof (CachedPasswords));
+ burn (CachedPim, sizeof (CachedPim));
+ nPasswordIdx = 0;
+ cacheEmpty = 1;
+}