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