]> git.proxmox.com Git - mirror_frr.git/blob - lib/keychain.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / lib / keychain.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* key-chain for authentication.
3 * Copyright (C) 2000 Kunihiro Ishiguro
4 */
5
6 #ifndef _ZEBRA_KEYCHAIN_H
7 #define _ZEBRA_KEYCHAIN_H
8
9 #include "qobj.h"
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 enum 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
39 struct keychain_algo_info {
40 enum keychain_hash_algo key;
41 const char *name;
42 uint16_t length;
43 uint16_t block;
44 const char *desc;
45 };
46
47 extern const struct keychain_algo_info algo_info[];
48 uint16_t keychain_get_block_size(enum keychain_hash_algo key);
49 uint16_t keychain_get_hash_len(enum keychain_hash_algo key);
50 const char *keychain_get_description(enum keychain_hash_algo key);
51 struct keychain_algo_info
52 keychain_get_hash_algo_info(enum keychain_hash_algo key);
53 enum keychain_hash_algo keychain_get_algo_id_by_name(const char *name);
54 const char *keychain_get_algo_name_by_id(enum keychain_hash_algo key);
55
56 struct keychain {
57 char *name;
58
59 struct list *key;
60
61 QOBJ_FIELDS;
62 };
63 DECLARE_QOBJ_TYPE(keychain);
64
65 struct key_range {
66 time_t start;
67 time_t end;
68
69 uint8_t duration;
70 };
71
72 struct key {
73 uint32_t index;
74
75 char *string;
76 enum keychain_hash_algo hash_algo;
77 struct key_range send;
78 struct key_range accept;
79
80 QOBJ_FIELDS;
81 };
82 DECLARE_QOBJ_TYPE(key);
83
84 extern void keychain_init(void);
85 extern struct keychain *keychain_lookup(const char *);
86 extern struct key *key_lookup_for_accept(const struct keychain *, uint32_t);
87 extern struct key *key_match_for_accept(const struct keychain *, const char *);
88 extern struct key *key_lookup_for_send(const struct keychain *);
89 const char *keychain_algo_str(enum keychain_hash_algo hash_algo);
90 #ifdef __cplusplus
91 }
92 #endif
93
94 #endif /* _ZEBRA_KEYCHAIN_H */