summaryrefslogtreecommitdiffstats
path: root/src/crypto.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto.h')
-rw-r--r--src/crypto.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/crypto.h b/src/crypto.h
index fbb77ec..8f94fae 100644
--- a/src/crypto.h
+++ b/src/crypto.h
@@ -24,7 +24,7 @@
*/
/**
- \file src/crypto.h
+ \file
Cyptographic algorithm API and utilities
*/
@@ -38,29 +38,41 @@
#include <string.h>
+/** Contains information about a cipher algorithm */
struct fastd_cipher_info {
- size_t key_length;
- size_t iv_length;
+ size_t key_length; /**< The key length used by the cipher */
+ size_t iv_length; /**< The initialization vector length used by the cipher */
};
+/** A stream cipher implementation */
struct fastd_cipher {
+ /**< Checks if the algorithm is available on the platform used. If NULL, the algorithm is always available. */
bool (*available)(void);
+ /** Initializes a cipher context with the given key */
fastd_cipher_state_t* (*init)(const uint8_t *key);
+ /** Encrypts or decrypts data */
bool (*crypt)(const fastd_cipher_state_t *state, fastd_block128_t *out, const fastd_block128_t *in, size_t len, const uint8_t *iv);
+ /** Frees a cipher context */
void (*free)(fastd_cipher_state_t *state);
};
+/** Contains information about a message authentication code algorithm */
struct fastd_mac_info {
- size_t key_length;
+ size_t key_length; /**< The key length used by the MAC */
};
+/** A MAC implementation */
struct fastd_mac {
+ /**< Checks if the algorithm is available on the platform used. If NULL, the algorithm is always available. */
bool (*available)(void);
+ /** Initializes a MAC context with the given key */
fastd_mac_state_t* (*init)(const uint8_t *key);
+ /** Computes the MAC of data blocks */
bool (*hash)(const fastd_mac_state_t *state, fastd_block128_t *out, const fastd_block128_t *in, size_t n_blocks);
+ /** Frees a MAC context */
void (*free)(fastd_mac_state_t *state);
};
@@ -80,16 +92,19 @@ const fastd_mac_info_t* fastd_mac_info_get_by_name(const char *name);
const fastd_mac_t* fastd_mac_get(const fastd_mac_info_t *info);
+/** Sets a range of memory to zero, ensuring the operation can't be optimized out by the compiler */
static inline void secure_memzero(void *s, size_t n) {
memset(s, 0, n);
__asm__ volatile("" : : "m"(s));
}
+/** XORs two blocks of data */
static inline void xor(fastd_block128_t *x, const fastd_block128_t *a, const fastd_block128_t *b) {
x->qw[0] = a->qw[0] ^ b->qw[0];
x->qw[1] = a->qw[1] ^ b->qw[1];
}
+/** XORs one block of data into another */
static inline void xor_a(fastd_block128_t *x, const fastd_block128_t *a) {
xor(x, x, a);
}