R: Low-level RSA encryption

rsa_encrypt {openssl} | R Documentation

## Low-level RSA encryption

### Description

Asymmetric encryption and decryption with RSA. Because RSA can only encrypt messages smaller than the size of the key, it is typically used only for exchanging a random session-key. This session key is used to encipher arbitrary sized data via a stream cipher such as aes_cbc. See `encrypt_envelope()` for a high-level wrappers combining RSA and AES in this way.

### Usage

    rsa_encrypt(data, pubkey = my_pubkey())

    rsa_decrypt(data, key = my_key(), password = askpass)

### Arguments

`data` | raw vector of max 245 bytes (for 2048 bit keys) with data to encrypt/decrypt
`pubkey` | public key or file path. See `read_pubkey()`.
`key` | private key or file path. See `read_key()`.
`password` | string or a function to read protected keys. See `read_key()`.

### Examples

    # Generate test keys
    key <- rsa_keygen()
    pubkey <- key$pubkey

    # Encrypt data with AES
    tempkey <- rand_bytes(32)
    iv <- rand_bytes(16)
    blob <- aes_cbc_encrypt(system.file("CITATION"), tempkey, iv = iv)

    # Encrypt tempkey using receivers public RSA key
    ciphertext <- rsa_encrypt(tempkey, pubkey)

    # Receiver decrypts tempkey from private RSA key
    tempkey <- rsa_decrypt(ciphertext, key)
    message <- aes_cbc_decrypt(blob, tempkey, iv)
    out <- rawToChar(message)

[Package openssl version 2.0.2 Index]