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