Remove unnecessary variables and functions.

This commit is contained in:
Guus Sliepen 2011-07-13 22:29:30 +02:00
parent fec279a9c5
commit 791c1898ea
2 changed files with 16 additions and 55 deletions

View file

@ -27,11 +27,6 @@
#include "xalloc.h" #include "xalloc.h"
static bool cipher_open(cipher_t *cipher) { static bool cipher_open(cipher_t *cipher) {
cipher->keylen = cipher->cipher->key_len;
cipher->blklen = cipher->cipher->iv_len;
cipher->key = xmalloc(cipher->keylen + cipher->blklen);
EVP_CIPHER_CTX_init(&cipher->ctx); EVP_CIPHER_CTX_init(&cipher->ctx);
return true; return true;
@ -43,7 +38,7 @@ bool cipher_open_by_name(cipher_t *cipher, const char *name) {
if(cipher->cipher) if(cipher->cipher)
return cipher_open(cipher); return cipher_open(cipher);
logger(LOG_DEBUG, "Unknown cipher name '%s'!", name); logger(LOG_ERR, "Unknown cipher name '%s'!", name);
return false; return false;
} }
@ -53,7 +48,7 @@ bool cipher_open_by_nid(cipher_t *cipher, int nid) {
if(cipher->cipher) if(cipher->cipher)
return cipher_open(cipher); return cipher_open(cipher);
logger(LOG_DEBUG, "Unknown cipher nid %d!", nid); logger(LOG_ERR, "Unknown cipher nid %d!", nid);
return false; return false;
} }
@ -64,29 +59,19 @@ bool cipher_open_blowfish_ofb(cipher_t *cipher) {
void cipher_close(cipher_t *cipher) { void cipher_close(cipher_t *cipher) {
EVP_CIPHER_CTX_cleanup(&cipher->ctx); EVP_CIPHER_CTX_cleanup(&cipher->ctx);
if(cipher->key) {
free(cipher->key);
cipher->key = NULL;
}
} }
size_t cipher_keylength(const cipher_t *cipher) { size_t cipher_keylength(const cipher_t *cipher) {
return cipher->keylen + cipher->blklen; return cipher->cipher->key_len + cipher->cipher->iv_len;
}
void cipher_get_key(const cipher_t *cipher, void *key) {
memcpy(key, cipher->key, cipher->keylen + cipher->blklen);
} }
bool cipher_set_key(cipher_t *cipher, void *key, bool encrypt) { bool cipher_set_key(cipher_t *cipher, void *key, bool encrypt) {
memcpy(cipher->key, key, cipher->keylen + cipher->blklen);
bool result; bool result;
if(encrypt) if(encrypt)
result = EVP_EncryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen); result = EVP_EncryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)key, (unsigned char *)key + cipher->cipher->key_len);
else else
result = EVP_DecryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen); result = EVP_DecryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)key, (unsigned char *)key + cipher->cipher->key_len);
if(result) if(result)
return true; return true;
@ -96,14 +81,12 @@ bool cipher_set_key(cipher_t *cipher, void *key, bool encrypt) {
} }
bool cipher_set_key_from_rsa(cipher_t *cipher, void *key, size_t len, bool encrypt) { bool cipher_set_key_from_rsa(cipher_t *cipher, void *key, size_t len, bool encrypt) {
memcpy(cipher->key, key + len - (size_t)cipher->keylen, cipher->keylen);
memcpy(cipher->key + cipher->keylen, key + len - (size_t)cipher->keylen - (size_t)cipher->blklen, cipher->blklen);
bool result; bool result;
if(encrypt) if(encrypt)
result = EVP_EncryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen); result = EVP_EncryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)key + len - cipher->cipher->key_len, (unsigned char *)key + len - cipher->cipher->iv_len - cipher->cipher->key_len);
else else
result = EVP_DecryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen); result = EVP_DecryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)key + len - cipher->cipher->key_len, (unsigned char *)key + len - cipher->cipher->iv_len - cipher->cipher->key_len);
if(result) if(result)
return true; return true;
@ -112,34 +95,17 @@ bool cipher_set_key_from_rsa(cipher_t *cipher, void *key, size_t len, bool encry
return false; return false;
} }
bool cipher_regenerate_key(cipher_t *cipher, bool encrypt) {
bool result;
RAND_pseudo_bytes((unsigned char *)cipher->key, cipher->keylen + cipher->blklen);
if(encrypt)
result = EVP_EncryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen);
else
result = EVP_DecryptInit_ex(&cipher->ctx, cipher->cipher, NULL, (unsigned char *)cipher->key, (unsigned char *)cipher->key + cipher->keylen);
if(result)
return true;
logger(LOG_ERR, "Error while regenerating key: %s", ERR_error_string(ERR_get_error(), NULL));
return false;
}
bool cipher_encrypt(cipher_t *cipher, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool oneshot) { bool cipher_encrypt(cipher_t *cipher, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool oneshot) {
if(oneshot) { if(oneshot) {
int len = *outlen, pad; int len, pad;
if(EVP_EncryptInit_ex(&cipher->ctx, NULL, NULL, NULL, NULL) if(EVP_EncryptInit_ex(&cipher->ctx, NULL, NULL, NULL, NULL)
&&EVP_EncryptUpdate(&cipher->ctx, outdata, &len, indata, inlen) && EVP_EncryptUpdate(&cipher->ctx, (unsigned char *)outdata, &len, indata, inlen)
&& EVP_EncryptFinal(&cipher->ctx, outdata + len, &pad)) { && EVP_EncryptFinal(&cipher->ctx, (unsigned char *)outdata + len, &pad)) {
*outlen = len + pad; *outlen = len + pad;
return true; return true;
} }
} else { } else {
int len = *outlen; int len;
if(EVP_EncryptUpdate(&cipher->ctx, outdata, &len, indata, inlen)) { if(EVP_EncryptUpdate(&cipher->ctx, outdata, &len, indata, inlen)) {
*outlen = len; *outlen = len;
return true; return true;
@ -152,22 +118,22 @@ bool cipher_encrypt(cipher_t *cipher, const void *indata, size_t inlen, void *ou
bool cipher_decrypt(cipher_t *cipher, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool oneshot) { bool cipher_decrypt(cipher_t *cipher, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool oneshot) {
if(oneshot) { if(oneshot) {
int len = *outlen, pad; int len, pad;
if(EVP_DecryptInit_ex(&cipher->ctx, NULL, NULL, NULL, NULL) if(EVP_DecryptInit_ex(&cipher->ctx, NULL, NULL, NULL, NULL)
&& EVP_DecryptUpdate(&cipher->ctx, outdata, &len, indata, inlen) && EVP_DecryptUpdate(&cipher->ctx, (unsigned char *)outdata, &len, indata, inlen)
&& EVP_DecryptFinal(&cipher->ctx, outdata + len, &pad)) { && EVP_DecryptFinal(&cipher->ctx, (unsigned char *)outdata + len, &pad)) {
*outlen = len + pad; *outlen = len + pad;
return true; return true;
} }
} else { } else {
int len = *outlen; int len;
if(EVP_EncryptUpdate(&cipher->ctx, outdata, &len, indata, inlen)) { if(EVP_EncryptUpdate(&cipher->ctx, outdata, &len, indata, inlen)) {
*outlen = len; *outlen = len;
return true; return true;
} }
} }
logger(LOG_ERR, "Error while encrypting: %s", ERR_error_string(ERR_get_error(), NULL)); logger(LOG_ERR, "Error while decrypting: %s", ERR_error_string(ERR_get_error(), NULL));
return false; return false;
} }

View file

@ -29,9 +29,6 @@
typedef struct cipher { typedef struct cipher {
EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX ctx;
const EVP_CIPHER *cipher; const EVP_CIPHER *cipher;
char *key;
uint16_t keylen;
uint16_t blklen;
} cipher_t; } cipher_t;
extern bool cipher_open_by_name(cipher_t *, const char *); extern bool cipher_open_by_name(cipher_t *, const char *);
@ -39,10 +36,8 @@ extern bool cipher_open_by_nid(cipher_t *, int);
extern bool cipher_open_blowfish_ofb(cipher_t *); extern bool cipher_open_blowfish_ofb(cipher_t *);
extern void cipher_close(cipher_t *); extern void cipher_close(cipher_t *);
extern size_t cipher_keylength(const cipher_t *); extern size_t cipher_keylength(const cipher_t *);
extern void cipher_get_key(const cipher_t *, void *);
extern bool cipher_set_key(cipher_t *, void *, bool); extern bool cipher_set_key(cipher_t *, void *, bool);
extern bool cipher_set_key_from_rsa(cipher_t *, void *, size_t, bool); extern bool cipher_set_key_from_rsa(cipher_t *, void *, size_t, bool);
extern bool cipher_regenerate_key(cipher_t *, bool);
extern bool cipher_encrypt(cipher_t *, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool); extern bool cipher_encrypt(cipher_t *, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool);
extern bool cipher_decrypt(cipher_t *, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool); extern bool cipher_decrypt(cipher_t *, const void *indata, size_t inlen, void *outdata, size_t *outlen, bool);
extern int cipher_get_nid(const cipher_t *); extern int cipher_get_nid(const cipher_t *);