diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-29 00:06:20 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-29 00:06:20 +0200 |
commit | 034b64f4153550cbe5849bcbfc27e187377cc512 (patch) | |
tree | d831496163c3891031765010bf1934406b0c4a3c /src/Common/Token.cpp | |
parent | 502ab9112a7624dbd7c1c90c2e12ed45512b8b3c (diff) | |
download | VeraCrypt-034b64f4153550cbe5849bcbfc27e187377cc512.tar.gz VeraCrypt-034b64f4153550cbe5849bcbfc27e187377cc512.zip |
EMV keyfile support: Overall code improvements and bug fixes
Diffstat (limited to 'src/Common/Token.cpp')
-rw-r--r-- | src/Common/Token.cpp | 74 |
1 files changed, 53 insertions, 21 deletions
diff --git a/src/Common/Token.cpp b/src/Common/Token.cpp index 5da677de..17fce78b 100644 --- a/src/Common/Token.cpp +++ b/src/Common/Token.cpp @@ -17,62 +17,94 @@ #include "SecurityToken.h" #include "EMVToken.h" +#include "PCSCException.h" #include "iostream" using namespace std; namespace VeraCrypt { - vector<shared_ptr<TokenKeyfile>> Token::GetAvailableKeyfiles(bool EMVOption) { + vector<shared_ptr<TokenKeyfile>> Token::GetAvailableKeyfiles(bool isEMVSupportEnabled) + { vector<shared_ptr<TokenKeyfile>> availableKeyfiles; bool securityTokenLibraryInitialized = true; + bool scardLibraryInitialized = true; - try{ - foreach (SecurityTokenKeyfile k, SecurityToken::GetAvailableKeyfiles()) { + try + { + foreach (SecurityTokenKeyfile k, SecurityToken::GetAvailableKeyfiles()) + { availableKeyfiles.push_back(shared_ptr<TokenKeyfile>(new SecurityTokenKeyfile(k))); } - } catch (SecurityTokenLibraryNotInitialized){ + } + catch (SecurityTokenLibraryNotInitialized&) + { securityTokenLibraryInitialized = false; } + + if (isEMVSupportEnabled) + { + try + { + foreach (EMVTokenKeyfile k, EMVToken::GetAvailableKeyfiles()) + { + availableKeyfiles.push_back(shared_ptr<TokenKeyfile>(new EMVTokenKeyfile(k))); + } + } + catch (ScardLibraryInitializationFailed&) + { + scardLibraryInitialized = false; + } + } - if(EMVOption){ - foreach (EMVTokenKeyfile k, EMVToken::GetAvailableKeyfiles()) { - availableKeyfiles.push_back(shared_ptr<TokenKeyfile>(new EMVTokenKeyfile(k))); - } - } - - if(availableKeyfiles.size() == 0 && ! securityTokenLibraryInitialized){ - throw SecurityTokenLibraryNotInitialized(); + if (availableKeyfiles.size() == 0) + { + if (!securityTokenLibraryInitialized) + { + throw SecurityTokenLibraryNotInitialized(); + } + else if (!scardLibraryInitialized) + { + throw ScardLibraryInitializationFailed(); + } } return availableKeyfiles; } - bool Token::IsKeyfilePathValid(const wstring& tokenKeyfilePath, bool EMVOption) + bool Token::IsKeyfilePathValid(const wstring& tokenKeyfilePath, bool isEMVSupportEnabled) { - if(EMVOption){ - return SecurityToken::IsKeyfilePathValid(tokenKeyfilePath) || EMVToken::IsKeyfilePathValid(tokenKeyfilePath); - } + if (isEMVSupportEnabled) + { + return SecurityToken::IsKeyfilePathValid(tokenKeyfilePath) || EMVToken::IsKeyfilePathValid(tokenKeyfilePath); + } return SecurityToken::IsKeyfilePathValid(tokenKeyfilePath); } list <shared_ptr<TokenInfo>> Token::GetAvailableTokens() { list <shared_ptr<TokenInfo>> availableTokens; - foreach(SecurityTokenInfo securityToken, SecurityToken::GetAvailableTokens()){ + + foreach(SecurityTokenInfo securityToken, SecurityToken::GetAvailableTokens()) + { availableTokens.push_back(shared_ptr<TokenInfo>(new SecurityTokenInfo(std::move(securityToken)))); } return availableTokens ; } - shared_ptr<TokenKeyfile> Token::getTokenKeyfile(const TokenKeyfilePath path){ + shared_ptr<TokenKeyfile> Token::getTokenKeyfile(const TokenKeyfilePath& path) + { shared_ptr<TokenKeyfile> tokenKeyfile; - if(SecurityToken::IsKeyfilePathValid(path)){ + if (SecurityToken::IsKeyfilePathValid(path)) + { tokenKeyfile = shared_ptr<TokenKeyfile>(new SecurityTokenKeyfile(path)); - } else { - if(EMVToken::IsKeyfilePathValid(path)){ + } + else + { + if (EMVToken::IsKeyfilePathValid(path)) + { tokenKeyfile = shared_ptr<TokenKeyfile>(new EMVTokenKeyfile(path)); } } |