private byte[] decryptNoPrefix(final byte[] ciphertext, final byte[] contextInfo)
      throws GeneralSecurityException {
    EllipticCurve curve = recipientPrivateKey.getParams().getCurve();
    int headerSize = EllipticCurves.encodingSizeInBytes(curve, ecPointFormat);
    if (ciphertext.length < headerSize) {
      throw new GeneralSecurityException("ciphertext too short");
    }
    byte[] kemBytes = Arrays.copyOfRange(ciphertext, 0, headerSize);
    byte[] symmetricKey =
        recipientKem.generateKey(
            kemBytes,
            hkdfHmacAlgo,
            hkdfSalt,
            contextInfo,
            demHelper.getSymmetricKeySizeInBytes(),
            ecPointFormat);
    AeadOrDaead aead = demHelper.getAeadOrDaead(symmetricKey);
    return aead.decrypt(Arrays.copyOfRange(ciphertext, headerSize, ciphertext.length), EMPTY_AAD);
  }
ECIES encryption with HKDF-KEM (key encapsulation mechanism) and AEAD-DEM (data encapsulation
mechanism).

@since 1.0.0
java_src/src/main/java/com/google/crypto/tink/subtle/EciesAeadHkdfHybridDecrypt.java