X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=crypt.h;h=fc41acf3f04efcedcad75a7a61e9dae3b8dfd6fa;hb=e3272a316d113dd9c0c6f01f3087ab14f945e76b;hp=21abe41f68cd8c5b335cc133b5c6f3050869c4ee;hpb=a24d175e6d093d6d9f6e583c3026e45924bad621;p=paraslash.git diff --git a/crypt.h b/crypt.h index 21abe41f..fc41acf3 100644 --- a/crypt.h +++ b/crypt.h @@ -4,7 +4,16 @@ * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file crypt.h Prototypes for paraslash crypto functions. */ +/** \file crypt.h Public crypto interface. */ + + +/** \cond used to distinguish between loading of private/public key */ +#define LOAD_PUBLIC_KEY 0 +#define LOAD_PRIVATE_KEY 1 +#define CHALLENGE_SIZE 64 +/** \endcond **/ + +/* asymetric (public key) crypto */ /** Opaque structure for public and private keys. */ struct asymmetric_key; @@ -17,17 +26,18 @@ int get_asymmetric_key(const char *key_file, int private, struct asymmetric_key **result); void free_asymmetric_key(struct asymmetric_key *key); +/* random numbers */ void get_random_bytes_or_die(unsigned char *buf, int num); void init_random_seed_or_die(void); -/** Opaque structure for stream cipher crypto. */ -struct stream_cipher; +/* stream cipher declarations and prototypes */ -/** Number of bytes of the session key. */ +/** Opaque structure for stream ciphers. */ +struct stream_cipher; +/** Number of bytes of the session key for stream ciphers. */ #define SESSION_KEY_LEN 32 - /** - * Used on the server-side for client-server communication encryption. + * Used for client-server communication encryption. * * The traffic between (the forked child of) para_server and the remote client * process is crypted by a symmetric session key. This structure contains the @@ -42,70 +52,22 @@ struct stream_cipher_context { /** Key used for sending data. */ struct stream_cipher *send; }; - struct stream_cipher *sc_new(const unsigned char *data, int len); void sc_free(struct stream_cipher *sc); - -int sc_send_bin_buffer(struct stream_cipher_context *scc, const char *buf, +int sc_send_bin_buffer(struct stream_cipher_context *scc, char *buf, size_t len); -int sc_send_buffer(struct stream_cipher_context *scc, const char *buf); +int sc_send_buffer(struct stream_cipher_context *scc, char *buf); __printf_2_3 int sc_send_va_buffer(struct stream_cipher_context *scc, const char *fmt, ...); int sc_recv_bin_buffer(struct stream_cipher_context *scc, char *buf, size_t size); int sc_recv_buffer(struct stream_cipher_context *scc, char *buf, size_t size); -/** \cond used to distinguish between loading of private/public key */ -#define LOAD_PUBLIC_KEY 0 -#define LOAD_PRIVATE_KEY 1 -#define CHALLENGE_SIZE 64 -/** \endcond **/ +/* hashing */ /** Size of the hash value in bytes. */ #define HASH_SIZE 20 void hash_function(const char *data, unsigned long len, unsigned char *hash); - -/** - * Compare two hashes. - * - * \param h1 Pointer to the first hash value. - * \param h2 Pointer to the second hash value. - * - * \return 1, -1, or zero, depending on whether \a h1 is greater than, - * less than or equal to h2, respectively. - */ -_static_inline_ int hash_compare(unsigned char *h1, unsigned char *h2) -{ - int i; - - for (i = 0; i < HASH_SIZE; i++) { - if (h1[i] < h2[i]) - return -1; - if (h1[i] > h2[i]) - return 1; - } - return 0; -} - -/** - * Convert a hash value to ascii format. - * - * \param hash the hash value. - * \param asc Result pointer. - * - * \a asc must point to an area of at least 2 * \p HASH_SIZE + 1 bytes which - * will be filled by the function with the ascii representation of the hash - * value given by \a hash, and a terminating \p NULL byte. - */ -_static_inline_ void hash_to_asc(unsigned char *hash, char *asc) -{ - int i; - const char hexchar[] = "0123456789abcdef"; - - for (i = 0; i < HASH_SIZE; i++) { - asc[2 * i] = hexchar[hash[i] >> 4]; - asc[2 * i + 1] = hexchar[hash[i] & 0xf]; - } - asc[2 * HASH_SIZE] = '\0'; -} +void hash_to_asc(unsigned char *hash, char *asc); +int hash_compare(unsigned char *h1, unsigned char *h2);