Sunshine master
Self-hosted game stream host for Moonlight.
crypto::cipher::gcm_t Class Reference

AES-GCM cipher helper that encrypts and authenticates payloads. More...

#include <src/crypto.h>

Inheritance diagram for crypto::cipher::gcm_t:
[legend]
Collaboration diagram for crypto::cipher::gcm_t:
[legend]

Public Member Functions

int decrypt (const std::string_view &cipher, std::vector< std::uint8_t > &plaintext, aes_t *iv)
 Decrypt ciphertext into the supplied plaintext buffer.
 
int encrypt (const std::string_view &plaintext, std::uint8_t *tag, std::uint8_t *ciphertext, aes_t *iv)
 Encrypts the plaintext using AES GCM mode.
 
int encrypt (const std::string_view &plaintext, std::uint8_t *tagged_cipher, aes_t *iv)
 Encrypts the plaintext using AES GCM mode. length of cipher must be at least: round_to_pkcs7_padded(plaintext.size()) + crypto::cipher::tag_size.
 
 gcm_t (const crypto::aes_t &key, bool padding=true)
 Construct an AES-GCM cipher helper with key material and IV state.
 
 gcm_t (gcm_t &&) noexcept=default
 Construct an AES-GCM cipher helper with key material and IV state.
 
gcm_toperator= (gcm_t &&) noexcept=default
 Assign state from another instance while preserving ownership semantics.
 

Additional Inherited Members

- Public Attributes inherited from crypto::cipher::cipher_t
cipher_ctx_t decrypt_ctx
 Decrypt ctx.
 
cipher_ctx_t encrypt_ctx
 Encrypt ctx.
 
aes_t key
 AES key used by the cipher context.
 
bool padding
 Enables block padding for the cipher.
 

Detailed Description

AES-GCM cipher helper that encrypts and authenticates payloads.

Constructor & Destructor Documentation

◆ gcm_t()

crypto::cipher::gcm_t::gcm_t ( const crypto::aes_t & key,
bool padding = true )

Construct an AES-GCM cipher helper with key material and IV state.

Parameters
keyAES key material used to initialize the cipher.
paddingWhether the cipher should use block padding.

Member Function Documentation

◆ decrypt()

int crypto::cipher::gcm_t::decrypt ( const std::string_view & cipher,
std::vector< std::uint8_t > & plaintext,
aes_t * iv )

Decrypt ciphertext into the supplied plaintext buffer.

Parameters
cipherCiphertext bytes to decrypt or output buffer for encryption.
plaintextPlaintext bytes to encrypt.
ivInitialization vector for the cipher operation.
Returns
Number of bytes written, signature bytes, or an error status depending on the overload.

◆ encrypt() [1/2]

int crypto::cipher::gcm_t::encrypt ( const std::string_view & plaintext,
std::uint8_t * tag,
std::uint8_t * ciphertext,
aes_t * iv )

Encrypts the plaintext using AES GCM mode.

Parameters
plaintextThe plaintext data to be encrypted.
tagThe buffer where the GCM tag will be written.
ciphertextThe buffer where the resulting ciphertext will be written.
ivThe initialization vector to be used for the encryption.
Returns
The total length of the ciphertext and GCM tag. Returns -1 in case of an error.

This function encrypts the given plaintext using the AES key in GCM mode. The initialization vector (IV) is also provided. The function handles the creation and initialization of the encryption context, and manages the encryption process. The resulting ciphertext and the GCM tag are written into the tagged_cipher buffer.

◆ encrypt() [2/2]

int crypto::cipher::gcm_t::encrypt ( const std::string_view & plaintext,
std::uint8_t * tagged_cipher,
aes_t * iv )

Encrypts the plaintext using AES GCM mode. length of cipher must be at least: round_to_pkcs7_padded(plaintext.size()) + crypto::cipher::tag_size.

Parameters
plaintextThe plaintext data to be encrypted.
tagged_cipherThe buffer where the resulting ciphertext and GCM tag will be written.
ivThe initialization vector to be used for the encryption.
Returns
The total length of the ciphertext and GCM tag written into tagged_cipher. Returns -1 in case of an error.

◆ operator=()

gcm_t & crypto::cipher::gcm_t::operator= ( gcm_t && )
defaultnoexcept

Assign state from another instance while preserving ownership semantics.

Returns
Reference or value produced by the operator.

The documentation for this class was generated from the following files: