Skip to contents

Mirrors morie.crypto.hybrid_encrypt byte-for-byte. Encapsulates under the recipient's ML-KEM-768 public key, derives a wrapping key from HKDF(kem_ct || pk), wraps a random 32-byte symmetric key with ChaCha20-Poly1305, then encrypts the payload under that symmetric key. Container format (big-endian lengths): len(kem_ct)[4] || kem_ct || wrap_nonce[12] || wrapped_key[32] || wrap_tag[16] || payload_nonce[12] || aead_ct || payload_tag[16].

Usage

morie_crypto_hybrid_encrypt(plaintext, recipient_pk)

Arguments

plaintext

Raw vector or character string to encrypt.

recipient_pk

Raw vector: recipient's ML-KEM-768 public key (1184 bytes).

Value

Raw vector container.

Examples

if (morie_crypto_liboqs_available()) {
  kp <- morie_crypto_hybrid_keygen()
  ct <- morie_crypto_hybrid_encrypt("hello", kp$pk)
  rawToChar(morie_crypto_hybrid_decrypt(ct, kp$sk))
}