aboutsummaryrefslogtreecommitdiff
path: root/crypto.h
blob: acdce1180114377dda7e005a9809afd073547059 (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
/* 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>

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);
void brandt_ec_keypair_create_base (gcry_mpi_point_t *pkey, gcry_mpi_t *skey, const gcry_mpi_point_t base);
int brandt_ec_point_cmp (const gcry_mpi_point_t a, const gcry_mpi_point_t b);

#endif /* ifndef _BRANDT_CRYPTO_H */