xref: /netbsd-src/external/mpl/bind/dist/lib/dns/keydata.c (revision bcda20f65a8566e103791ec395f7f499ef322704)
1*bcda20f6Schristos /*	$NetBSD: keydata.c,v 1.7 2025/01/26 16:25:23 christos Exp $	*/
2d68c78b8Schristos 
3d68c78b8Schristos /*
4d68c78b8Schristos  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5d68c78b8Schristos  *
68596601aSchristos  * SPDX-License-Identifier: MPL-2.0
78596601aSchristos  *
8d68c78b8Schristos  * This Source Code Form is subject to the terms of the Mozilla Public
9d68c78b8Schristos  * License, v. 2.0. If a copy of the MPL was not distributed with this
10fce770bdSchristos  * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11d68c78b8Schristos  *
12d68c78b8Schristos  * See the COPYRIGHT file distributed with this work for additional
13d68c78b8Schristos  * information regarding copyright ownership.
14d68c78b8Schristos  */
15d68c78b8Schristos 
16d68c78b8Schristos /*! \file */
17d68c78b8Schristos 
18d4a20c3eSchristos #include <inttypes.h>
19d68c78b8Schristos 
20d68c78b8Schristos #include <isc/buffer.h>
21d68c78b8Schristos #include <isc/mem.h>
22d68c78b8Schristos #include <isc/string.h>
23d68c78b8Schristos #include <isc/util.h>
24d68c78b8Schristos 
255606745fSchristos #include <dns/keydata.h>
26d68c78b8Schristos #include <dns/rdata.h>
27d68c78b8Schristos #include <dns/rdatastruct.h>
28d68c78b8Schristos 
29d68c78b8Schristos isc_result_t
305606745fSchristos dns_keydata_todnskey(dns_rdata_keydata_t *keydata, dns_rdata_dnskey_t *dnskey,
315606745fSchristos 		     isc_mem_t *mctx) {
32d68c78b8Schristos 	REQUIRE(keydata != NULL && dnskey != NULL);
33d68c78b8Schristos 
34d68c78b8Schristos 	dnskey->common.rdtype = dns_rdatatype_dnskey;
35d68c78b8Schristos 	dnskey->common.rdclass = keydata->common.rdclass;
36d68c78b8Schristos 	dnskey->mctx = mctx;
37d68c78b8Schristos 	dnskey->flags = keydata->flags;
38d68c78b8Schristos 	dnskey->protocol = keydata->protocol;
39d68c78b8Schristos 	dnskey->algorithm = keydata->algorithm;
40d68c78b8Schristos 
41d68c78b8Schristos 	dnskey->datalen = keydata->datalen;
42d68c78b8Schristos 
435606745fSchristos 	if (mctx == NULL) {
44d68c78b8Schristos 		dnskey->data = keydata->data;
455606745fSchristos 	} else {
46d68c78b8Schristos 		dnskey->data = isc_mem_allocate(mctx, dnskey->datalen);
47d68c78b8Schristos 		memmove(dnskey->data, keydata->data, dnskey->datalen);
48d68c78b8Schristos 	}
49d68c78b8Schristos 
50*bcda20f6Schristos 	return ISC_R_SUCCESS;
51d68c78b8Schristos }
52d68c78b8Schristos 
53d68c78b8Schristos isc_result_t
545606745fSchristos dns_keydata_fromdnskey(dns_rdata_keydata_t *keydata, dns_rdata_dnskey_t *dnskey,
555606745fSchristos 		       uint32_t refresh, uint32_t addhd, uint32_t removehd,
565606745fSchristos 		       isc_mem_t *mctx) {
57d68c78b8Schristos 	REQUIRE(keydata != NULL && dnskey != NULL);
58d68c78b8Schristos 
59d68c78b8Schristos 	keydata->common.rdtype = dns_rdatatype_keydata;
60d68c78b8Schristos 	keydata->common.rdclass = dnskey->common.rdclass;
61d68c78b8Schristos 	keydata->mctx = mctx;
62d68c78b8Schristos 	keydata->refresh = refresh;
63d68c78b8Schristos 	keydata->addhd = addhd;
64d68c78b8Schristos 	keydata->removehd = removehd;
65d68c78b8Schristos 	keydata->flags = dnskey->flags;
66d68c78b8Schristos 	keydata->protocol = dnskey->protocol;
67d68c78b8Schristos 	keydata->algorithm = dnskey->algorithm;
68d68c78b8Schristos 
69d68c78b8Schristos 	keydata->datalen = dnskey->datalen;
705606745fSchristos 	if (mctx == NULL) {
71d68c78b8Schristos 		keydata->data = dnskey->data;
725606745fSchristos 	} else {
73d68c78b8Schristos 		keydata->data = isc_mem_allocate(mctx, keydata->datalen);
74d68c78b8Schristos 		memmove(keydata->data, dnskey->data, keydata->datalen);
75d68c78b8Schristos 	}
76d68c78b8Schristos 
77*bcda20f6Schristos 	return ISC_R_SUCCESS;
78d68c78b8Schristos }
79