VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Release/Setup Files
AgeCommit message (Expand)AuthorFilesLines
2019-02-01Update Release Notes and other files for 1.24-Beta2 releaseMounir IDRASSI5-1/+1
2019-01-28Increment version to 1.24-Beta2Mounir IDRASSI5-1/+1
2019-01-22Windows: Increment driver version to 1.24.1.1Mounir IDRASSI5-1/+1
2019-01-14Update Release Notes and language files for version 1.24-Beta1. Add signed Wi...Mounir IDRASSI5-1/+1
2019-01-14Increment version to 1.24-Beta1Mounir IDRASSI5-1/+1
2018-12-19Windows: Increment driver version to 1.24.0.1Mounir IDRASSI5-1/+1
2018-12-19Increment version to 1.24-Beta0Mounir IDRASSI2-0/+0
2018-10-10Increment version to 1.23-Hotfix-2Mounir IDRASSI2-0/+0
2018-09-21Increment version to 1.23-Hotfix-1Mounir IDRASSI5-1/+1
2018-09-03Increment version to 1.23-BETA7 and update release notes.Mounir IDRASSI5-1/+1
2018-08-24Increment version to 1.23-BETA6Mounir IDRASSI5-1/+1
2018-08-18Windows: Update signed driver files for 1.22-BETA5Mounir IDRASSI5-1/+1
2018-04-23Windows: fix driver inf fileMounir IDRASSI5-16/+21
2018-04-23Windows: implement compatibility for Windows 10 major updates using ReflectDr...Mounir IDRASSI5-0/+80
2018-03-30Windows: Update signed driver files for 1.22Mounir IDRASSI2-0/+0
2018-03-27Windows: Update signed driver files for 1.22-BETA7Mounir IDRASSI2-0/+0
2018-03-22Windows: Update signed driver files for 1.22-BETA5Mounir IDRASSI2-0/+0
2017-12-09Windows: Update signed driver files for 1.22-BETA4Mounir IDRASSI2-0/+0
2017-08-02Windows: Update signed driver files for 1.22-BETA3Mounir IDRASSI2-0/+0
2017-07-29Windows: Update signed driver files for 1.22-BETA2-Build6Mounir IDRASSI2-0/+0
2017-07-27Windows: Update signed driver files for 1.22-BETA2-Build5Mounir IDRASSI2-0/+0
2017-07-23Windows: Update signed driver files for 1.22-BETA2-Build1Mounir IDRASSI2-0/+0
2017-07-20Windows: Update signed driver files for 1.22-BETA1-Build4Mounir IDRASSI2-0/+0
2017-07-19Windows: Update signed driver files for 1.22-BETA0Mounir IDRASSI2-0/+0
2017-07-09Windows: Update signed driver files for 1.21 release (1.21.5)Mounir IDRASSI2-0/+0
2017-07-05Windows: Update signed driver files for 1.21 release (1.21.4)Mounir IDRASSI2-0/+0
2017-07-02Windows: Update signed driver files for 1.21 releaseMounir IDRASSI2-0/+0
2017-07-01Windows: Update signed driver files for 1.21 releaseMounir IDRASSI2-0/+0
2017-06-29Windows: Update signed driver files for 1.20 releaseMounir IDRASSI2-0/+0
2017-06-23Windows: Update signed driver files of 1.20 release (include SHA-2 speed opti...Mounir IDRASSI2-0/+0
2017-06-21Windows: Update signed driver files of 1.20 release (include Camellia speed o...Mounir IDRASSI2-0/+0
2017-06-10Windows: Update signed driver files of 1.20 releaseMounir IDRASSI2-0/+0
2017-06-02Windows: Update signed driver files of 1.20-BETA3 releaseMounir IDRASSI2-0/+0
2017-06-01Move Apache license files to the root of "src" folderMounir IDRASSI2-394/+0
2017-06-01remove duplicated license text fileMounir IDRASSI1-772/+0
2017-06-01Move PDF of User Guide to "doc" folderMounir IDRASSI1-0/+0
2017-04-26Update zlib copyright noticeMounir IDRASSI1-1/+1
2016-12-30Windows: Update signed driver files of 1.20-BETA2 releaseMounir IDRASSI2-0/+0
2016-12-30Increment version to 1.20 BETA2 (1.20.2)Mounir IDRASSI1-0/+0
2016-12-07Windows: Update driver files of 1.20-BETA1 releaseMounir IDRASSI2-0/+0
2016-10-17Update User GuideVeraCrypt_1.19Mounir IDRASSI1-0/+0
2016-10-17Windows: Support EFI system encryption for 32-bit Windows.Mounir IDRASSI1-0/+0
2016-10-17Update user guide.Mounir IDRASSI1-0/+0
2016-10-17Windows: Update driver files of 1.19 releaseMounir IDRASSI2-0/+0
2016-10-17Increment version to 1.19 (1.19.4)Mounir IDRASSI1-0/+0
2016-10-17Windows: Update signed drivers.Mounir IDRASSI2-0/+0
2016-10-17Update documentation and increment version to 1.19 BETA3 (1.19.3)Mounir IDRASSI1-0/+0
2016-10-17Crypto: Use SIMD optimized Serpent implementation from Botan. 2.5x speed gain...Mounir IDRASSI2-0/+55
2016-10-17Update copyrights in legal notices and license file.Mounir IDRASSI2-40/+125
2016-08-21Increment version to 1.19 BETA2 (1.19.2)Mounir IDRASSI1-0/+0
WorkItem *workItem; WorkItem *firstFragmentWorkItem; if (unitCount == 0) return; if (!ThreadPoolRunning || unitCount == 1) { switch (type) { case WorkType::DecryptDataUnits: encryptionMode->DecryptSectorsCurrentThread (data, startUnitNo, unitCount, sectorSize); break; case WorkType::EncryptDataUnits: encryptionMode->EncryptSectorsCurrentThread (data, startUnitNo, unitCount, sectorSize); break; default: throw ParameterIncorrect (SRC_POS); } return; } if (unitCount <= ThreadCount) { fragmentCount = (size_t) unitCount; unitsPerFragment = 1; remainder = 0; } else { fragmentCount = ThreadCount; unitsPerFragment = (size_t) unitCount / ThreadCount; remainder = (size_t) unitCount % ThreadCount; if (remainder > 0) ++unitsPerFragment; } fragmentData = data; fragmentStartUnitNo = startUnitNo; { ScopeLock lock (EnqueueMutex); firstFragmentWorkItem = &WorkItemQueue[EnqueuePosition]; while (firstFragmentWorkItem->State != WorkItem::State::Free) { WorkItemCompletedEvent.Wait(); } firstFragmentWorkItem->OutstandingFragmentCount.Set (fragmentCount); firstFragmentWorkItem->ItemException.reset(); while (fragmentCount-- > 0) { workItem = &WorkItemQueue[EnqueuePosition++]; if (EnqueuePosition >= QueueSize) EnqueuePosition = 0; while (workItem->State != WorkItem::State::Free) { WorkItemCompletedEvent.Wait(); } workItem->Type = type; workItem->FirstFragment = firstFragmentWorkItem; workItem->Encryption.Mode = encryptionMode; workItem->Encryption.Data = fragmentData; workItem->Encryption.UnitCount = unitsPerFragment; workItem->Encryption.StartUnitNo = fragmentStartUnitNo; workItem->Encryption.SectorSize = sectorSize; fragmentData += unitsPerFragment * sectorSize; fragmentStartUnitNo += unitsPerFragment; if (remainder > 0 && --remainder == 0) --unitsPerFragment; workItem->State.Set (WorkItem::State::Ready); WorkItemReadyEvent.Signal(); } } firstFragmentWorkItem->ItemCompletedEvent.Wait(); unique_ptr <Exception> itemException; if (firstFragmentWorkItem->ItemException.get()) itemException = move_ptr(firstFragmentWorkItem->ItemException); firstFragmentWorkItem->State.Set (WorkItem::State::Free); WorkItemCompletedEvent.Signal(); if (itemException.get()) itemException->Throw(); } void EncryptionThreadPool::Start () { if (ThreadPoolRunning) return; size_t cpuCount; #ifdef TC_WINDOWS SYSTEM_INFO sysInfo; GetSystemInfo (&sysInfo); cpuCount = sysInfo.dwNumberOfProcessors; #elif defined (_SC_NPROCESSORS_ONLN) cpuCount = (size_t) sysconf (_SC_NPROCESSORS_ONLN); if (cpuCount == (size_t) -1) cpuCount = 1; #elif defined (TC_MACOSX) int cpuCountSys; int mib[2] = { CTL_HW, HW_NCPU }; size_t len = sizeof (cpuCountSys); if (sysctl (mib, 2, &cpuCountSys, &len, nullptr, 0) == -1) cpuCountSys = 1; cpuCount = (size_t) cpuCountSys; #else # error Cannot determine CPU count #endif if (cpuCount < 2) return; if (cpuCount > MaxThreadCount) cpuCount = MaxThreadCount; StopPending = false; DequeuePosition = 0; EnqueuePosition = 0; for (size_t i = 0; i < sizeof (WorkItemQueue) / sizeof (WorkItemQueue[0]); ++i) { WorkItemQueue[i].State.Set (WorkItem::State::Free); } try { for (ThreadCount = 0; ThreadCount < cpuCount; ++ThreadCount) { struct ThreadFunctor : public Functor { virtual void operator() () { WorkThreadProc(); } }; make_shared_auto (Thread, thread); thread->Start (new ThreadFunctor ()); RunningThreads.push_back (thread); } } catch (...) { try { ThreadPoolRunning = true; Stop(); } catch (...) { } throw; } ThreadPoolRunning = true; } void EncryptionThreadPool::Stop () { if (!ThreadPoolRunning) return; StopPending = true; WorkItemReadyEvent.Signal(); foreach_ref (const Thread &thread, RunningThreads) { thread.Join(); } ThreadCount = 0; ThreadPoolRunning = false; } void EncryptionThreadPool::WorkThreadProc () { try { WorkItem *workItem; while (!StopPending) { { ScopeLock lock (DequeueMutex); workItem = &WorkItemQueue[DequeuePosition++]; if (DequeuePosition >= QueueSize) DequeuePosition = 0; while (!StopPending && workItem->State != WorkItem::State::Ready) { WorkItemReadyEvent.Wait(); } workItem->State.Set (WorkItem::State::Busy); } if (StopPending) break; try { switch (workItem->Type) { case WorkType::DecryptDataUnits: workItem->Encryption.Mode->DecryptSectorsCurrentThread (workItem->Encryption.Data, workItem->Encryption.StartUnitNo, workItem->Encryption.UnitCount, workItem->Encryption.SectorSize); break; case WorkType::EncryptDataUnits: workItem->Encryption.Mode->EncryptSectorsCurrentThread (workItem->Encryption.Data, workItem->Encryption.StartUnitNo, workItem->Encryption.UnitCount, workItem->Encryption.SectorSize); break; default: throw ParameterIncorrect (SRC_POS); } } catch (Exception &e) { workItem->FirstFragment->ItemException.reset (e.CloneNew()); } catch (exception &e) { workItem->FirstFragment->ItemException.reset (new ExternalException (SRC_POS, StringConverter::ToExceptionString (e))); } catch (...) { workItem->FirstFragment->ItemException.reset (new UnknownException (SRC_POS)); } if (workItem != workItem->FirstFragment) { workItem->State.Set (WorkItem::State::Free); WorkItemCompletedEvent.Signal(); } if (workItem->FirstFragment->OutstandingFragmentCount.Decrement() == 0) workItem->FirstFragment->ItemCompletedEvent.Signal(); } } catch (exception &e) { SystemLog::WriteException (e); } catch (...) { SystemLog::WriteException (UnknownException (SRC_POS)); } } volatile bool EncryptionThreadPool::ThreadPoolRunning = false; volatile bool EncryptionThreadPool::StopPending = false; size_t EncryptionThreadPool::ThreadCount; EncryptionThreadPool::WorkItem EncryptionThreadPool::WorkItemQueue[QueueSize]; volatile size_t EncryptionThreadPool::EnqueuePosition; volatile size_t EncryptionThreadPool::DequeuePosition; Mutex EncryptionThreadPool::EnqueueMutex; Mutex EncryptionThreadPool::DequeueMutex; SyncEvent EncryptionThreadPool::WorkItemReadyEvent; SyncEvent EncryptionThreadPool::WorkItemCompletedEvent; list < shared_ptr <Thread> > EncryptionThreadPool::RunningThreads; }