aboutsummaryrefslogtreecommitdiff
path: root/crypto.h
blob: 28bf4eb990f40ad68318f5019e749a4ac42242bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* 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>

extern gcry_mpi_point_t ec_gen;
extern gcry_ctx_t ec_ctx;


void brandt_crypto_init ();


/* --- 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);


/* --- EC --- */

void brandt_ec_skey_create (gcry_mpi_t* skey);
void brandt_ec_pkey_compute (gcry_mpi_point_t* pkey, const gcry_mpi_t skey);
void brandt_ec_keypair_create (gcry_mpi_point_t* pkey, gcry_mpi_t* skey);

#endif /* ifndef _BRANDT_CRYPTO_H */