a134177ed9f82189504191d90f3ed9e97c2b47cbTinderbox User * Copyright (C) 2002, 2004, 2005, 2007, 2009-2017 Internet Systems Consortium, Inc. ("ISC")
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
058e44186b74531402c1f99088eb9dbe4926f8daMark Andrews/* RFC3658 */
12ff7274fe2ea531ecca6a71fb9f7e1ae92da389Mark Andrews (DNS_RDATATYPEATTR_DNSSEC|DNS_RDATATYPEATTR_ATPARENT)
0da29be670f6fa5b2a6320d9d843bc8b802c153aMark Andrews unsigned char c;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews RETERR(uint16_tobuffer(token.value.as_ulong, target));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * Algorithm.
0da29be670f6fa5b2a6320d9d843bc8b802c153aMark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
0da29be670f6fa5b2a6320d9d843bc8b802c153aMark Andrews RETTOK(dns_secalg_fromtext(&c, &token.value.as_textregion));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * Digest type.
058e44186b74531402c1f99088eb9dbe4926f8daMark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
058e44186b74531402c1f99088eb9dbe4926f8daMark Andrews RETTOK(dns_dsdigest_fromtext(&c, &token.value.as_textregion));
37dee1ff94960a61243f611c0f87f8c316815c53Mark Andrews switch (c) {
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews return (isc_hex_tobuffer(lexer, target, length));
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews return (generic_fromtext_ds(rdclass, type, lexer, origin, options,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews unsigned int n;
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * Algorithm.
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews * Digest type.
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
75ae74f8fd0847817bce2db7c868b179db67f019Mark Andrews if ((tctx->flags & DNS_STYLEFLAG_NOCRYPTO) == 0) {
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews return (generic_totext_ds(rdata, tctx, target));
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews * Check digest lengths if we know them.
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews * Only copy digest lengths if we know them.
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews * If there is extra data dns_rdata_fromwire() will
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews * detect that.
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews return (mem_tobuffer(target, sr.base, sr.length));
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews return (generic_fromwire_ds(rdclass, type, source, dctx, options,
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews return (mem_tobuffer(target, sr.base, sr.length));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic inline int
394f4aec2189750d7f861d00f97fe28ffcd9f659Mark Andrews REQUIRE(ds->length == ISC_SHA256_DIGESTLENGTH);
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews REQUIRE(ds->length == ISC_SHA384_DIGESTLENGTH);
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews RETERR(uint8_tobuffer(ds->digest_type, target));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews return (mem_tobuffer(target, ds->digest, ds->length));
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews return (generic_fromstruct_ds(rdclass, type, source, target));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews ds->digest = mem_maybedup(mctx, region.base, region.length);
3dd63ba00f91f4d54ba45ba1831375950758c0a7Mark Andrews return (generic_tostruct_ds(rdata, target, mctx));
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrewsstatic inline void
b0ba1a6059b6d6c4b3aa77d8bc84cc443b981e01Mukund Sivaraman REQUIRE(ds->common.rdtype == dns_rdatatype_ds);
3d17a3ba61a303d5c4d9867068d0fbe9f24d2988Mark Andrewsstatic inline int
0b09763c354ec91fb352b6b4cea383bd0195b2d8Mark Andrews#endif /* RDATA_GENERIC_DS_43_C */