Csilk 0.2.1
A lightweight, high-performance C HTTP web framework
Loading...
Searching...
No Matches
csilk_cipher_driver_t Struct Reference

Virtual function table implemented by each cipher backend. More...

#include <cipher.h>

Data Fields

int(* symmetric_encrypt )(const uint8_t *key, size_t key_len, const uint8_t *plaintext, size_t plaintext_len, const uint8_t *iv, size_t iv_len, uint8_t *ciphertext, size_t *ciphertext_len, uint8_t *tag, size_t tag_len)
 AES-256-GCM encryption.
 
int(* symmetric_decrypt )(const uint8_t *key, size_t key_len, const uint8_t *ciphertext, size_t ciphertext_len, const uint8_t *iv, size_t iv_len, const uint8_t *tag, size_t tag_len, uint8_t *plaintext, size_t *plaintext_len)
 AES-256-GCM decryption with authentication tag verification.
 
int(* generate_keypair )(char *public_key, size_t *pub_len, char *private_key, size_t *priv_len)
 Generate an RSA-2048 key pair.
 
int(* asymmetric_encrypt )(const char *public_key, size_t pub_len, const uint8_t *plaintext, size_t plaintext_len, uint8_t *ciphertext, size_t *ciphertext_len)
 RSA-OAEP encryption.
 
int(* asymmetric_decrypt )(const char *private_key, size_t priv_len, const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *plaintext, size_t *plaintext_len)
 RSA-OAEP decryption.
 
int(* sign )(const char *private_key, size_t priv_len, const uint8_t *data, size_t data_len, uint8_t *signature, size_t *sig_len)
 RSA-PSS signature generation.
 
int(* verify )(const char *public_key, size_t pub_len, const uint8_t *data, size_t data_len, const uint8_t *signature, size_t sig_len)
 RSA-PSS signature verification.
 

Detailed Description

Virtual function table implemented by each cipher backend.

All function pointers must be non-NULL except where noted. Operations follow the same parameter patterns as their csilk* counterparts in internal.h so that the dispatch layer is transparent.

Field Documentation

◆ asymmetric_decrypt

int(* csilk_cipher_driver_t::asymmetric_decrypt) (const char *private_key, size_t priv_len, const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *plaintext, size_t *plaintext_len)

RSA-OAEP decryption.

Parameters
private_keyPEM-encoded RSA private key.
priv_lenPrivate key PEM length.
ciphertextData to decrypt.
ciphertext_lenCiphertext length (typically 256).
[out]plaintextOutput buffer.
[in,out]plaintext_lenIn: capacity, Out: actual plaintext length.
Returns
0 on success, -1 on failure.

◆ asymmetric_encrypt

int(* csilk_cipher_driver_t::asymmetric_encrypt) (const char *public_key, size_t pub_len, const uint8_t *plaintext, size_t plaintext_len, uint8_t *ciphertext, size_t *ciphertext_len)

RSA-OAEP encryption.

Parameters
public_keyPEM-encoded RSA public key.
pub_lenPublic key PEM length.
plaintextData to encrypt (max ~190 bytes for RSA-2048).
plaintext_lenPlaintext length.
[out]ciphertextOutput buffer (>= CSILK_RSA_KEY_SIZE bytes).
[in,out]ciphertext_lenIn: capacity, Out: actual ciphertext length.
Returns
0 on success, -1 on failure.

◆ generate_keypair

int(* csilk_cipher_driver_t::generate_keypair) (char *public_key, size_t *pub_len, char *private_key, size_t *priv_len)

Generate an RSA-2048 key pair.

Parameters
[out]public_keyPEM-encoded public key output buffer.
[in,out]pub_lenIn: capacity, Out: actual PEM length.
[out]private_keyPEM-encoded private key output buffer.
[in,out]priv_lenIn: capacity, Out: actual PEM length.
Returns
0 on success, -1 on failure.

◆ sign

int(* csilk_cipher_driver_t::sign) (const char *private_key, size_t priv_len, const uint8_t *data, size_t data_len, uint8_t *signature, size_t *sig_len)

RSA-PSS signature generation.

Parameters
private_keyPEM-encoded RSA private key.
priv_lenPrivate key PEM length.
dataData to sign.
data_lenData length.
[out]signatureOutput buffer (>= CSILK_RSA_SIGNATURE_SIZE bytes).
[in,out]sig_lenIn: capacity, Out: actual signature length.
Returns
0 on success, -1 on failure.

◆ symmetric_decrypt

int(* csilk_cipher_driver_t::symmetric_decrypt) (const uint8_t *key, size_t key_len, const uint8_t *ciphertext, size_t ciphertext_len, const uint8_t *iv, size_t iv_len, const uint8_t *tag, size_t tag_len, uint8_t *plaintext, size_t *plaintext_len)

AES-256-GCM decryption with authentication tag verification.

Parameters
keyDecryption key.
key_lenKey length.
ciphertextData to decrypt.
ciphertext_lenCiphertext length.
iv12-byte nonce.
iv_len12.
tag16-byte authentication tag.
tag_len16.
[out]plaintextOutput buffer (>= ciphertext_len bytes).
[in,out]plaintext_lenIn: capacity, Out: actual plaintext length.
Returns
0 on success, -1 on tag mismatch or error.

◆ symmetric_encrypt

int(* csilk_cipher_driver_t::symmetric_encrypt) (const uint8_t *key, size_t key_len, const uint8_t *plaintext, size_t plaintext_len, const uint8_t *iv, size_t iv_len, uint8_t *ciphertext, size_t *ciphertext_len, uint8_t *tag, size_t tag_len)

AES-256-GCM encryption.

Parameters
keyEncryption key (must be CSILK_AES256_KEY_SIZE bytes).
key_lenKey length (must be 32).
plaintextData to encrypt.
plaintext_lenPlaintext length.
iv12-byte nonce (must be CSILK_GCM_IV_SIZE bytes).
iv_len12.
[out]ciphertextOutput buffer (>= plaintext_len bytes).
[in,out]ciphertext_lenIn: capacity, Out: actual ciphertext length.
[out]tag16-byte authentication tag buffer.
tag_len16.
Returns
0 on success, -1 on failure.

◆ verify

int(* csilk_cipher_driver_t::verify) (const char *public_key, size_t pub_len, const uint8_t *data, size_t data_len, const uint8_t *signature, size_t sig_len)

RSA-PSS signature verification.

Parameters
public_keyPEM-encoded RSA public key.
pub_lenPublic key PEM length.
dataOriginal signed data.
data_lenData length.
signatureSignature to verify.
sig_lenSignature length.
Returns
0 on valid signature, -1 on invalid or error.

The documentation for this struct was generated from the following file: