anchor.diff:    (let ((accumulator (poly1305-accumulator mac))
           (r (poly1305-r mac))
           (s (poly1305-s mac)))
  -    (declare (type (simple-array (unsigned-byte 32) (5)) accumulator r)
  -             (type (simple-array (unsigned-byte 32) (4)) s))
  +    (declare (type (simple-array (unsigned-byte 32) (5)) accumulator)
  +             (type (simple-array (unsigned-byte 32) (4)) r s))
       (fill accumulator 0)
  -    (setf (aref r 0) (logand (ub32ref/le key 0) #x3ffffff)
  -          (aref r 1) (logand (mod32ash (ub32ref/le key 3) -2) #x3ffff03)
  -          (aref r 2) (logand (mod32ash (ub32ref/le key 6) -4) #x3ffc0ff)
  -          (aref r 3) (logand (mod32ash (ub32ref/le key 9) -6) #x3f03fff)
  -          (aref r 4) (logand (mod32ash (ub32ref/le key 12) -8) #x00fffff))
  +    (setf (aref r 0) (logand (ub32ref/le key 0) #x0fffffff)
  +          (aref r 1) (logand (ub32ref/le key 4) #x0ffffffc)
  +          (aref r 2) (logand (ub32ref/le key 8) #x0ffffffc)
  +          (aref r 3) (logand (ub32ref/le key 12) #x0ffffffc))
       (setf (aref s 0) (ub32ref/le key 16)
             (aref s 1) (ub32ref/le key 20)
             (aref s 2) (ub32ref/le key 24)
  
positive.code:       (poly1305-process-full-blocks accumulator r buffer 0 16 t))
  
      ;; Produce the tag
      (let ((h0 (aref accumulator 0))
            (h1 (aref accumulator 1))
            (h2 (aref accumulator 2))
            (h3 (aref accumulator 3))
            (h4 (aref accumulator 4))
            (c 0)
            (g0 0)
            (g1 0)
            (g2 0)
            (g3 0)
            (g4 0)
            (f 0)
            (mask 0))
        (declare (type (unsigned-byte 32) h0 h1 h2 h3 h4 c g0 g1 g2 g3 g4 mask)
                 (type (unsigned-byte 64) f))
        (setf c (mod32ash h1 -26)
              h1 (logand h1 #x3ffffff))
        (setf h2 (mod32+ h2 c)
              c (mod32ash h2 -26)
              h2 (logand h2 #x3ffffff))
        (setf h3 (mod32+ h3 c)
              c (mod32ash h3 -26)
              h3 (logand h3 #x3ffffff))
        (setf h4 (mod32+ h4 c)
              c (mod32ash h4 -26)
              h4 (logand h4 #x3ffffff))
        (setf h0 (mod32+ h0 (mod32* c 5))
              c (mod32ash h0 -26)
              h0 (logand h0 #x3ffffff))
        (setf h1 (mod32+ h1 c))
  
        (setf g0 (mod32+ h0 5)
              c (mod32ash g0 -26)
              g0 (logand g0 #x3ffffff))
        (setf g1 (mod32+ h1 c)
              c (mod32ash g1 -26)
              g1 (logand g1 #x3ffffff))
        (setf g2 (mod32+ h2 c)
              c (mod32ash g2 -26)
              g2 (logand g2 #x3ffffff))
        (setf g3 (mod32+ h3 c)
              c (mod32ash g3 -26)
              g3 (logand g3 #x3ffffff))
        (setf g4 (mod32- (mod32+ h4 c) #.(ash 1 26)))
  
        (setf mask (mod32- (mod32ash g4 -31) 1)
              g0 (logand g0 mask)
              g1 (logand g1 mask)
              g2 (logand g2 mask)
              g3 (logand g3 mask)
              g4 (logand g4 mask)
              mask (mod32lognot mask)
              h0 (logior (logand h0 mask) g0)
              h1 (logior (logand h1 mask) g1)
              h2 (logior (logand h2 mask) g2)
              h3 (logior (logand h3 mask) g3)
              h4 (logior (logand h4 mask) g4))
  
        (setf h0 (logior h0 (mod32ash h1 26))
              h1 (logior (mod32ash h1 -6) (mod32ash h2 20))
              h2 (logior (mod32ash h2 -12) (mod32ash h3 14))
              h3 (logior (mod32ash h3 -18) (mod32ash h4 8)))
  
        (setf f (mod64+ h0 (aref s 0))
              h0 (logand f #xffffffff))
        (setf f (mod64+ h1 (mod64+ (aref s 1) (mod64ash f -32)))
              h1 (logand f #xffffffff))
        (setf f (mod64+ h2 (mod64+ (aref s 2) (mod64ash f -32)))
              h2 (logand f #xffffffff))
        (setf f (mod64+ h3 (mod64+ (aref s 3) (mod64ash f -32)))
              h3 (logand f #xffffffff))
  
        (let ((tag (make-array 16 :element-type '(unsigned-byte 8))))
          (setf (ub32ref/le tag 0) h0
                (ub32ref/le tag 4) h1
                (ub32ref/le tag 8) h2
                (ub32ref/le tag 12) h3)
          tag))))
  
  (defmac poly1305
          make-poly1305
  
negative.code:   (let ((buffer (copy-seq (poly1305-buffer mac)))
          (buffer-length (poly1305-buffer-length mac))
          (accumulator (copy-seq (poly1305-accumulator mac)))
          (r (poly1305-r mac))
          (s (poly1305-s mac)))
      (declare (type (simple-array (unsigned-byte 8) (16)) buffer)
               (type (integer 0 16) buffer-length)
               (type (simple-array (unsigned-byte 32) (5)) accumulator)
               (type (simple-array (unsigned-byte 32) (4)) r s))
  
      ;; Process the buffer
      (when (plusp buffer-length)
  