VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/PCSCException.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/PCSCException.h')
-rw-r--r--src/Common/PCSCException.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/Common/PCSCException.h b/src/Common/PCSCException.h
new file mode 100644
index 00000000..6c7766b5
--- /dev/null
+++ b/src/Common/PCSCException.h
@@ -0,0 +1,136 @@
+#ifndef TC_HEADER_Common_PCSCException
+#define TC_HEADER_Common_PCSCException
+
+#include "Platform/PlatformBase.h"
+#if defined (TC_WINDOWS) && !defined (TC_PROTOTYPE)
+# include "Exception.h"
+#else
+# include "Platform/Exception.h"
+#endif
+
+#include "SCardLoader.h"
+
+#ifdef TC_MACOSX
+#define LONG_PCSC uint32_t
+#else
+#define LONG_PCSC LONG
+#endif
+
+namespace VeraCrypt
+{
+ struct PCSCException: public Exception
+ {
+ PCSCException(LONG_PCSC errorCode = (LONG_PCSC)-1): ErrorCode(errorCode){}
+
+#ifdef TC_HEADER_Platform_Exception
+ virtual ~PCSCException() throw () { }
+ TC_SERIALIZABLE_EXCEPTION(PCSCException);
+#else
+ void Show(HWND parent) const;
+#endif
+
+ operator string () const;
+ LONG_PCSC GetErrorCode() const { return ErrorCode; }
+
+ protected:
+ LONG_PCSC ErrorCode;
+ };
+
+ struct CommandAPDUNotValid: public Exception
+ {
+ CommandAPDUNotValid() : SrcPos (""), ErrorStr ("") { }
+ CommandAPDUNotValid(const string& srcPos, const string& errorStr) : SrcPos (srcPos), ErrorStr(errorStr) { }
+
+#ifdef TC_HEADER_Platform_Exception
+ virtual ~CommandAPDUNotValid() throw () { }
+ TC_SERIALIZABLE_EXCEPTION(CommandAPDUNotValid);
+#else
+ void Show(HWND parent) const;
+#endif
+
+ operator string () const;
+
+ protected:
+ string SrcPos;
+ string ErrorStr;
+ };
+
+#ifdef TC_HEADER_Platform_Exception
+
+ #define TC_EXCEPTION(NAME) TC_EXCEPTION_DECL(NAME,Exception)
+
+ #undef TC_EXCEPTION_SET
+ #define TC_EXCEPTION_SET \
+ TC_EXCEPTION_NODECL (PCSCException); \
+ TC_EXCEPTION_NODECL (CommandAPDUNotValid); \
+ TC_EXCEPTION (ExtendedAPDUNotSupported); \
+ TC_EXCEPTION (ScardLibraryInitializationFailed); \
+ TC_EXCEPTION (EMVUnknownCardType); \
+ TC_EXCEPTION (EMVSelectAIDFailed); \
+ TC_EXCEPTION (EMVIccCertNotFound); \
+ TC_EXCEPTION (EMVIssuerCertNotFound); \
+ TC_EXCEPTION (EMVCPLCNotFound); \
+ TC_EXCEPTION (InvalidEMVPath); \
+ TC_EXCEPTION (EMVKeyfileDataNotFound); \
+ TC_EXCEPTION (EMVPANNotFound); \
+
+ TC_EXCEPTION_SET;
+
+ #undef TC_EXCEPTION
+
+#else // !TC_HEADER_Platform_Exception
+
+ struct ExtendedAPDUNotSupported: public Exception
+ {
+ void Show(HWND parent) const { Error("EXTENDED_APDU_UNSUPPORTED", parent); }
+ };
+
+ struct ScardLibraryInitializationFailed: public Exception
+ {
+ void Show(HWND parent) const { Error("SCARD_MODULE_INIT_FAILED", parent); }
+ };
+
+ struct EMVUnknownCardType: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_UNKNOWN_CARD_TYPE", parent); }
+ };
+
+ struct EMVSelectAIDFailed: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_SELECT_AID_FAILED", parent); }
+ };
+
+ struct EMVIccCertNotFound: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_ICC_CERT_NOTFOUND", parent); }
+ };
+
+ struct EMVIssuerCertNotFound: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_ISSUER_CERT_NOTFOUND", parent); }
+ };
+
+ struct EMVCPLCNotFound: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_CPLC_NOTFOUND", parent); }
+ };
+
+ struct EMVPANNotFound: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_PAN_NOTFOUND", parent); }
+ };
+
+ struct InvalidEMVPath: public Exception
+ {
+ void Show(HWND parent) const { Error("INVALID_EMV_PATH", parent); }
+ };
+
+ struct EMVKeyfileDataNotFound: public Exception
+ {
+ void Show(HWND parent) const { Error("EMV_KEYFILE_DATA_NOTFOUND", parent); }
+ };
+
+#endif // !TC_HEADER_Platform_Exception
+}
+
+#endif // TC_HEADER_Common_PCSCException \ No newline at end of file