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