]>
Commit | Line | Data |
---|---|---|
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 |
12 | extern "C" { | |
13 | #endif | |
14 | ||
72000880 AR |
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; | |
42bfee18 AR |
42 | uint16_t length; |
43 | uint16_t block; | |
72000880 AR |
44 | const char *desc; |
45 | }; | |
46 | ||
47 | extern const struct keychain_algo_info algo_info[]; | |
42bfee18 AR |
48 | uint16_t keychain_get_block_size(enum keychain_hash_algo key); |
49 | uint16_t keychain_get_hash_len(enum keychain_hash_algo key); | |
72000880 AR |
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 | ||
d62a17ae | 56 | struct keychain { |
57 | char *name; | |
718e3744 | 58 | |
d62a17ae | 59 | struct list *key; |
e80e7cce | 60 | |
96244aca | 61 | QOBJ_FIELDS; |
718e3744 | 62 | }; |
96244aca | 63 | DECLARE_QOBJ_TYPE(keychain); |
718e3744 | 64 | |
d62a17ae | 65 | struct key_range { |
66 | time_t start; | |
67 | time_t end; | |
718e3744 | 68 | |
d7c0a89a | 69 | uint8_t duration; |
718e3744 | 70 | }; |
71 | ||
d62a17ae | 72 | struct 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 | 82 | DECLARE_QOBJ_TYPE(key); |
718e3744 | 83 | |
d62a17ae | 84 | extern void keychain_init(void); |
85 | extern struct keychain *keychain_lookup(const char *); | |
d7c0a89a | 86 | extern struct key *key_lookup_for_accept(const struct keychain *, uint32_t); |
d62a17ae | 87 | extern struct key *key_match_for_accept(const struct keychain *, const char *); |
88 | extern struct key *key_lookup_for_send(const struct keychain *); | |
72000880 | 89 | const 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 */ |