24 #ifndef SLOG_H_INCLUDED
25 #define SLOG_H_INCLUDED 1
27 #define AES_BLOCKSIZE 16
30 #define CMAC_LENGTH 16
31 #define KEY_ERROR 0x20
32 #define KEY_FILE_ERROR 0x20
33 #define KEY_READ_ERROR 0x21
34 #define KEY_WRITE_ERROR 0x22
37 #define COUNTER_LENGTH 12
38 #define CTR_LEN_SIMPLE 20
46 #define MIN_BUF_SIZE 10
47 #define MAX_BUF_SIZE 1073741823
48 #define DEF_BUF_SIZE 1000
51 #define FILE_ERROR "Invalid path or non existing regular file: "
85 int sLogEncrypt(
unsigned char *plaintext,
int plaintext_len,
86 unsigned char *
key,
unsigned char *iv,
87 unsigned char *ciphertext,
unsigned char *tag);
104 int sLogDecrypt(
unsigned char *ciphertext,
int ciphertext_len,
unsigned char *tag,
unsigned char *
key,
106 unsigned char *plaintext);
123 void cmac(
unsigned char *
key,
const void *input, gsize length,
unsigned char *out, gsize *outlen, gsize out_capacity);
139 void deriveKey(
unsigned char *dst, guint64 index, guint64 currentKey);
154 void sLogEntry(guint64 numberOfLogEntries, GString *text,
unsigned char *
key,
unsigned char *inputBigMac,
155 GString *output,
unsigned char *outputBigMac, gsize outputBigMac_capacity);
184 int deriveHostKey(guchar *masterkey, gchar *macAddr, gchar *serial, guchar *hostkey);
186 int readBigMAC(gchar *filename,
char *outputBuffer);
187 int writeBigMAC(gchar *filename,
char *outputBuffer);
196 int readKey(
char *destKey, guint64 *destCounter, gchar *keypath);
205 int writeKey(
char *
key, guint64 counter, gchar *keypath);
214 int fileVerify(
unsigned char *
key,
char *inputFileName,
char *outputFileName,
unsigned char *bigMac,
215 guint64 entriesInFile,
int chunkLength);
217 int initVerify(guint64 entriesInFile,
unsigned char *
key, guint64 *nextLogEntry, guint64 *startingEntry,
218 GString **input, GHashTable **tab);
220 int iterateBuffer(guint64 entriesInBuffer, GString **input, guint64 *nextLogEntry,
unsigned char *
key,
221 unsigned char *keyZero, guint keyNumber, GString **output, guint64 *numberOfLogEntries,
unsigned char *cmac_tag,
222 gsize cmac_tag_capacity, GHashTable *tab);
224 int finalizeVerify(guint64 startingEntry, guint64 entriesInFile,
unsigned char *bigMac,
unsigned char *cmac_tag,
227 int iterativeFileVerify(
unsigned char *previousMAC,
unsigned char *previousKey,
char *inputFileName,
228 unsigned char *currentMAC,
char *outputFileName, guint64 entriesInFile,
int chunkLength, guint64 keyNumber);
232 void PRF(
unsigned char *
key,
unsigned char *originalInput, guint64 inputLength,
unsigned char *output,
233 guint64 outputLength);
236 int slog_usage(GOptionContext *ctx, GOptionGroup *grp, GString *errormsg);
245 gboolean
validFileNameArg(
const gchar *option_name,
const gchar *
value, gpointer data, GError **error);
void deriveKey(unsigned char *dst, guint64 index, guint64 currentKey)
Definition: slog.c:397
void deriveMACSubKey(unsigned char *mainKey, unsigned char *MACKey)
Definition: slog.c:93
void sLogEntry(guint64 numberOfLogEntries, GString *text, unsigned char *key, unsigned char *inputBigMac, GString *output, unsigned char *outputBigMac, gsize outputBigMac_capacity)
Definition: slog.c:306
void PRF(unsigned char *key, unsigned char *originalInput, guint64 inputLength, unsigned char *output, guint64 outputLength)
Definition: slog.c:490
int iterativeFileVerify(unsigned char *previousMAC, unsigned char *previousKey, char *inputFileName, unsigned char *currentMAC, char *outputFileName, guint64 entriesInFile, int chunkLength, guint64 keyNumber)
Definition: slog.c:1291
guchar * convertToBin(char *input, gsize *outLen)
Definition: slog.c:405
int finalizeVerify(guint64 startingEntry, guint64 entriesInFile, unsigned char *bigMac, unsigned char *cmac_tag, GHashTable *tab)
Definition: slog.c:1186
void deriveEncSubKey(unsigned char *mainKey, unsigned char *encKey)
Definition: slog.c:88
int iterateBuffer(guint64 entriesInBuffer, GString **input, guint64 *nextLogEntry, unsigned char *key, unsigned char *keyZero, guint keyNumber, GString **output, guint64 *numberOfLogEntries, unsigned char *cmac_tag, gsize cmac_tag_capacity, GHashTable *tab)
Definition: slog.c:1010
int slog_usage(GOptionContext *ctx, GOptionGroup *grp, GString *errormsg)
Definition: slog.c:1940
void evolveKey(unsigned char *key)
Definition: slog.c:470
void outputByteBuffer(unsigned char *buf, int length)
int readBigMAC(gchar *filename, char *outputBuffer)
Definition: slog.c:690
int fileVerify(unsigned char *key, char *inputFileName, char *outputFileName, unsigned char *bigMac, guint64 entriesInFile, int chunkLength)
Definition: slog.c:1601
void cmac(unsigned char *key, const void *input, gsize length, unsigned char *out, gsize *outlen, gsize out_capacity)
Definition: slog.c:430
int deriveHostKey(guchar *masterkey, gchar *macAddr, gchar *serial, guchar *hostkey)
Definition: slog.c:549
gchar * convertToBase64(unsigned char *input, gsize len)
Definition: slog.c:410
int readKey(char *destKey, guint64 *destCounter, gchar *keypath)
Definition: slog.c:787
int initVerify(guint64 entriesInFile, unsigned char *key, guint64 *nextLogEntry, guint64 *startingEntry, GString **input, GHashTable **tab)
Definition: slog.c:1234
int sLogDecrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *tag, unsigned char *key, unsigned char *iv, unsigned char *plaintext)
Definition: slog.c:214
int sLogEncrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext, unsigned char *tag)
Definition: slog.c:117
int writeBigMAC(gchar *filename, char *outputBuffer)
Definition: slog.c:592
gboolean validFileNameArg(const gchar *option_name, const gchar *value, gpointer data, GError **error)
Definition: slog.c:1961
int generateMasterKey(guchar *masterkey)
Definition: slog.c:529
int writeKey(char *key, guint64 counter, gchar *keypath)
Definition: slog.c:909
char * description
Definition: slog.h:58
char * type
Definition: slog.h:59
char * longname
Definition: slog.h:56
char * arg
Definition: slog.h:60
char shortname
Definition: slog.h:57
GString * value
Definition: test_decode.c:28
struct tm key
Definition: cache.c:63