X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=crypt.c;h=cf1cabecbad80cdca6d69cf2bbc2165427a84ed8;hp=653b1a2452cdc85215d916c1abd35f641800dcf1;hb=3580fe47cc87b25aa0497eb54387e1165ba17407;hpb=ade45974506ffedcd057f336fbcf71941d77b09c diff --git a/crypt.c b/crypt.c index 653b1a24..cf1cabec 100644 --- a/crypt.c +++ b/crypt.c @@ -18,15 +18,10 @@ /** \file crypt.c openssl-based RSA encryption/decryption routines */ -#include #include "para.h" #include "error.h" #include "string.h" - -/** \cond used to distinguish between loading of private/public key */ -#define LOAD_PUBLIC_KEY 0 -#define LOAD_PRIVATE_KEY 1 -/** \endcond **/ +#include "crypt.h" static EVP_PKEY *load_key(const char *file, int private) { @@ -46,7 +41,8 @@ static EVP_PKEY *load_key(const char *file, int private) return pkey; } -static int get_key(char *key_file, RSA **rsa, int private) + +int get_rsa_key(char *key_file, RSA **rsa, int private) { EVP_PKEY *key = load_key(key_file, private); @@ -77,7 +73,7 @@ int para_decrypt_buffer(char *key_file, unsigned char *outbuf, unsigned char *in int rsa_inlen) { RSA *rsa; - int ret = get_key(key_file, &rsa, LOAD_PRIVATE_KEY); + int ret = get_rsa_key(key_file, &rsa, LOAD_PRIVATE_KEY); if (ret < 0) return ret; @@ -115,7 +111,7 @@ int para_decrypt_challenge(char *key_file, long unsigned *challenge_nr, /** * encrypt a buffer using an RSA key * - * \param key_file full path of the rsa key + * \param rsa: public rsa key * \param inbuf the input buffer * \param len the length of \a inbuf * \param outbuf the output buffer @@ -124,22 +120,18 @@ int para_decrypt_challenge(char *key_file, long unsigned *challenge_nr, * * \sa RSA_public_encrypt(3) */ -int para_encrypt_buffer(char *key_file, unsigned char *inbuf, +int para_encrypt_buffer(RSA *rsa, unsigned char *inbuf, const unsigned len, unsigned char *outbuf) { - RSA *rsa; - int ret = get_key(key_file, &rsa, LOAD_PUBLIC_KEY); - - if (ret < 0) - return ret; - ret = RSA_public_encrypt(len, inbuf, outbuf, rsa, RSA_PKCS1_PADDING); + int ret = RSA_public_encrypt(len, inbuf, outbuf, rsa, + RSA_PKCS1_PADDING); return ret < 0? -E_ENCRYPT : ret; } /** * encrypt the given challenge number * - * \param key_file full path of the rsa key + * \param rsa: public rsa key * \param challenge_nr the number to be encrypted * \param outbuf the output buffer * @@ -150,11 +142,11 @@ int para_encrypt_buffer(char *key_file, unsigned char *inbuf, * \sa para_encrypt_buffer() * */ -int para_encrypt_challenge(char *key_file, long unsigned challenge_nr, +int para_encrypt_challenge(RSA* rsa, long unsigned challenge_nr, unsigned char *outbuf) { unsigned char *inbuf = (unsigned char*) make_message("%lu", challenge_nr); - int ret = para_encrypt_buffer(key_file, inbuf, strlen((char *)inbuf), outbuf); + int ret = para_encrypt_buffer(rsa, inbuf, strlen((char *)inbuf), outbuf); free(inbuf); return ret; }