/* gc.h --- Header file for implementation agnostic crypto wrapper API.
- * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 Simon Josefsson
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
GC_MD5,
GC_SHA1,
GC_MD2,
- GC_RMD160
+ GC_RMD160,
+ GC_SHA256,
+ GC_SHA384,
+ GC_SHA512,
+ GC_SHA224
};
typedef enum Gc_hash Gc_hash;
#define GC_MD5_DIGEST_SIZE 16
#define GC_RMD160_DIGEST_SIZE 20
#define GC_SHA1_DIGEST_SIZE 20
+#define GC_SHA256_DIGEST_SIZE 32
+#define GC_SHA384_DIGEST_SIZE 48
+#define GC_SHA512_DIGEST_SIZE 64
+#define GC_SHA224_DIGEST_SIZE 24
/* Cipher types. */
enum Gc_cipher
GC_DES,
GC_ARCFOUR128,
GC_ARCFOUR40,
- GC_ARCTWO40
+ GC_ARCTWO40,
+ GC_CAMELLIA128,
+ GC_CAMELLIA256
};
typedef enum Gc_cipher Gc_cipher;
typedef void *(*gc_realloc_t) (void *p, size_t n);
typedef void (*gc_free_t) (void *);
extern void gc_set_allocators (gc_malloc_t func_malloc,
- gc_malloc_t secure_malloc,
- gc_secure_check_t secure_check,
- gc_realloc_t func_realloc,
- gc_free_t func_free);
+ gc_malloc_t secure_malloc,
+ gc_secure_check_t secure_check,
+ gc_realloc_t func_realloc,
+ gc_free_t func_free);
/* Randomness. */
extern Gc_rc gc_nonce (char *data, size_t datalen);
/* Ciphers. */
extern Gc_rc gc_cipher_open (Gc_cipher cipher, Gc_cipher_mode mode,
- gc_cipher_handle *outhandle);
+ gc_cipher_handle *outhandle);
extern Gc_rc gc_cipher_setkey (gc_cipher_handle handle,
- size_t keylen, const char *key);
+ size_t keylen, const char *key);
extern Gc_rc gc_cipher_setiv (gc_cipher_handle handle,
- size_t ivlen, const char *iv);
+ size_t ivlen, const char *iv);
extern Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle,
- size_t len, char *data);
+ size_t len, char *data);
extern Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle,
- size_t len, char *data);
+ size_t len, char *data);
extern Gc_rc gc_cipher_close (gc_cipher_handle handle);
/* Hashes. */
extern Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode,
- gc_hash_handle *outhandle);
+ gc_hash_handle *outhandle);
extern Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle *outhandle);
extern size_t gc_hash_digest_length (Gc_hash hash);
extern void gc_hash_hmac_setkey (gc_hash_handle handle,
- size_t len, const char *key);
+ size_t len, const char *key);
extern void gc_hash_write (gc_hash_handle handle,
- size_t len, const char *data);
+ size_t len, const char *data);
extern const char *gc_hash_read (gc_hash_handle handle);
extern void gc_hash_close (gc_hash_handle handle);
extern Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf);
extern Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf);
extern Gc_rc gc_hmac_md5 (const void *key, size_t keylen,
- const void *in, size_t inlen, char *resbuf);
+ const void *in, size_t inlen, char *resbuf);
extern Gc_rc gc_hmac_sha1 (const void *key, size_t keylen,
- const void *in, size_t inlen, char *resbuf);
+ const void *in, size_t inlen, char *resbuf);
/* Derive cryptographic keys from a password P of length PLEN, with
salt S of length SLEN, placing the result in pre-allocated buffer
an Gc_rc error code is returned. */
extern Gc_rc
gc_pbkdf2_sha1 (const char *P, size_t Plen,
- const char *S, size_t Slen,
- unsigned int c, char *DK, size_t dkLen);
+ const char *S, size_t Slen,
+ unsigned int c, char *DK, size_t dkLen);
/*
TODO: