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