]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/evp/evp_key.c
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 UI_add_input_string(ui
, prompt
, 0, buf
, min
,
61 (len
>= BUFSIZ
) ? BUFSIZ
- 1 : len
);
63 UI_add_verify_string(ui
, prompt
, 0,
64 buff
, min
, (len
>= BUFSIZ
) ? BUFSIZ
- 1 : len
,
68 OPENSSL_cleanse(buff
, BUFSIZ
);
72 int EVP_BytesToKey(const EVP_CIPHER
*type
, const EVP_MD
*md
,
73 const unsigned char *salt
, const unsigned char *data
,
74 int datal
, int count
, unsigned char *key
,
78 unsigned char md_buf
[EVP_MAX_MD_SIZE
];
79 int niv
, nkey
, addmd
= 0;
80 unsigned int mds
= 0, i
;
82 nkey
= EVP_CIPHER_key_length(type
);
83 niv
= EVP_CIPHER_iv_length(type
);
84 OPENSSL_assert(nkey
<= EVP_MAX_KEY_LENGTH
);
85 OPENSSL_assert(niv
<= EVP_MAX_IV_LENGTH
);
94 if (!EVP_DigestInit_ex(c
, md
, NULL
))
97 if (!EVP_DigestUpdate(c
, &(md_buf
[0]), mds
))
99 if (!EVP_DigestUpdate(c
, data
, datal
))
102 if (!EVP_DigestUpdate(c
, salt
, PKCS5_SALT_LEN
))
104 if (!EVP_DigestFinal_ex(c
, &(md_buf
[0]), &mds
))
107 for (i
= 1; i
< (unsigned int)count
; i
++) {
108 if (!EVP_DigestInit_ex(c
, md
, NULL
))
110 if (!EVP_DigestUpdate(c
, &(md_buf
[0]), mds
))
112 if (!EVP_DigestFinal_ex(c
, &(md_buf
[0]), &mds
))
123 *(key
++) = md_buf
[i
];
128 if (niv
&& (i
!= mds
)) {
140 if ((nkey
== 0) && (niv
== 0))
143 rv
= EVP_CIPHER_key_length(type
);
146 OPENSSL_cleanse(md_buf
, sizeof(md_buf
));