Add a few more checks and warnings in the crypto functions.

This commit is contained in:
Guus Sliepen 2013-05-10 20:55:52 +02:00
parent 214060ef20
commit ee34ac3d61
3 changed files with 18 additions and 5 deletions

View file

@ -31,7 +31,13 @@ void crypto_init(void) {
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
if(!RAND_status()) {
fprintf(stderr, "Not enough entropy for the PRNG!\n");
abort();
}
}
void crypto_exit(void) {

View file

@ -88,7 +88,10 @@ bool digest_create(digest_t *digest, const void *indata, size_t inlen, void *out
unsigned char tmpdata[len];
if(digest->key) {
HMAC(digest->digest, digest->key, digest->keylength, indata, inlen, tmpdata, NULL);
if(!HMAC(digest->digest, digest->key, digest->keylength, indata, inlen, tmpdata, NULL)) {
logger(DEBUG_ALWAYS, LOG_DEBUG, "Error creating digest: %s", ERR_error_string(ERR_get_error(), NULL));
return false;
}
} else {
EVP_MD_CTX ctx;

View file

@ -51,16 +51,20 @@ ecdsa_t *ecdsa_generate(void) {
bool ecdsa_write_pem_public_key(ecdsa_t *ecdsa, FILE *fp) {
BIO *out = BIO_new(BIO_s_file());
if(!out)
return false;
BIO_set_fp(out, fp, BIO_NOCLOSE);
PEM_write_bio_EC_PUBKEY(out, ecdsa);
bool result = PEM_write_bio_EC_PUBKEY(out, ecdsa);
BIO_free(out);
return true;
return result;
}
bool ecdsa_write_pem_private_key(ecdsa_t *ecdsa, FILE *fp) {
BIO *out = BIO_new(BIO_s_file());
if(!out)
return false;
BIO_set_fp(out, fp, BIO_NOCLOSE);
PEM_write_bio_ECPrivateKey(out, ecdsa, NULL, NULL, 0, NULL, NULL);
bool result = PEM_write_bio_ECPrivateKey(out, ecdsa, NULL, NULL, 0, NULL, NULL);
BIO_free(out);
return true;
return result;
}