Component conditions

You are here: All Systems / ironclad / conditions

;;;; conditions.lisp -- various error conditions

(in-package :ironclad)

(define-condition ironclad-error (simple-error)
  ()
  (:documentation "All errors signaled by IRONCLAD are of this type.")
)


(define-condition key-not-supplied (ironclad-error)
  ((cipher :initarg :cipher :reader cipher))
  (:report (lambda (condition stream)
             (format stream "Cipher ~A requires a key" (cipher condition))
)
)

  (:documentation "Signaled when a key is not provided at the initialization
of a cipher."
)
)


(define-condition initialization-vector-not-supplied (ironclad-error)
  ((mode :initarg :mode :reader mode))
  (:report (lambda (condition stream)
             (format stream "Mode ~A requires an initialization vector"
                     (mode condition)
)
)
)

  (:documentation "Signaled when an initialization vector is required
for a particular mode of operation but not supplied."
)
)


(define-condition invalid-initialization-vector (ironclad-error)
  ((cipher :initarg :cipher :reader cipher)
   (block-length :initarg :block-length :reader block-length)
)

  (:report (lambda (condition stream)
             (format stream "Cipher ~A requires an initialization vector of length ~D"
                     (cipher condition)
                     (block-length condition)
)
)
)

  (:documentation "Signaled when an invalid initialization vector is supplied to MAKE-CIPHER.")
)


(define-condition invalid-key-length (ironclad-error)
  ((cipher :initarg :cipher :reader cipher)
   (lengths :initarg :accepted-lengths :reader accepted-lengths)
)

  (:report (lambda (condition stream)
             (format stream "Cipher ~A only accepts keys of these lengths: ~A"
                     (cipher condition)
                     (accepted-lengths condition)
)
)
)

  (:documentation "Signaled when a key is not the proper length for a cipher.")
)


(define-condition unsupported-cipher (ironclad-error)
  ((cipher :initarg :name :reader cipher))
  (:report (lambda (condition stream)
             (format stream "Cipher ~A is not a supported cipher"
                     (cipher condition)
)
)
)

  (:documentation "Signaled when an invalid cipher name is provided to MAKE-CIPHER.")
)


(define-condition unsupported-mode (ironclad-error)
  ((mode :initarg :mode :reader mode)
   (cipher :initarg :cipher :reader cipher)
)

  (:report (lambda (condition stream)
             (if (cipher condition)
                 (format stream "Mode ~A is not a supported mode for ~A"
                         (mode condition) (cipher condition)
)

                 (format stream "Mode ~A is not a supported mode"
                         (mode condition)
)
)
)
)

  (:documentation "Signaled when an invalid mode name is provided to MAKE-CIPHER.")
)


(define-condition unsupported-digest (ironclad-error)
  ((digest :initarg :name :reader digest))
  (:report (lambda (condition stream)
             (format stream "Digest ~A is not a supported digest"
                     (digest condition)
)
)
)

  (:documentation "Signaled when an invalid digest name is provided to MAKE-DIGEST.")
)


(define-condition insufficient-buffer-space (ironclad-error)
  ((buffer :initarg :buffer :reader insufficient-buffer-space-buffer)
   (start :initarg :start :reader insufficient-buffer-space-start)
   (length :initarg :length :reader insufficient-buffer-space-length)
)

  (:report (lambda (condition stream)
             (format stream "Buffer ~A cannot accomodate ~D elements starting at index ~D"
                     (insufficient-buffer-space-buffer condition)
                     (insufficient-buffer-space-length condition)
                     (insufficient-buffer-space-start condition)
)
)
)

  (:documentation "Signaled when insufficient buffer space exists for an operation.")
)


(define-condition invalid-padding (ironclad-error)
  ((padding-name :initarg :name :reader invalid-padding-padding-name)
   (block :initarg :block :reader invalid-padding-block)
)

  (:report (lambda (condition stream)
             (format stream "The ~A padding in block ~A is invalid"
                     (invalid-padding-padding-name condition)
                     (invalid-padding-block condition)
)
)
)

  (:documentation "Signaled when padding in a block is determined to be invalid.")
)


Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.