]> git.proxmox.com Git - mirror_frr.git/blame - lib/keychain.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / lib / keychain.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
718e3744 2/* key-chain for authentication.
3 * Copyright (C) 2000 Kunihiro Ishiguro
718e3744 4 */
5
6#ifndef _ZEBRA_KEYCHAIN_H
7#define _ZEBRA_KEYCHAIN_H
8
e80e7cce
DL
9#include "qobj.h"
10
5e244469
RW
11#ifdef __cplusplus
12extern "C" {
13#endif
14
72000880
AR
15enum keychain_hash_algo {
16 KEYCHAIN_ALGO_NULL,
17 KEYCHAIN_ALGO_MD5,
18 KEYCHAIN_ALGO_HMAC_SHA1,
19 KEYCHAIN_ALGO_HMAC_SHA256,
20 KEYCHAIN_ALGO_HMAC_SHA384,
21 KEYCHAIN_ALGO_HMAC_SHA512,
22 KEYCHAIN_ALGO_MAX
23};
24
25#define KEYCHAIN_MD5_HASH_SIZE 16
26#define KEYCHAIN_HMAC_SHA1_HASH_SIZE 20
27#define KEYCHAIN_HMAC_SHA256_HASH_SIZE 32
28#define KEYCHAIN_HMAC_SHA384_HASH_SIZE 48
29#define KEYCHAIN_HMAC_SHA512_HASH_SIZE 64
30#define KEYCHAIN_MAX_HASH_SIZE 64
31
32#define KEYCHAIN_ALGO_MD5_INTERNAL_BLK_SIZE 16
33#define KEYCHAIN_ALGO_SHA1_INTERNAL_BLK_SIZE 64
34#define KEYCHAIN_ALGO_SHA256_INTERNAL_BLK_SIZE 64
35#define KEYCHAIN_ALGO_SHA384_INTERNAL_BLK_SIZE 128
36#define KEYCHAIN_ALGO_SHA512_INTERNAL_BLK_SIZE 128
37#define KEYCHAIN_ALGO_MAX_INTERNAL_BLK_SIZE 128
38
39struct keychain_algo_info {
40 enum keychain_hash_algo key;
41 const char *name;
42bfee18
AR
42 uint16_t length;
43 uint16_t block;
72000880
AR
44 const char *desc;
45};
46
47extern const struct keychain_algo_info algo_info[];
42bfee18
AR
48uint16_t keychain_get_block_size(enum keychain_hash_algo key);
49uint16_t keychain_get_hash_len(enum keychain_hash_algo key);
72000880
AR
50const char *keychain_get_description(enum keychain_hash_algo key);
51struct keychain_algo_info
52keychain_get_hash_algo_info(enum keychain_hash_algo key);
53enum keychain_hash_algo keychain_get_algo_id_by_name(const char *name);
54const char *keychain_get_algo_name_by_id(enum keychain_hash_algo key);
55
d62a17ae 56struct keychain {
57 char *name;
718e3744 58
d62a17ae 59 struct list *key;
e80e7cce 60
96244aca 61 QOBJ_FIELDS;
718e3744 62};
96244aca 63DECLARE_QOBJ_TYPE(keychain);
718e3744 64
d62a17ae 65struct key_range {
66 time_t start;
67 time_t end;
718e3744 68
d7c0a89a 69 uint8_t duration;
718e3744 70};
71
d62a17ae 72struct key {
d7c0a89a 73 uint32_t index;
718e3744 74
d62a17ae 75 char *string;
72000880 76 enum keychain_hash_algo hash_algo;
d62a17ae 77 struct key_range send;
78 struct key_range accept;
e80e7cce 79
96244aca 80 QOBJ_FIELDS;
718e3744 81};
96244aca 82DECLARE_QOBJ_TYPE(key);
718e3744 83
d62a17ae 84extern void keychain_init(void);
85extern struct keychain *keychain_lookup(const char *);
d7c0a89a 86extern struct key *key_lookup_for_accept(const struct keychain *, uint32_t);
d62a17ae 87extern struct key *key_match_for_accept(const struct keychain *, const char *);
88extern struct key *key_lookup_for_send(const struct keychain *);
72000880 89const char *keychain_algo_str(enum keychain_hash_algo hash_algo);
5e244469
RW
90#ifdef __cplusplus
91}
92#endif
93
718e3744 94#endif /* _ZEBRA_KEYCHAIN_H */