* util/grub-mkpasswd-pbkdf2.c: Remove temporary buffers for hex

version of salt and hash. Use grub_snprintf rather than snprintf.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-10-10 10:16:37 +02:00
parent 9be1c25578
commit fb9f59c3ce
2 changed files with 20 additions and 26 deletions

View file

@ -1,3 +1,8 @@
2013-10-10 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-mkpasswd-pbkdf2.c: Remove temporary buffers for hex
version of salt and hash. Use grub_snprintf rather than snprintf.
2013-10-10 Vladimir Serbinenko <phcoder@gmail.com> 2013-10-10 Vladimir Serbinenko <phcoder@gmail.com>
* docs/grub.texi: Fix problem with braces. * docs/grub.texi: Fix problem with braces.

View file

@ -24,6 +24,7 @@
#include <grub/emu/misc.h> #include <grub/emu/misc.h>
#include <grub/util/misc.h> #include <grub/util/misc.h>
#include <grub/i18n.h> #include <grub/i18n.h>
#include <grub/misc.h>
#include <unistd.h> #include <unistd.h>
#include <stdio.h> #include <stdio.h>
@ -112,7 +113,7 @@ main (int argc, char *argv[])
.buflen = 64, .buflen = 64,
.saltlen = 64 .saltlen = 64
}; };
char *bufhex, *salthex, *result; char *result, *ptr;
gcry_err_code_t gcry_err; gcry_err_code_t gcry_err;
grub_uint8_t *buf, *salt; grub_uint8_t *buf, *salt;
char pass1[GRUB_AUTH_MAX_PASSLEN]; char pass1[GRUB_AUTH_MAX_PASSLEN];
@ -129,17 +130,13 @@ main (int argc, char *argv[])
exit(1); exit(1);
} }
bufhex = xmalloc (arguments.buflen * 2 + 1);
buf = xmalloc (arguments.buflen); buf = xmalloc (arguments.buflen);
salt = xmalloc (arguments.saltlen); salt = xmalloc (arguments.saltlen);
salthex = xmalloc (arguments.saltlen * 2 + 1);
printf ("%s", _("Enter password: ")); printf ("%s", _("Enter password: "));
if (!grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN)) if (!grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN))
{ {
free (buf); free (buf);
free (bufhex);
free (salthex);
free (salt); free (salt);
grub_util_error ("%s", _("failure to read password")); grub_util_error ("%s", _("failure to read password"));
} }
@ -147,8 +144,6 @@ main (int argc, char *argv[])
if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN)) if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN))
{ {
free (buf); free (buf);
free (bufhex);
free (salthex);
free (salt); free (salt);
grub_util_error ("%s", _("failure to read password")); grub_util_error ("%s", _("failure to read password"));
} }
@ -158,8 +153,6 @@ main (int argc, char *argv[])
memset (pass1, 0, sizeof (pass1)); memset (pass1, 0, sizeof (pass1));
memset (pass2, 0, sizeof (pass2)); memset (pass2, 0, sizeof (pass2));
free (buf); free (buf);
free (bufhex);
free (salthex);
free (salt); free (salt);
grub_util_error ("%s", _("passwords don't match")); grub_util_error ("%s", _("passwords don't match"));
} }
@ -169,8 +162,6 @@ main (int argc, char *argv[])
{ {
memset (pass1, 0, sizeof (pass1)); memset (pass1, 0, sizeof (pass1));
free (buf); free (buf);
free (bufhex);
free (salthex);
free (salt); free (salt);
grub_util_error ("%s", _("couldn't retrieve random data for salt")); grub_util_error ("%s", _("couldn't retrieve random data for salt"));
} }
@ -184,35 +175,33 @@ main (int argc, char *argv[])
if (gcry_err) if (gcry_err)
{ {
memset (buf, 0, arguments.buflen); memset (buf, 0, arguments.buflen);
memset (bufhex, 0, 2 * arguments.buflen);
free (buf); free (buf);
free (bufhex);
memset (salt, 0, arguments.saltlen); memset (salt, 0, arguments.saltlen);
memset (salthex, 0, 2 * arguments.saltlen);
free (salt); free (salt);
free (salthex);
grub_util_error (_("cryptographic error number %d"), gcry_err); grub_util_error (_("cryptographic error number %d"), gcry_err);
} }
hexify (bufhex, buf, arguments.buflen);
hexify (salthex, salt, arguments.saltlen);
result = xmalloc (sizeof ("grub.pbkdf2.sha512.XXXXXXXXXXXXXXXXXXX.S.S") result = xmalloc (sizeof ("grub.pbkdf2.sha512.XXXXXXXXXXXXXXXXXXX.S.S")
+ arguments.buflen * 2 + arguments.saltlen * 2); + arguments.buflen * 2 + arguments.saltlen * 2);
snprintf (result, sizeof ("grub.pbkdf2.sha512.XXXXXXXXXXXXXXXXXXX.S.S") ptr = result;
+ arguments.buflen * 2 + arguments.saltlen * 2, memcpy (ptr, "grub.pbkdf2.sha512.", sizeof ("grub.pbkdf2.sha512.") - 1);
"grub.pbkdf2.sha512.%d.%s.%s", ptr += sizeof ("grub.pbkdf2.sha512.") - 1;
arguments.count, salthex, bufhex);
grub_snprintf (ptr, sizeof ("XXXXXXXXXXXXXXXXXXX"), "%d", arguments.count);
ptr += strlen (ptr);
*ptr++ = '.';
hexify (ptr, salt, arguments.saltlen);
ptr += arguments.saltlen * 2;
*ptr++ = '.';
hexify (ptr, buf, arguments.buflen);
ptr += arguments.buflen * 2;
*ptr = '\0';
printf (_("PBKDF2 hash of your password is %s\n"), result); printf (_("PBKDF2 hash of your password is %s\n"), result);
memset (buf, 0, arguments.buflen); memset (buf, 0, arguments.buflen);
memset (bufhex, 0, 2 * arguments.buflen);
free (buf); free (buf);
free (bufhex);
memset (salt, 0, arguments.saltlen); memset (salt, 0, arguments.saltlen);
memset (salthex, 0, 2 * arguments.saltlen);
free (salt); free (salt);
free (salthex);
return 0; return 0;
} }