aboutsummaryrefslogtreecommitdiff
path: root/crypto.h
diff options
context:
space:
mode:
Diffstat (limited to 'crypto.h')
-rw-r--r--crypto.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/crypto.h b/crypto.h
new file mode 100644
index 0000000..c7ba816
--- /dev/null
+++ b/crypto.h
@@ -0,0 +1,71 @@
+/* This file is part of libbrandt.
+ * Copyright (C) 2016 GNUnet e.V.
+ *
+ * libbrandt 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.
+ *
+ * libbrandt 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
+ * libbrandt. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @file crypto.h
+ * @brief Interface of the crypto primitives.
+ */
+
+#ifndef _BRANDT_CRYPTO_H
+#define _BRANDT_CRYPTO_H
+
+#include <gcrypt.h>
+#include <stdint.h>
+
+/* --- RANDOM --- */
+
+
+void brandt_rand_poll ();
+
+
+
+/* --- HASHING --- */
+
+struct brandt_hash_code {
+ uint32_t bits[512 / 8 / sizeof (uint32_t)]; /* = 16 */
+};
+
+void brandt_hash (const void *block, size_t size, struct brandt_hash_code *ret);
+
+
+
+/* --- MPI --- */
+
+void brandt_mpi_print_unsigned (void *buf, size_t size, gcry_mpi_t val);
+void brandt_mpi_scan_unsigned (gcry_mpi_t *result, const void *data,
+ size_t size);
+
+
+
+/* --- ECDHE --- */
+
+struct brandt_dhe_skey {
+ unsigned char d[256 / 8];
+};
+
+struct brandt_dhe_pkey {
+ unsigned char q_y[256 / 8];
+};
+
+void brandt_ecdhe_key_create (struct brandt_dhe_skey *priv);
+void brandt_ecdhe_key_get_public (const struct brandt_dhe_skey *priv,
+ struct brandt_dhe_pkey *pub);
+int brandt_ecdhe (const struct brandt_dhe_skey *priv,
+ const struct brandt_dhe_pkey *pub,
+ struct brandt_hash_code *key_material);
+void brandt_ecdhe_key_clear (struct brandt_dhe_skey *priv);
+
+#endif /* ifndef _BRANDT_CRYPTO_H */