public byte[] openAuth(byte[] enc, XECPrivateKey skR, byte[] info, byte[] aad, byte[] ct, XECPublicKey pkS) {
        var ctx = setupAuthR(enc, skR, info, pkS);
        var base = ctx.base;
        // TODO wrap any exceptions in OpenError et al?
        return aead.open(base.key(), base.nonce(), aad, ct);
    }
Section 6.1 Encryption and Decryption:

<pre>
def Open&lt;MODE&gt;(enc, skR, info, aad, ct, ...):
  ctx = Setup&lt;MODE&gt;R(enc, skR, info, ...)
  return ctx.Open(aad, ct)
</pre>

Section 5.2 Encryption and Decryption:

Since we only support single-shot decryption we collapse ContextR.Open into the
parent OpenBASE, since we don't have to track sequence numbers. See also: sealBase()

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