]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Split random retrieving code into separate files.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Oct 2013 23:29:10 +0000 (01:29 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Oct 2013 23:29:10 +0000 (01:29 +0200)
ChangeLog
Makefile.util.def
include/grub/crypto.h
util/grub-mkpasswd-pbkdf2.c
util/random.c [new file with mode: 0644]
util/random_unix.c [new file with mode: 0644]
util/random_windows.c [new file with mode: 0644]

index e54b76c593f0d502331f37cbb14f25775d85d6cd..f3a6c0659f8a9a02ba797ba1e4806abb09e996c0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-04  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Split random retrieving code into separate files.
+
 2013-10-03  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/arm/dl.c (do_relocations): Accept and ignore
index f5dc25bc3cb0fef95e30b1beb68c195b16b5697c..cfd94d2c445648fc86643a29257767eb2bee5440 100644 (file)
@@ -222,6 +222,7 @@ program = {
 
   common = util/grub-mkpasswd-pbkdf2.c;
   common = grub-core/kern/emu/argp_common.c;
+  common = util/random.c;
 
   ldadd = libgrubmods.a;
   ldadd = libgrubgcry.a;
index ac201327067b568b73734f67b62795fef33051f1..9d16df1de83f36e5e07792d924bdadc8184f8575 100644 (file)
@@ -406,6 +406,10 @@ void _gcry_log_error( const char *fmt, ... )  __attribute__ ((format (printf, 1,
 #ifdef GRUB_UTIL
 void grub_gcry_init_all (void);
 void grub_gcry_fini_all (void);
+
+int
+grub_get_random (void *out, grub_size_t len);
+
 #endif
 
 #endif
index 0e09a02c39ef1c69ed0818c555a8877d0c2fa110..a7413e83d06c192f8da6c56a032f6e0053957a64 100644 (file)
 
 #include <argp.h>
 
-#if defined (_WIN32) || defined (__CYGWIN__)
-#include <windows.h>
-#include <wincrypt.h>
-#endif
-
 #include "progname.h"
 
 static struct argp_option options[] = {
@@ -109,48 +104,6 @@ hexify (char *hex, grub_uint8_t *bin, grub_size_t n)
   *hex = 0;
 }
 
-static int
-grub_get_random (void *out, grub_size_t len)
-{
-#if ! defined (__linux__) && ! defined (__FreeBSD__) && ! defined (__OpenBSD__) && !defined (__GNU__) && ! defined (_WIN32) && !defined(__CYGWIN__)
-  /* TRANSLATORS: The generator might still be secure just GRUB isn't sure about it.  */
-  printf ("%s", _("WARNING: your random generator isn't known to be secure\n"));
-#warning "your random generator isn't known to be secure"
-#endif
-
-#if defined (_WIN32) || defined (__CYGWIN__)
-  HCRYPTPROV   hCryptProv;
-  if (!CryptAcquireContext (&hCryptProv,
-                           NULL,
-                           MS_DEF_PROV,
-                           PROV_RSA_FULL,
-                           CRYPT_VERIFYCONTEXT))
-    return 1;
-  if (!CryptGenRandom (hCryptProv, len, out))
-    {
-      CryptReleaseContext (hCryptProv, 0);
-      return 1;
-    }
-
-  CryptReleaseContext (hCryptProv, 0);
-
-  return 0;
-#else
-  FILE *f;
-  size_t rd;
-
-  f = fopen ("/dev/urandom", "rb");
-  if (!f)
-    return 1;
-  rd = fread (out, 1, len, f);
-  fclose (f);
-
-  if (rd != len)
-    return 1;
-  return 0;
-#endif
-}
-
 int
 main (int argc, char *argv[])
 {
diff --git a/util/random.c b/util/random.c
new file mode 100644 (file)
index 0000000..8ace0e4
--- /dev/null
@@ -0,0 +1,5 @@
+#if defined (_WIN32) || defined (__CYGWIN__)
+#include "random_windows.c"
+#else
+#include "random_unix.c"
+#endif
diff --git a/util/random_unix.c b/util/random_unix.c
new file mode 100644 (file)
index 0000000..f574548
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 1992-1999,2001,2003,2004,2005,2009,2010,2011,2012,2013 Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <grub/types.h>
+#include <grub/crypto.h>
+#include <grub/auth.h>
+#include <grub/emu/misc.h>
+#include <grub/util/misc.h>
+#include <grub/i18n.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+grub_get_random (void *out, grub_size_t len)
+{
+#if ! defined (__linux__) && ! defined (__FreeBSD__) && ! defined (__OpenBSD__) && !defined (__GNU__) && ! defined (_WIN32) && !defined(__CYGWIN__)
+  /* TRANSLATORS: The generator might still be secure just GRUB isn't sure about it.  */
+  printf ("%s", _("WARNING: your random generator isn't known to be secure\n"));
+#warning "your random generator isn't known to be secure"
+#endif
+  FILE *f;
+  size_t rd;
+
+  f = fopen ("/dev/urandom", "rb");
+  if (!f)
+    return 1;
+  rd = fread (out, 1, len, f);
+  fclose (f);
+
+  if (rd != len)
+    return 1;
+  return 0;
+}
diff --git a/util/random_windows.c b/util/random_windows.c
new file mode 100644 (file)
index 0000000..78f5082
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 1992-1999,2001,2003,2004,2005,2009,2010,2011,2012,2013 Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <grub/types.h>
+#include <grub/crypto.h>
+#include <grub/auth.h>
+#include <grub/emu/misc.h>
+#include <grub/util/misc.h>
+#include <grub/i18n.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <windows.h>
+#include <wincrypt.h>
+
+int
+grub_get_random (void *out, grub_size_t len)
+{
+  HCRYPTPROV   hCryptProv;
+  if (!CryptAcquireContext (&hCryptProv,
+                           NULL,
+                           MS_DEF_PROV,
+                           PROV_RSA_FULL,
+                           CRYPT_VERIFYCONTEXT))
+    return 1;
+  if (!CryptGenRandom (hCryptProv, len, out))
+    {
+      CryptReleaseContext (hCryptProv, 0);
+      return 1;
+    }
+
+  CryptReleaseContext (hCryptProv, 0);
+
+  return 0;
+}