summaryrefslogtreecommitdiffstats
path: root/grub-core/lib/libgcrypt_wrap
diff options
context:
space:
mode:
Diffstat (limited to 'grub-core/lib/libgcrypt_wrap')
-rw-r--r--grub-core/lib/libgcrypt_wrap/cipher_wrap.h77
-rw-r--r--grub-core/lib/libgcrypt_wrap/mem.c140
2 files changed, 217 insertions, 0 deletions
diff --git a/grub-core/lib/libgcrypt_wrap/cipher_wrap.h b/grub-core/lib/libgcrypt_wrap/cipher_wrap.h
new file mode 100644
index 0000000..4283549
--- /dev/null
+++ b/grub-core/lib/libgcrypt_wrap/cipher_wrap.h
@@ -0,0 +1,77 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009 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/>.
+ */
+
+#ifndef GRUB_GCRY_WRAP_HEADER
+#define GRUB_GCRY_WRAP_HEADER 1
+
+#include <grub/types.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/dl.h>
+#include <grub/crypto.h>
+
+#include <sys/types.h>
+
+#define _gcry_mpi_invm gcry_mpi_invm
+#define _gcry_mpi_set gcry_mpi_set
+#define _gcry_mpi_set_ui gcry_mpi_set_ui
+#define size_t grub_size_t
+
+#undef __GNU_LIBRARY__
+#define __GNU_LIBRARY__ 1
+
+#define U64_C(c) (c ## ULL)
+
+#define PUBKEY_FLAG_NO_BLINDING (1 << 0)
+
+#define CIPHER_INFO_NO_WEAK_KEY 1
+
+#define HAVE_U64_TYPEDEF 1
+
+/* Selftests are in separate modules. */
+static inline char *
+selftest (void)
+{
+ return NULL;
+}
+
+static inline int
+_gcry_fips_mode (void)
+{
+ return 0;
+}
+
+#define assert gcry_assert
+
+#ifdef GRUB_UTIL
+
+#define memset grub_memset
+
+#endif
+
+
+#define DBG_CIPHER 0
+
+#include <string.h>
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#include <grub/gcrypt/g10lib.h>
+#include <grub/gcrypt/gcrypt.h>
+
+#define gcry_mpi_mod _gcry_mpi_mod
+
+#endif
diff --git a/grub-core/lib/libgcrypt_wrap/mem.c b/grub-core/lib/libgcrypt_wrap/mem.c
new file mode 100644
index 0000000..74c6eaf
--- /dev/null
+++ b/grub-core/lib/libgcrypt_wrap/mem.c
@@ -0,0 +1,140 @@
+#include <grub/gcrypt/g10lib.h>
+#include <grub/gcrypt/gpg-error.h>
+#include <grub/term.h>
+#include <grub/crypto.h>
+#include <grub/dl.h>
+#include <grub/env.h>
+#include <grub/safemath.h>
+
+GRUB_MOD_LICENSE ("GPLv3+");
+
+void *
+gcry_malloc (size_t n)
+{
+ return grub_malloc (n);
+}
+
+void *
+gcry_malloc_secure (size_t n)
+{
+ return grub_malloc (n);
+}
+
+void
+gcry_free (void *a)
+{
+ grub_free (a);
+}
+
+int
+gcry_is_secure (const void *a __attribute__ ((unused)))
+{
+ return 0;
+}
+
+/* FIXME: implement "exit". */
+void *
+gcry_xcalloc (size_t n, size_t m)
+{
+ void *ret;
+ size_t sz;
+ if (grub_mul (n, m, &sz))
+ grub_fatal ("gcry_xcalloc would overflow");
+ ret = grub_zalloc (sz);
+ if (!ret)
+ grub_fatal ("gcry_xcalloc failed");
+ return ret;
+}
+
+void *
+gcry_xmalloc_secure (size_t n)
+{
+ void *ret;
+ ret = grub_malloc (n);
+ if (!ret)
+ grub_fatal ("gcry_xmalloc failed");
+ return ret;
+}
+
+void *
+gcry_xcalloc_secure (size_t n, size_t m)
+{
+ void *ret;
+ size_t sz;
+ if (grub_mul (n, m, &sz))
+ grub_fatal ("gcry_xcalloc would overflow");
+ ret = grub_zalloc (sz);
+ if (!ret)
+ grub_fatal ("gcry_xcalloc failed");
+ return ret;
+}
+
+void *
+gcry_xmalloc (size_t n)
+{
+ void *ret;
+ ret = grub_malloc (n);
+ if (!ret)
+ grub_fatal ("gcry_xmalloc failed");
+ return ret;
+}
+
+void *
+gcry_xrealloc (void *a, size_t n)
+{
+ void *ret;
+ ret = grub_realloc (a, n);
+ if (!ret)
+ grub_fatal ("gcry_xrealloc failed");
+ return ret;
+}
+
+void
+_gcry_check_heap (const void *a __attribute__ ((unused)))
+{
+
+}
+
+void _gcry_log_printf (const char *fmt, ...)
+{
+ va_list args;
+ const char *debug = grub_env_get ("debug");
+
+ if (! debug)
+ return;
+
+ if (grub_strword (debug, "all") || grub_strword (debug, "gcrypt"))
+ {
+ grub_printf ("gcrypt: ");
+ va_start (args, fmt);
+ grub_vprintf (fmt, args);
+ va_end (args);
+ grub_refresh ();
+ }
+}
+
+void _gcry_log_bug (const char *fmt, ...)
+{
+ va_list args;
+
+ grub_printf ("gcrypt bug: ");
+ va_start (args, fmt);
+ grub_vprintf (fmt, args);
+ va_end (args);
+ grub_refresh ();
+ grub_fatal ("gcrypt bug");
+}
+
+gcry_err_code_t
+gpg_error_from_syserror (void)
+{
+ switch (grub_errno)
+ {
+ case GRUB_ERR_NONE:
+ return GPG_ERR_NO_ERROR;
+ case GRUB_ERR_OUT_OF_MEMORY:
+ return GPG_ERR_OUT_OF_MEMORY;
+ default:
+ return GPG_ERR_GENERAL;
+ }
+}