1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* key-chain for authentication.
3 * Copyright (C) 2000 Kunihiro Ishiguro
6 #ifndef _ZEBRA_KEYCHAIN_H
7 #define _ZEBRA_KEYCHAIN_H
15 enum keychain_hash_algo
{
18 KEYCHAIN_ALGO_HMAC_SHA1
,
19 KEYCHAIN_ALGO_HMAC_SHA256
,
20 KEYCHAIN_ALGO_HMAC_SHA384
,
21 KEYCHAIN_ALGO_HMAC_SHA512
,
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
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
39 struct keychain_algo_info
{
40 enum keychain_hash_algo key
;
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
);
63 DECLARE_QOBJ_TYPE(keychain
);
76 enum keychain_hash_algo hash_algo
;
77 struct key_range send
;
78 struct key_range accept
;
82 DECLARE_QOBJ_TYPE(key
);
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
);
94 #endif /* _ZEBRA_KEYCHAIN_H */