X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=crypt.h;h=b963d1055894fa2a5919db7c6bd3b49b19ed878c;hb=e4db7671a91a7552c642acc979f0eb278f8d467f;hp=82ed4f9dc42face7d7a3cfda25b1a154e341edd8;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623;p=paraslash.git diff --git a/crypt.h b/crypt.h index 82ed4f9d..b963d105 100644 --- a/crypt.h +++ b/crypt.h @@ -1,9 +1,58 @@ -/** \file crypt.h prototypes for the RSA crypt functions */ -int para_decrypt_challenge(char *key_file, long unsigned *challenge_nr, - unsigned char *buf, int rsa_inlen); -int para_encrypt_challenge(char *key_file, long unsigned challenge_nr, - unsigned char *outbuf); -int para_encrypt_buffer(char *key_file, unsigned char *inbuf, const unsigned len, - unsigned char *outbuf); -int para_decrypt_buffer(char *key_file, unsigned char *outbuf, unsigned char *inbuf, - int rsa_inlen); +/* + * Copyright (C) 2005-2011 Andre Noll + * + * Licensed under the GPL v2. For licencing details see COPYING. + */ + +/** \file crypt.h Prototypes for paraslash crypto functions. */ + +/** Opaque structure for public and private keys. */ +struct asymmetric_key; + +int pub_encrypt(struct asymmetric_key *pub, unsigned char *inbuf, + unsigned len, unsigned char *outbuf); +int priv_decrypt(const char *key_file, unsigned char *outbuf, + unsigned char *inbuf, int inlen); +int get_asymmetric_key(const char *key_file, int private, + struct asymmetric_key **result); +void free_asymmetric_key(struct asymmetric_key *key); + +void get_random_bytes_or_die(unsigned char *buf, int num); +void init_random_seed_or_die(void); + +struct stream_cipher; + +/** + * Used on the server-side 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 + * keys for the stream cipher and the file descriptor for which these keys + * should be used. + */ +struct stream_cipher_context { + /** The socket file descriptor. */ + int fd; + /** Key used for receiving data. */ + struct stream_cipher *recv; + /** 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, + size_t len); +int sc_send_buffer(struct stream_cipher_context *scc, const 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 **/