X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccrypt%2Fsilccipher.h;h=47cfd3e03f12375b3bb379c5845f5465d59258a5;hb=8ceff2f9e9d065106b1e0490b2a82d76394647c7;hp=6eea2c9c0a647ba9eb4fcf7a040d05c437c98256;hpb=517c8c6c585abe5e5d971125e367c29fcdee8f4c;p=silc.git diff --git a/lib/silccrypt/silccipher.h b/lib/silccrypt/silccipher.h index 6eea2c9c..47cfd3e0 100644 --- a/lib/silccrypt/silccipher.h +++ b/lib/silccrypt/silccipher.h @@ -32,27 +32,27 @@ Logical name of the cipher. - unsigned int block_len + uint32 block_len Block size of the cipher. - unsigned int key_len + uint32 key_len Length of the key of the cipher (in bits). */ typedef struct { char *name; - unsigned int block_len; - unsigned key_len; - - int (*set_key)(void *, const unsigned char *, unsigned int); - int (*set_key_with_string)(void *, const unsigned char *, unsigned int); - int (*encrypt)(void *, const unsigned char *, unsigned char *, - unsigned int, unsigned char *); - int (*decrypt)(void *, const unsigned char *, unsigned char *, - unsigned int, unsigned char *); - unsigned int (*context_len)(); + uint32 block_len; + uint32 key_len; + + bool (*set_key)(void *, const unsigned char *, uint32); + bool (*set_key_with_string)(void *, const unsigned char *, uint32); + bool (*encrypt)(void *, const unsigned char *, unsigned char *, + uint32, unsigned char *); + bool (*decrypt)(void *, const unsigned char *, unsigned char *, + uint32, unsigned char *); + uint32 (*context_len)(); } SilcCipherObject; #define SILC_CIPHER_MAX_IV_SIZE 16 @@ -63,21 +63,22 @@ typedef struct SilcCipherStruct { SilcCipherObject *cipher; void *context; unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; - void (*set_iv)(struct SilcCipherStruct *, const unsigned char *); void (*get_iv)(struct SilcCipherStruct *, unsigned char *); - unsigned int (*get_key_len)(struct SilcCipherStruct *, - const unsigned char *); - unsigned int (*get_block_len)(struct SilcCipherStruct *); + uint32 (*get_key_len)(struct SilcCipherStruct *); + uint32 (*get_block_len)(struct SilcCipherStruct *); } *SilcCipher; -/* List of all registered ciphers. */ -extern struct SilcCipherListStruct *silc_cipher_list; - /* Marks for all ciphers in silc. This can be used in silc_cipher_unregister to unregister all ciphers at once. */ #define SILC_ALL_CIPHERS ((SilcCipherObject *)1) +/* Static list of ciphers for silc_cipher_register_default(). */ +extern DLLAPI SilcCipherObject silc_default_ciphers[]; + +/* Default cipher in the SILC protocol */ +#define SILC_DEFAULT_CIPHER "aes-256-cbc" + /* Macros */ /* Function names in SILC Crypto modules. The name of the cipher @@ -93,41 +94,47 @@ extern struct SilcCipherListStruct *silc_cipher_list; /* These macros can be used to implement the SILC Crypto API and to avoid errors in the API these macros should be used always. */ #define SILC_CIPHER_API_SET_KEY(cipher) \ -int silc_##cipher##_set_key(void *context, \ - const unsigned char *key, \ - unsigned int keylen) +bool silc_##cipher##_set_key(void *context, \ + const unsigned char *key, \ + uint32 keylen) #define SILC_CIPHER_API_SET_KEY_WITH_STRING(cipher) \ -int silc_##cipher##_set_key_with_string(void *context, \ - const unsigned char *string, \ - unsigned int stringlen) +bool silc_##cipher##_set_key_with_string(void *context, \ + const unsigned char *string, \ + uint32 stringlen) #define SILC_CIPHER_API_ENCRYPT_CBC(cipher) \ -int silc_##cipher##_encrypt_cbc(void *context, \ - const unsigned char *src, \ - unsigned char *dst, \ - unsigned int len, \ - unsigned char *iv) +bool silc_##cipher##_encrypt_cbc(void *context, \ + const unsigned char *src, \ + unsigned char *dst, \ + uint32 len, \ + unsigned char *iv) #define SILC_CIPHER_API_DECRYPT_CBC(cipher) \ -int silc_##cipher##_decrypt_cbc(void *context, \ - const unsigned char *src, \ - unsigned char *dst, \ - unsigned int len, \ - unsigned char *iv) +bool silc_##cipher##_decrypt_cbc(void *context, \ + const unsigned char *src, \ + unsigned char *dst, \ + uint32 len, \ + unsigned char *iv) #define SILC_CIPHER_API_CONTEXT_LEN(cipher) \ -unsigned int silc_##cipher##_context_len() +uint32 silc_##cipher##_context_len() /* Prototypes */ -int silc_cipher_register(SilcCipherObject *cipher); -int silc_cipher_unregister(SilcCipherObject *cipher); -int silc_cipher_alloc(const unsigned char *name, SilcCipher *new_cipher); +bool silc_cipher_register(SilcCipherObject *cipher); +bool silc_cipher_unregister(SilcCipherObject *cipher); +bool silc_cipher_register_default(void); +bool silc_cipher_alloc(const unsigned char *name, SilcCipher *new_cipher); void silc_cipher_free(SilcCipher cipher); -int silc_cipher_is_supported(const unsigned char *name); -char *silc_cipher_get_supported(); -int silc_cipher_set_key(SilcCipher cipher, const unsigned char *key, - unsigned int keylen); +bool silc_cipher_is_supported(const unsigned char *name); +char *silc_cipher_get_supported(void); +bool silc_cipher_encrypt(SilcCipher cipher, const unsigned char *src, + unsigned char *dst, uint32 len, + unsigned char *iv); +bool silc_cipher_decrypt(SilcCipher cipher, const unsigned char *src, + unsigned char *dst, uint32 len, + unsigned char *iv); +bool silc_cipher_set_key(SilcCipher cipher, const unsigned char *key, + uint32 keylen); void silc_cipher_set_iv(SilcCipher cipher, const unsigned char *iv); void silc_cipher_get_iv(SilcCipher cipher, unsigned char *iv); -unsigned int silc_cipher_get_key_len(SilcCipher cipher, - const unsigned char *name); -unsigned int silc_cipher_get_block_len(SilcCipher cipher); +uint32 silc_cipher_get_key_len(SilcCipher cipher); +uint32 silc_cipher_get_block_len(SilcCipher cipher); #endif