+
+/** @class UnresolvedRefError
+ * @brief An exception caused by a reference (by UUID) to something which is not known
+ */
+class UnresolvedRefError : public std::runtime_error
+{
+public:
+ explicit UnresolvedRefError (std::string id);
+};
+
+
+/** @class TimeFormatError
+ * @brief A an error with a string passed to LocalTime
+ */
+class TimeFormatError : public std::runtime_error
+{
+public:
+ explicit TimeFormatError (std::string bad_time);
+};
+
+
+/** @class NotEncryptedError
+ * @brief An error raised when creating a DecryptedKDM object for assets that are not
+ * encrypted
+ */
+class NotEncryptedError : public std::runtime_error
+{
+public:
+ explicit NotEncryptedError (std::string const & what);
+ ~NotEncryptedError () throw () {}
+};
+
+
+/** @class ProgrammingError
+ * @brief An exception thrown when a DCP_ASSERT fails; something that should not happen
+ */
+class ProgrammingError : public std::runtime_error
+{
+public:
+ ProgrammingError (std::string file, int line);
+};
+
+
+class KDMDecryptionError : public std::runtime_error
+{
+public:
+ KDMDecryptionError (std::string message, int cipher_length, int modulus_dmax);
+};
+
+
+class KDMFormatError : public std::runtime_error
+{
+public:
+ KDMFormatError (std::string message);
+};
+
+
+class CertificateChainError : public std::runtime_error
+{
+public:
+ CertificateChainError (std::string message);
+};
+
+
+class MissingSubtitleImageError : public std::runtime_error
+{
+public:
+ MissingSubtitleImageError (std::string id);
+};
+
+
+class BadKDMDateError : public std::runtime_error
+{
+public:
+ BadKDMDateError (bool starts_too_early);
+
+ bool starts_too_early () const {
+ return _starts_too_early;