2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 #include "internal/cryptlib.h"
12 #include <openssl/x509.h>
13 #include <openssl/objects.h>
14 #include <openssl/evp.h>
15 #include <openssl/ui.h>
17 /* should be init to zeros. */
18 static char prompt_string[80];
20 void EVP_set_pw_prompt(const char *prompt)
23 prompt_string[0] = '\0';
25 strncpy(prompt_string, prompt, 79);
26 prompt_string[79] = '\0';
30 char *EVP_get_pw_prompt(void)
32 if (prompt_string[0] == '\0')
35 return (prompt_string);
39 * For historical reasons, the standard function for reading passwords is in
40 * the DES library -- if someone ever wants to disable DES, this function
43 int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)
45 return EVP_read_pw_string_min(buf, 0, len, prompt, verify);
48 int EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt,
55 if ((prompt == NULL) && (prompt_string[0] != '\0'))
56 prompt = prompt_string;
60 if (UI_add_input_string(ui, prompt, 0, buf, min,
61 (len >= BUFSIZ) ? BUFSIZ - 1 : len) < 0
63 && UI_add_verify_string(ui, prompt, 0, buff, min,
64 (len >= BUFSIZ) ? BUFSIZ - 1 : len,
68 OPENSSL_cleanse(buff, BUFSIZ);
74 int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
75 const unsigned char *salt, const unsigned char *data,
76 int datal, int count, unsigned char *key,
80 unsigned char md_buf[EVP_MAX_MD_SIZE];
81 int niv, nkey, addmd = 0;
82 unsigned int mds = 0, i;
84 nkey = EVP_CIPHER_key_length(type);
85 niv = EVP_CIPHER_iv_length(type);
86 OPENSSL_assert(nkey <= EVP_MAX_KEY_LENGTH);
87 OPENSSL_assert(niv <= EVP_MAX_IV_LENGTH);
96 if (!EVP_DigestInit_ex(c, md, NULL))
99 if (!EVP_DigestUpdate(c, &(md_buf[0]), mds))
101 if (!EVP_DigestUpdate(c, data, datal))
104 if (!EVP_DigestUpdate(c, salt, PKCS5_SALT_LEN))
106 if (!EVP_DigestFinal_ex(c, &(md_buf[0]), &mds))
109 for (i = 1; i < (unsigned int)count; i++) {
110 if (!EVP_DigestInit_ex(c, md, NULL))
112 if (!EVP_DigestUpdate(c, &(md_buf[0]), mds))
114 if (!EVP_DigestFinal_ex(c, &(md_buf[0]), &mds))
125 *(key++) = md_buf[i];
130 if (niv && (i != mds)) {
142 if ((nkey == 0) && (niv == 0))
145 rv = EVP_CIPHER_key_length(type);
148 OPENSSL_cleanse(md_buf, sizeof(md_buf));