anchor.diff:      (zerop (mod (- yy xx 1 (* +ed25519-d+ xx yy)) +ed25519-q+))))
   
   (defun ed25519-encode-int (y)
  +  "Encode an integer as a byte array (little-endian)."
     (integer-to-octets y :n-bits +ed25519-bits+ :big-endian nil))
   
   (defun ed25519-decode-int (octets)
  +  "Decode a byte array to an integer (little-endian)."
     (octets-to-integer octets :big-endian nil))
   
   (defun ed25519-encode-point (p)
  +  "Encode a point on curve25519 as a byte array."
     (let ((x (car p))
           (y (cdr p)))
       (setf (ldb (byte 1 (- +ed25519-bits+ 1)) y) (ldb (byte 1 0) x))
       (ed25519-encode-int y)))
   
   (defun ed25519-decode-point (octets)
  +  "Decode a byte array to a point on curve25519."
     (let* ((y (ed25519-decode-int octets))
            (b (ldb (byte 1 (- +ed25519-bits+ 1)) y)))
       (setf (ldb (byte 1 (- +ed25519-bits+ 1)) y) 0)
  
positive.code:     x))
  
  (defun ed25519-edwards-double (p)
    (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)))
    (let* ((x (car p))
           (y (cdr p))
  
negative.code:     (produce-digest digest)))
  
  (defun ed25519-public-key (sk)
    "Compute the public key associated to the private key SK."
    (let ((h (ed25519-hash sk)))
      (setf h (subseq h 0 (/ +ed25519-bits+ 8)))
      (setf (ldb (byte 3 0) (elt h 0)) 0)
  