frr/lib/keychain.c

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

317 lines
6.6 KiB
C
Raw Permalink Normal View History

// SPDX-License-Identifier: GPL-2.0-or-later
2002-12-13 21:15:29 +01:00
/* key-chain for authentication.
* Copyright (C) 2000 Kunihiro Ishiguro
*/
2002-12-13 21:15:29 +01:00
#include "config.h"
2002-12-13 21:15:29 +01:00
#include <zebra.h>
#include "keychain.h"
#include "linklist.h"
#include "memory.h"
2002-12-13 21:15:29 +01:00
DEFINE_MTYPE(LIB, KEY, "Key");
DEFINE_MTYPE(LIB, KEYCHAIN, "Key chain");
DEFINE_MTYPE(LIB, KEYCHAIN_DESC, "Key chain description");
DEFINE_QOBJ_TYPE(keychain);
DEFINE_QOBJ_TYPE(key);
2002-12-13 21:15:29 +01:00
/* Master list of key chain. */
struct list *keychain_list;
2002-12-13 21:15:29 +01:00
static struct keychain *keychain_new(void)
2002-12-13 21:15:29 +01:00
{
struct keychain *keychain;
keychain = XCALLOC(MTYPE_KEYCHAIN, sizeof(struct keychain));
QOBJ_REG(keychain, keychain);
return keychain;
2002-12-13 21:15:29 +01:00
}
static void keychain_free(struct keychain *keychain)
{
QOBJ_UNREG(keychain);
2002-12-13 21:15:29 +01:00
XFREE(MTYPE_KEYCHAIN, keychain);
}
static struct key *key_new(void)
2002-12-13 21:15:29 +01:00
{
struct key *key = XCALLOC(MTYPE_KEY, sizeof(struct key));
QOBJ_REG(key, key);
return key;
2002-12-13 21:15:29 +01:00
}
static void key_free(struct key *key)
{
QOBJ_UNREG(key);
2002-12-13 21:15:29 +01:00
XFREE(MTYPE_KEY, key);
}
struct keychain *keychain_lookup(const char *name)
2002-12-13 21:15:29 +01:00
{
struct listnode *node;
2002-12-13 21:15:29 +01:00
struct keychain *keychain;
if (name == NULL)
return NULL;
for (ALL_LIST_ELEMENTS_RO(keychain_list, node, keychain)) {
2002-12-13 21:15:29 +01:00
if (strcmp(keychain->name, name) == 0)
return keychain;
}
return NULL;
}
static int key_cmp_func(void *arg1, void *arg2)
2002-12-13 21:15:29 +01:00
{
const struct key *k1 = arg1;
const struct key *k2 = arg2;
2002-12-13 21:15:29 +01:00
if (k1->index > k2->index)
return 1;
if (k1->index < k2->index)
return -1;
return 0;
}
static void key_delete_func(struct key *key)
{
if (key->string)
XFREE(MTYPE_KEY, key->string);
2002-12-13 21:15:29 +01:00
key_free(key);
}
struct keychain *keychain_get(const char *name)
2002-12-13 21:15:29 +01:00
{
struct keychain *keychain;
keychain = keychain_lookup(name);
if (keychain)
return keychain;
keychain = keychain_new();
keychain->name = XSTRDUP(MTYPE_KEYCHAIN, name);
2002-12-13 21:15:29 +01:00
keychain->key = list_new();
keychain->key->cmp = (int (*)(void *, void *))key_cmp_func;
keychain->key->del = (void (*)(void *))key_delete_func;
listnode_add(keychain_list, keychain);
return keychain;
}
void keychain_delete(struct keychain *keychain)
2002-12-13 21:15:29 +01:00
{
XFREE(MTYPE_KEYCHAIN, keychain->name);
2002-12-13 21:15:29 +01:00
list_delete(&keychain->key);
2002-12-13 21:15:29 +01:00
listnode_delete(keychain_list, keychain);
keychain_free(keychain);
}
struct key *key_lookup(const struct keychain *keychain, uint32_t index)
2002-12-13 21:15:29 +01:00
{
struct listnode *node;
2002-12-13 21:15:29 +01:00
struct key *key;
for (ALL_LIST_ELEMENTS_RO(keychain->key, node, key)) {
2002-12-13 21:15:29 +01:00
if (key->index == index)
return key;
}
return NULL;
}
struct key *key_lookup_for_accept(const struct keychain *keychain,
uint32_t index)
2002-12-13 21:15:29 +01:00
{
struct listnode *node;
2002-12-13 21:15:29 +01:00
struct key *key;
time_t now;
2002-12-13 21:15:29 +01:00
now = time(NULL);
for (ALL_LIST_ELEMENTS_RO(keychain->key, node, key)) {
2002-12-13 21:15:29 +01:00
if (key->index >= index) {
if (key->accept.start == 0)
return key;
2002-12-13 21:15:29 +01:00
if (key->accept.start <= now)
if (key->accept.end >= now
|| key->accept.end == -1)
return key;
}
2002-12-13 21:15:29 +01:00
}
return NULL;
}
struct key *key_match_for_accept(const struct keychain *keychain,
const char *auth_str)
2002-12-13 21:15:29 +01:00
{
struct listnode *node;
2002-12-13 21:15:29 +01:00
struct key *key;
time_t now;
2002-12-13 21:15:29 +01:00
now = time(NULL);
for (ALL_LIST_ELEMENTS_RO(keychain->key, node, key)) {
2002-12-13 21:15:29 +01:00
if (key->accept.start == 0
|| (key->accept.start <= now
&& (key->accept.end >= now || key->accept.end == -1)))
if (key->string && (strncmp(key->string, auth_str, 16) == 0))
2002-12-13 21:15:29 +01:00
return key;
}
return NULL;
}
struct key *key_lookup_for_send(const struct keychain *keychain)
2002-12-13 21:15:29 +01:00
{
struct listnode *node;
2002-12-13 21:15:29 +01:00
struct key *key;
time_t now;
now = time(NULL);
for (ALL_LIST_ELEMENTS_RO(keychain->key, node, key)) {
2002-12-13 21:15:29 +01:00
if (key->send.start == 0)
return key;
if (key->send.start <= now)
if (key->send.end >= now || key->send.end == -1)
return key;
}
return NULL;
}
struct key *key_get(const struct keychain *keychain, uint32_t index)
2002-12-13 21:15:29 +01:00
{
struct key *key;
key = key_lookup(keychain, index);
if (key)
return key;
key = key_new();
key->index = index;
key->hash_algo = KEYCHAIN_ALGO_NULL;
2002-12-13 21:15:29 +01:00
listnode_add_sort(keychain->key, key);
return key;
}
void key_delete(struct keychain *keychain, struct key *key)
2002-12-13 21:15:29 +01:00
{
listnode_delete(keychain->key, key);
XFREE(MTYPE_KEY, key->string);
2002-12-13 21:15:29 +01:00
key_free(key);
}
const struct keychain_algo_info algo_info[] = {
{KEYCHAIN_ALGO_NULL, "null", 0, 0, "NULL"},
{KEYCHAIN_ALGO_MD5, "md5", KEYCHAIN_MD5_HASH_SIZE,
KEYCHAIN_ALGO_MD5_INTERNAL_BLK_SIZE, "MD5"},
{KEYCHAIN_ALGO_HMAC_SHA1, "hmac-sha-1", KEYCHAIN_HMAC_SHA1_HASH_SIZE,
KEYCHAIN_ALGO_SHA1_INTERNAL_BLK_SIZE, "HMAC-SHA-1"},
{KEYCHAIN_ALGO_HMAC_SHA256, "hmac-sha-256",
KEYCHAIN_HMAC_SHA256_HASH_SIZE, KEYCHAIN_ALGO_SHA256_INTERNAL_BLK_SIZE,
"HMAC-SHA-256"},
{KEYCHAIN_ALGO_HMAC_SHA384, "hmac-sha-384",
KEYCHAIN_HMAC_SHA384_HASH_SIZE, KEYCHAIN_ALGO_SHA384_INTERNAL_BLK_SIZE,
"HMAC-SHA-384"},
{KEYCHAIN_ALGO_HMAC_SHA512, "hmac-sha-512",
KEYCHAIN_HMAC_SHA512_HASH_SIZE, KEYCHAIN_ALGO_SHA512_INTERNAL_BLK_SIZE,
"HMAC-SHA-512"},
{KEYCHAIN_ALGO_MAX, "max", KEYCHAIN_MAX_HASH_SIZE,
KEYCHAIN_ALGO_MAX_INTERNAL_BLK_SIZE, "Not defined"}
};
ospf6d: fix coverity issues. Fixed below coverity issues ________________________________________________________________________________________________________ *** CID 1511366: (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2631 in ospf6_make_lsupdate_list() 2625 + OSPF6_HEADER_SIZE) 2626 > ospf6_packet_max(on->ospf6_if)) { 2627 ospf6_fill_header(on->ospf6_if, (*op)->s, 2628 length + OSPF6_HEADER_SIZE); 2629 (*op)->length = length + OSPF6_HEADER_SIZE; 2630 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); >>> CID 1511366: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2631 ospf6_send_lsupdate(on, NULL, *op); 2632 2633 /* refresh packet */ 2634 *op = ospf6_packet_new(on->ospf6_if->ifmtu); 2635 length = OSPF6_LS_UPD_MIN_SIZE; 2636 *lsa_cnt = 0; /ospf6d/ospf6_message.c: 2631 in ospf6_make_lsupdate_list() 2625 + OSPF6_HEADER_SIZE) 2626 > ospf6_packet_max(on->ospf6_if)) { 2627 ospf6_fill_header(on->ospf6_if, (*op)->s, 2628 length + OSPF6_HEADER_SIZE); 2629 (*op)->length = length + OSPF6_HEADER_SIZE; 2630 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); >>> CID 1511366: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2631 ospf6_send_lsupdate(on, NULL, *op); ________________________________________________________________________________________________________ *** CID 1511365: (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2668 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); ________________________________________________________________________________________________________ *** CID 1511364: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2125 in ospf6_write() 2120 if (oi->at_data.flags != 0) { 2121 at_len = ospf6_auth_len_get(oi); 2122 if (at_len) { 2123 iovector[0].iov_len = 2124 ntohs(oh->length) + at_len; >>> CID 1511364: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "iovector[0].iov_len" to a tainted sink. 2125 ospf6_auth_digest_send(oi->linklocal_addr, oi, 2126 oh, at_len, 2127 iovector[0].iov_len); 2128 } else { 2129 iovector[0].iov_len = ntohs(oh->length); 2130 } ________________________________________________________________________________________________________ *** CID 1511363: (DEADCODE) /ospf6d/ospf6_auth_trailer.c: 275 in ospf6_hash_hmac_sha_digest() 269 case KEYCHAIN_ALGO_HMAC_SHA512: 270 #ifdef CRYPTO_OPENSSL 271 sha512_digest(mes, len, digest); 272 #endif 273 break; 274 case KEYCHAIN_ALGO_NULL: >>> CID 1511363: (DEADCODE) >>> Execution cannot reach this statement: "case KEYCHAIN_ALGO_MAX:". 275 case KEYCHAIN_ALGO_MAX: 276 default: /ospf6d/ospf6_auth_trailer.c: 274 in ospf6_hash_hmac_sha_digest() 269 case KEYCHAIN_ALGO_HMAC_SHA512: 270 #ifdef CRYPTO_OPENSSL 271 sha512_digest(mes, len, digest); 272 #endif 273 break; >>> CID 1511363: (DEADCODE) >>> Execution cannot reach this statement: "case KEYCHAIN_ALGO_NULL:". 274 case KEYCHAIN_ALGO_NULL: 275 case KEYCHAIN_ALGO_MAX: 276 default: ________________________________________________________________________________________________________ *** CID 1511362: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_auth_trailer.c: 541 in ospf6_auth_check_digest() 535 536 auth_len = ntohs(ospf6_auth->length); 537 538 memcpy(temp_hash, ospf6_auth->data, hash_len); 539 memcpy(ospf6_auth->data, apad, hash_len); 540 >>> CID 1511362: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "oh_len + auth_len + lls_block_len" to a tainted sink. 541 ospf6_auth_update_digest(oi, oh, ospf6_auth, auth_str, 542 (oh_len + auth_len + lls_block_len), 543 hash_algo); ________________________________________________________________________________________________________ *** CID 1511361: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_auth_trailer.c: 124 in ospf6_auth_hdr_dump_recv() 118 at_len = length - (oh_len + lls_len); 119 if (at_len > 0) { 120 ospf6_at_hdr = 121 (struct ospf6_auth_hdr *)((uint8_t *)ospfh + oh_len); 122 at_hdr_len = ntohs(ospf6_at_hdr->length); 123 hash_len = at_hdr_len - OSPF6_AUTH_HDR_MIN_SIZE; >>> CID 1511361: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "hash_len" to a tainted sink. 124 memcpy(temp, ospf6_at_hdr->data, hash_len); 125 temp[hash_len] = '\0'; ________________________________________________________________________________________________________ *** CID 1482146: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2787 in ospf6_lsupdate_send_neighbor_now() 2781 2782 if (IS_OSPF6_DEBUG_FLOODING 2783 || IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND_HDR)) 2784 zlog_debug("%s: Send lsupdate with lsa %s (age %u)", __func__, 2785 lsa->name, ntohs(lsa->header->age)); 2786 >>> CID 1482146: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "op->length" to a tainted sink. 2787 ospf6_send_lsupdate(on, NULL, op); Signed-off-by: Abhinay Ramesh <rabhinay@vmware.com>
2022-02-12 13:05:57 +01:00
uint16_t keychain_get_block_size(enum keychain_hash_algo key)
{
return algo_info[key].block;
}
ospf6d: fix coverity issues. Fixed below coverity issues ________________________________________________________________________________________________________ *** CID 1511366: (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2631 in ospf6_make_lsupdate_list() 2625 + OSPF6_HEADER_SIZE) 2626 > ospf6_packet_max(on->ospf6_if)) { 2627 ospf6_fill_header(on->ospf6_if, (*op)->s, 2628 length + OSPF6_HEADER_SIZE); 2629 (*op)->length = length + OSPF6_HEADER_SIZE; 2630 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); >>> CID 1511366: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2631 ospf6_send_lsupdate(on, NULL, *op); 2632 2633 /* refresh packet */ 2634 *op = ospf6_packet_new(on->ospf6_if->ifmtu); 2635 length = OSPF6_LS_UPD_MIN_SIZE; 2636 *lsa_cnt = 0; /ospf6d/ospf6_message.c: 2631 in ospf6_make_lsupdate_list() 2625 + OSPF6_HEADER_SIZE) 2626 > ospf6_packet_max(on->ospf6_if)) { 2627 ospf6_fill_header(on->ospf6_if, (*op)->s, 2628 length + OSPF6_HEADER_SIZE); 2629 (*op)->length = length + OSPF6_HEADER_SIZE; 2630 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); >>> CID 1511366: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2631 ospf6_send_lsupdate(on, NULL, *op); ________________________________________________________________________________________________________ *** CID 1511365: (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); /ospf6d/ospf6_message.c: 2674 in ospf6_make_ls_retrans_list() 2668 ospf6_fill_lsupdate_header((*op)->s, *lsa_cnt); 2669 if (on->ospf6_if->state == OSPF6_INTERFACE_POINTTOPOINT) 2670 (*op)->dst = allspfrouters6; 2671 else 2672 (*op)->dst = on->linklocal_addr; 2673 >>> CID 1511365: (TAINTED_SCALAR) >>> Passing tainted variable "(*op)->length" to a tainted sink. 2674 ospf6_fill_hdr_checksum(on->ospf6_if, *op); 2675 ospf6_packet_add(on->ospf6_if, *op); 2676 OSPF6_MESSAGE_WRITE_ON(on->ospf6_if); ________________________________________________________________________________________________________ *** CID 1511364: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2125 in ospf6_write() 2120 if (oi->at_data.flags != 0) { 2121 at_len = ospf6_auth_len_get(oi); 2122 if (at_len) { 2123 iovector[0].iov_len = 2124 ntohs(oh->length) + at_len; >>> CID 1511364: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "iovector[0].iov_len" to a tainted sink. 2125 ospf6_auth_digest_send(oi->linklocal_addr, oi, 2126 oh, at_len, 2127 iovector[0].iov_len); 2128 } else { 2129 iovector[0].iov_len = ntohs(oh->length); 2130 } ________________________________________________________________________________________________________ *** CID 1511363: (DEADCODE) /ospf6d/ospf6_auth_trailer.c: 275 in ospf6_hash_hmac_sha_digest() 269 case KEYCHAIN_ALGO_HMAC_SHA512: 270 #ifdef CRYPTO_OPENSSL 271 sha512_digest(mes, len, digest); 272 #endif 273 break; 274 case KEYCHAIN_ALGO_NULL: >>> CID 1511363: (DEADCODE) >>> Execution cannot reach this statement: "case KEYCHAIN_ALGO_MAX:". 275 case KEYCHAIN_ALGO_MAX: 276 default: /ospf6d/ospf6_auth_trailer.c: 274 in ospf6_hash_hmac_sha_digest() 269 case KEYCHAIN_ALGO_HMAC_SHA512: 270 #ifdef CRYPTO_OPENSSL 271 sha512_digest(mes, len, digest); 272 #endif 273 break; >>> CID 1511363: (DEADCODE) >>> Execution cannot reach this statement: "case KEYCHAIN_ALGO_NULL:". 274 case KEYCHAIN_ALGO_NULL: 275 case KEYCHAIN_ALGO_MAX: 276 default: ________________________________________________________________________________________________________ *** CID 1511362: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_auth_trailer.c: 541 in ospf6_auth_check_digest() 535 536 auth_len = ntohs(ospf6_auth->length); 537 538 memcpy(temp_hash, ospf6_auth->data, hash_len); 539 memcpy(ospf6_auth->data, apad, hash_len); 540 >>> CID 1511362: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "oh_len + auth_len + lls_block_len" to a tainted sink. 541 ospf6_auth_update_digest(oi, oh, ospf6_auth, auth_str, 542 (oh_len + auth_len + lls_block_len), 543 hash_algo); ________________________________________________________________________________________________________ *** CID 1511361: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_auth_trailer.c: 124 in ospf6_auth_hdr_dump_recv() 118 at_len = length - (oh_len + lls_len); 119 if (at_len > 0) { 120 ospf6_at_hdr = 121 (struct ospf6_auth_hdr *)((uint8_t *)ospfh + oh_len); 122 at_hdr_len = ntohs(ospf6_at_hdr->length); 123 hash_len = at_hdr_len - OSPF6_AUTH_HDR_MIN_SIZE; >>> CID 1511361: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "hash_len" to a tainted sink. 124 memcpy(temp, ospf6_at_hdr->data, hash_len); 125 temp[hash_len] = '\0'; ________________________________________________________________________________________________________ *** CID 1482146: Insecure data handling (TAINTED_SCALAR) /ospf6d/ospf6_message.c: 2787 in ospf6_lsupdate_send_neighbor_now() 2781 2782 if (IS_OSPF6_DEBUG_FLOODING 2783 || IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND_HDR)) 2784 zlog_debug("%s: Send lsupdate with lsa %s (age %u)", __func__, 2785 lsa->name, ntohs(lsa->header->age)); 2786 >>> CID 1482146: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted variable "op->length" to a tainted sink. 2787 ospf6_send_lsupdate(on, NULL, op); Signed-off-by: Abhinay Ramesh <rabhinay@vmware.com>
2022-02-12 13:05:57 +01:00
uint16_t keychain_get_hash_len(enum keychain_hash_algo key)
{
return algo_info[key].length;
}
const char *keychain_get_description(enum keychain_hash_algo key)
{
return algo_info[key].desc;
}
struct keychain_algo_info
keychain_get_hash_algo_info(enum keychain_hash_algo key)
{
return algo_info[key];
}
enum keychain_hash_algo keychain_get_algo_id_by_name(const char *name)
{
#ifdef CRYPTO_INTERNAL
if (!strncmp(name, "hmac-sha-2", 10))
return KEYCHAIN_ALGO_HMAC_SHA256;
else if (!strncmp(name, "m", 1))
return KEYCHAIN_ALGO_MD5;
else
return KEYCHAIN_ALGO_NULL;
#else
if (!strncmp(name, "m", 1))
return KEYCHAIN_ALGO_MD5;
else if (!strncmp(name, "hmac-sha-1", 10))
return KEYCHAIN_ALGO_HMAC_SHA1;
else if (!strncmp(name, "hmac-sha-2", 10))
return KEYCHAIN_ALGO_HMAC_SHA256;
else if (!strncmp(name, "hmac-sha-3", 10))
return KEYCHAIN_ALGO_HMAC_SHA384;
else if (!strncmp(name, "hmac-sha-5", 10))
return KEYCHAIN_ALGO_HMAC_SHA512;
else
return KEYCHAIN_ALGO_NULL;
#endif
}
const char *keychain_get_algo_name_by_id(enum keychain_hash_algo key)
{
return algo_info[key].name;
}
void keychain_terminate(void)
{
struct keychain *keychain;
while (listcount(keychain_list)) {
keychain = listgetdata(listhead(keychain_list));
listnode_delete(keychain_list, keychain);
keychain_delete(keychain);
}
list_delete(&keychain_list);
}
void keychain_init_new(bool in_backend)
2002-12-13 21:15:29 +01:00
{
keychain_list = list_new();
if (!in_backend)
keychain_cli_init();
}
void keychain_init(void)
{
keychain_init_new(false);
2002-12-13 21:15:29 +01:00
}
const struct frr_yang_module_info ietf_key_chain_deviation_info = {
.name = "frr-deviations-ietf-key-chain",
.ignore_cfg_cbs = true,
.nodes = {
{
.xpath = NULL,
},
},
};