anchor.diff:                             (floor total-amount ,block-length-expr)
                            (declare (ignore leftover))
                            (* full-blocks ,block-length-expr)))))))))
  -  (define-mode-function))
  +  (define-mode-function encrypt decrypt message-length))
   
   ) ; DEFINE-MODE-FUNCTION MACROLET
   
  
positive.code:                      finally (return-from decrypt-with-mode
                                 (let ((n-bytes-decrypted (- ciphertext-end ciphertext-start)))
                                   (setf (iv-position mode) iv-position)
                                   (values n-bytes-decrypted n-bytes-decrypted))))))))
    (define-mode-function))
  
  (macrolet ((mode-definition (cipher-specializer block-length-binding
                                                  block-length-expr)
               (declare (ignore block-length-binding block-length-expr))
               `(defmethod encrypted-message-length ((cipher ,cipher-specializer)
                                                     (mode ofb-mode) length
  
negative.code:                 (let ,block-length-binding
                    ;; Just count the number of full blocks.
                    (* (truncate length ,block-length-expr) ,block-length-expr)))))
    (define-mode-function encrypt decrypt message-length))
  
  
  ;;; CBC mode
  
  (macrolet ((encrypt (cipher-specializer block-length-binding
                                                  block-length-expr)
               `(defmethod encrypt-with-mode ((cipher ,cipher-specializer)
                                              (mode cbc-mode) plaintext ciphertext
  