summaryrefslogtreecommitdiff
path: root/PasswordCrypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'PasswordCrypt.c')
-rw-r--r--PasswordCrypt.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/PasswordCrypt.c b/PasswordCrypt.c
index 2494549c..e0a82cfd 100644
--- a/PasswordCrypt.c
+++ b/PasswordCrypt.c
@@ -3,6 +3,7 @@
#include <Library/BaseCryptLib.h>
#include <openssl/sha.h>
#include <openssl/md5.h>
+#include <openssl/des.h>
#include "PasswordCrypt.h"
#include "crypt_blowfish.h"
@@ -30,6 +31,20 @@ UINT16 get_hash_size (const UINT16 method)
return 0;
}
+static EFI_STATUS trad_des_crypt (const char *key, const char *salt, UINT8 *hash)
+{
+ char result[TRAD_DES_HASH_SIZE + 1];
+ char *ret;
+
+ ret = DES_fcrypt(key, salt, result);
+ if (ret) {
+ CopyMem(hash, result, TRAD_DES_HASH_SIZE);
+ return EFI_SUCCESS;
+ }
+
+ return EFI_UNSUPPORTED;
+}
+
static const char md5_salt_prefix[] = "$1$";
static EFI_STATUS md5_crypt (const char *key, UINT32 key_len,
@@ -293,6 +308,8 @@ EFI_STATUS password_crypt (const char *password, UINT32 pw_length,
switch (pw_crypt->method) {
case TRADITIONAL_DES:
+ status = trad_des_crypt (password, (char *)pw_crypt->salt, hash);
+ break;
case EXTEND_BSDI_DES:
status = EFI_UNSUPPORTED;
break;