anchor.diff:      (let ((user-buffer (make-array *max-username-length*
                                      :element-type '(unsigned-byte 8))))
         (when (> (read-sequence user-buffer socket) 0)
  +        (log :info "login requested")
           (let ((user (buffer-to-string user-buffer)))
             (write-byte (handler-case
                             (if (and (can-login-p user)
  
positive.code:   (let ((device (find-hermes-device))
          (user-file (merge-pathnames user *user-tokens-path*)))
      (unless device
        (return-from can-login-p nil))
      (unless (probe-file user-file)
        (return-from can-login-p nil))
      (let ((user-token (read-user-token user-file))
            (device-token (read-device-token device)))
  
negative.code:          (user-file (merge-pathnames user *user-tokens-path*))
           ;; I could read it on the user file too, really.
           (old-token (read-device-token device)))
      (unless device
        (log :err "no device found to write new token")
        (return-from regenerate-token nil))
      (unless (probe-file user-file)
        (log :err "no user file to write new token")
        (return-from regenerate-token nil))
      (write-device-old-token device old-token)
      (write-device-token device new-token)
      (write-user-old-token user-file old-token)
      (write-user-token user-file new-token)
      (write-device-zeroes device)
      (write-user-zeroes user-file))
    t)
  
  (defun write-device-token (device token)
    (write-token device token *fingerprint-length*))
  