public Sealed sealAuth(XECPublicKey pkR, byte[] info, byte[] aad, byte[] pt, XECPrivateKey skS) {
        var encAndCtx = setupAuthS(pkR, info, skS);
        var base = encAndCtx.base;
        byte[] ct = aead.seal(base.key(), base.nonce(), aad, pt);
        return new Sealed(encAndCtx.enc, ct);
    }
Section 6.1 Encryption and Decryption:

<pre>
def Seal&lt;MODE&gt;(pkR, info, aad, pt, ...):
  enc, ctx = Setup&lt;MODE&gt;S(pkR, info, ...)
  ct = ctx.Seal(aad, pt)
  return enc, ct
</pre>

Section 5.2 Encryption and Decryption:

Since we only support single-shot encryption we collapse ContextS.Seal into the
parent SealBASE, since we don't have to track sequence numbers. This means
ComputeNonce is a no-op since the first sequence number is 0 which will always
XOR to the same nonce.

<pre>
def ContextS.Seal(aad, pt):
  ct = Seal(self.key, self.ComputeNonce(self.seq), aad, pt)
  self.IncrementSeq()
  return ct
</pre>
security-utils/src/main/java/com/yahoo/security/hpke/Hpke.java