Update password hashing to use evp functions

This commit is contained in:
Andrew Pamment
2018-05-26 12:35:06 +10:00
parent 5920963420
commit 834afccb57
6 changed files with 81 additions and 11339 deletions

View File

@@ -1,7 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
#include <openssl/evp.h>
#include <sqlite3.h>
#include <limits.h>
#include <sys/socket.h>
@@ -159,8 +159,10 @@ static int handler(void* user, const char* section, const char* name, const char
char *hash_sha256(char *pass, char *salt) {
char *buffer = (char *)malloc(strlen(pass) + strlen(salt) + 1);
char *shash = (char *)malloc(66);
unsigned char hash[SHA256_DIGEST_LENGTH];
char *shash = NULL;
unsigned char hash[EVP_MAX_MD_SIZE];
unsigned int length_of_hash = 0;
int i;
if (!buffer) {
fprintf(stderr, "Out of memory!\n");
@@ -170,18 +172,30 @@ char *hash_sha256(char *pass, char *salt) {
sprintf(buffer, "%s%s", pass, salt);
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, buffer, strlen(buffer));
SHA256_Final(hash, &sha256);
int i = 0;
for(i = 0; i < SHA256_DIGEST_LENGTH; i++) {
sprintf(shash + (i * 2), "%02x", hash[i]);
EVP_MD_CTX *context = EVP_MD_CTX_new();
if (context != NULL) {
if(EVP_DigestInit_ex(context, EVP_sha256(), NULL)) {
if(EVP_DigestUpdate(context, buffer, strlen(buffer))) {
if(EVP_DigestFinal_ex(context, hash, &length_of_hash)) {
shash = (char *)malloc(length_of_hash * 2 + 1);
for(i = 0; i < length_of_hash; i++) {
sprintf(shash + (i * 2), "%02x", (int)hash[i]);
}
EVP_MD_CTX_free(context);
free(buffer);
return shash;
}
}
}
EVP_MD_CTX_free(context);
}
shash[64] = 0;
free(buffer);
return shash;
fprintf(stderr, "Error creating hash!\n");
exit(-1);
}
void send_data(struct ftpclient *client, char *msg, int len) {