#include "Token.h" #include "Platform/Finally.h" #include "Platform/ForEach.h" #if !defined(TC_WINDOWS) || defined(TC_PROTOTYPE) #include "Platform/SerializerFactory.h" #include "Platform/StringConverter.h" #include "Platform/SystemException.h" #else #include "Dictionary.h" #include "Language.h" #endif #include #include #include #include "SecurityToken.h" #include "EMVToken.h" #include "iostream" using namespace std; namespace VeraCrypt { vector> Token::GetAvailableKeyfiles(bool EMVOption) { vector> availableKeyfiles; bool securityTokenLibraryInitialized = true; try{ foreach (SecurityTokenKeyfile k, SecurityToken::GetAvailableKeyfiles()) { availableKeyfiles.push_back(shared_ptr(new SecurityTokenKeyfile(k))); } } catch (SecurityTokenLibraryNotInitialized){ securityTokenLibraryInitialized = false; } if(EMVOption){ foreach (EMVTokenKeyfile k, EMVToken::GetAvailableKeyfiles()) { availableKeyfiles.push_back(shared_ptr(new EMVTokenKeyfile(k))); } } if(availableKeyfiles.size() == 0 && ! securityTokenLibraryInitialized){ throw SecurityTokenLibraryNotInitialized(); } return availableKeyfiles; } bool Token::IsKeyfilePathValid(const wstring& tokenKeyfilePath, bool EMVOption) { if(EMVOption){ return SecurityToken::IsKeyfilePathValid(tokenKeyfilePath) || EMVToken::IsKeyfilePathValid(tokenKeyfilePath); } return SecurityToken::IsKeyfilePathValid(tokenKeyfilePath); } list > Token::GetAvailableTokens() { list > availableTokens; foreach(SecurityTokenInfo securityToken, SecurityToken::GetAvailableTokens()){ availableTokens.push_back(shared_ptr(new SecurityTokenInfo(std::move(securityToken)))); } return availableTokens ; } shared_ptr Token::getTokenKeyfile(const TokenKeyfilePath path){ shared_ptr tokenKeyfile; if(SecurityToken::IsKeyfilePathValid(path)){ tokenKeyfile = shared_ptr(new SecurityTokenKeyfile(path)); } else { if(EMVToken::IsKeyfilePathValid(path)){ tokenKeyfile = shared_ptr(new EMVTokenKeyfile(path)); } } return tokenKeyfile; } }