diff options
author | Markus Teich <markus.teich@stusta.mhn.de> | 2016-06-12 01:14:56 +0200 |
---|---|---|
committer | Markus Teich <markus.teich@stusta.mhn.de> | 2016-06-12 01:14:56 +0200 |
commit | 381d21c602b70afb8a3f8b07d7872b26fc4e2d7d (patch) | |
tree | fcb0090b58e0bad065eaa826253c75410f5e45f1 /crypto.h | |
parent | 1d3b927c3743f626f0ffb3f49c8167c4efb34a67 (diff) |
add crypto backend
Diffstat (limited to 'crypto.h')
-rw-r--r-- | crypto.h | 71 |
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 */ |