Component digests

You are here: All Systems / ironclad-tests / test-vectors / digests

(in-package :crypto-tests)

(rtest:deftest make-digest.error
  (handler-case (crypto:make-digest :error)
    (crypto:unsupported-digest () :ok)
    (:no-error () :error)
)

  :ok
)


(rtest:deftest digest-length.error
  (handler-case (crypto:digest-length :error)
    (crypto:unsupported-digest () :ok)
    (:no-error () :error)
)

  :ok
)


(rtest:deftest produce-digest.buffer-space
  (let ((sequence (make-array 0 :element-type '(unsigned-byte 8))))
    (dolist (digest (crypto:list-all-digests) :ok)
      (let* ((digest-length (crypto:digest-length digest))
             (buffer (make-array (1- digest-length)
                                 :element-type '(unsigned-byte 8)
)
)
)

        (handler-case (crypto:digest-sequence digest sequence
                                              :digest buffer
                                              :digest-start 0
)

          (crypto:insufficient-buffer-space () :ok)
          (:no-error () (return :error))
)
)
)
)

  :ok
)


(rtest:deftest produce-digest.using-buffers
  (let ((sequence (make-array 0 :element-type '(unsigned-byte 8))))
    (dolist (digest (crypto:list-all-digests) :ok)
      (let* ((digest-length (crypto:digest-length digest))
             (buffer (make-array digest-length
                                 :element-type '(unsigned-byte 8)
)
)

             (returned (crypto:digest-sequence digest sequence
                                               :digest buffer
                                               :digest-start 0
)
)
)

        (unless (eq returned buffer)
          (return :error)
)
)
)
)

  :ok
)


#.(loop for digest in (crypto:list-all-digests)
        collect `(rtest:deftest ,digest
                   (run-test-vector-file ,digest *digest-tests*) t
)
into forms
        finally (return `(progn ,@forms))
)

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