X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fbluesky-private.h;h=74b4e06784d6a32663b1315c2ea8c86f6b4faab4;hb=52a6a600573a0483ea1aa99ec018e649299ea151;hp=61238eb6d7608cef304ce6ef8dc8e44c0d28f35d;hpb=0a5db8fb9777ff872240053593fd86af71360ee8;p=bluesky.git diff --git a/bluesky/bluesky-private.h b/bluesky/bluesky-private.h index 61238eb..74b4e06 100644 --- a/bluesky/bluesky-private.h +++ b/bluesky/bluesky-private.h @@ -58,6 +58,23 @@ void bluesky_serialize_cloudlog(BlueSkyCloudLog *log, GString *authenticated, GString *writable); +/* Cryptographic operations. */ +#define CRYPTO_BLOCK_SIZE 16 /* 128-bit AES */ +#define CRYPTO_KEY_SIZE 16 +#define CRYPTO_HASH_SIZE 32 /* SHA-256 */ + +typedef struct BlueSkyCryptKeys { + uint8_t encryption_key[CRYPTO_KEY_SIZE]; + uint8_t authentication_key[CRYPTO_HASH_SIZE]; +} BlueSkyCryptKeys; + +void bluesky_crypt_init(); +void bluesky_crypt_hash_key(const char *keystr, uint8_t *out); +void bluesky_crypt_random_bytes(guchar *buf, gint len); +void bluesky_crypt_derive_keys(BlueSkyCryptKeys *keys, const gchar *master); +BlueSkyRCStr *bluesky_crypt_encrypt(BlueSkyRCStr *in, const uint8_t *key); +BlueSkyRCStr *bluesky_crypt_decrypt(BlueSkyRCStr *in, const uint8_t *key); + /* Storage layer. Requests can be performed asynchronously, so these objects * help keep track of operations in progress. */ typedef enum { @@ -229,6 +246,7 @@ struct cloudlog_header { #define CLOUDLOG_JOURNAL 0x01 #define CLOUDLOG_CLOUD 0x02 #define CLOUDLOG_CACHE 0x04 +#define CLOUDLOG_UNCOMMITTED 0x10 struct _BlueSkyCloudLog { gint refcount; GMutex *lock;