a134177ed9f82189504191d90f3ed9e97c2b47cbTinderbox User * Copyright (C) 1999-2005, 2007, 2009, 2011, 2012, 2015-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/.
542deb20c44666a870855bf755a100d254db074dAndreas Gustafsson/* Reviewed: Fri Mar 17 09:05:02 PST 2000 by gson */
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/* RFC2535 */
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence unsigned char c;
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Type covered.
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
542deb20c44666a870855bf755a100d254db074dAndreas Gustafsson result = dns_rdatatype_fromtext(&covered, &token.value.as_textregion);
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff if (result != ISC_R_SUCCESS && result != ISC_R_NOTIMPLEMENTED) {
0bd044c2afee944d93879a7de82cd2ccc0635798David Lawrence if (i < 0 || i > 65535)
5d15501996f597d9bbb734d88d4549828e28000bMark Andrews if (*e != 0)
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
9ac7076ebad044afb15e9e2687e3696868778538Mark Andrews RETTOK(dns_secalg_fromtext(&c, &token.value.as_textregion));
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Original ttl.
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews RETERR(uint32_tobuffer(token.value.as_ulong, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Signature expiration.
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
c46f10e4a1702191b003cf8f8fc5059c15d29c48Mark Andrews RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_expire));
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson RETERR(uint32_tobuffer(time_expire, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Time signed.
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
c46f10e4a1702191b003cf8f8fc5059c15d29c48Mark Andrews RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_signed));
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson RETERR(uint32_tobuffer(time_signed, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Key footprint.
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews RETERR(uint16_tobuffer(token.value.as_ulong, target));
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence buffer_fromregion(&buffer, &token.value.as_region);
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
822f6cdabb1edd44472c7a758b5cae71376fa9beBrian Wellington return (isc_base64_tobuffer(lexer, target, -1));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Type covered.
1ac4b2a1da88e574319b374bc733eccf8ac45327Andreas Gustafsson * XXXAG We should have something like dns_rdatatype_isknown()
1ac4b2a1da88e574319b374bc733eccf8ac45327Andreas Gustafsson * that does the right thing with type 0.
1ac4b2a1da88e574319b374bc733eccf8ac45327Andreas Gustafsson if (dns_rdatatype_isknown(covered) && covered != 0) {
1ac4b2a1da88e574319b374bc733eccf8ac45327Andreas Gustafsson RETERR(dns_rdatatype_totext(covered, target));
fad44a20eede1bbc66716241dede225500c91caaAndreas Gustafsson if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson RETERR(str_totext(tctx->linebreak, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Time signed.
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson sub = name_prefix(&name, tctx->origin, &prefix);
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson RETERR(str_totext(tctx->linebreak, target));
fad44a20eede1bbc66716241dede225500c91caaAndreas Gustafsson if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
ae114ded82e773a4d9058f833f964a17514712a8Brian Wellington dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * type covered: 2
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * algorithm: 1
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * original ttl: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * signature expiration: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * time signed: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * key footprint: 2
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews RETERR(dns_name_fromwire(&name, source, dctx, options, target));
542deb20c44666a870855bf755a100d254db074dAndreas Gustafsson return (mem_tobuffer(target, sr.base, sr.length));
94a08e09db3dc844b6ee4841c368a2d7074a9c3fAndreas Gustafsson dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * type covered: 2
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * algorithm: 1
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * original ttl: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * signature expiration: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * time signed: 4
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews * key footprint: 2
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews return (mem_tobuffer(target, sr.base, sr.length));
4529cdaedaf1a0a5f8ff89aeca510b7a4475446cBob Halleystatic inline int
b0ba1a6059b6d6c4b3aa77d8bc84cc443b981e01Mukund Sivaraman REQUIRE(rdata1->type == dns_rdatatype_sig);
e6c22f37d8df55a9f66b479a22717e179bcf79a3Andreas Gustafsson order = dns_name_rdatacompare(&name1, &name2);
85bdc128fcda11c89ec1d76ea4221f4fa8e4fc24Mark Andrews REQUIRE(sig->signature != NULL || sig->siglen == 0);
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Type covered.
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint16_tobuffer(sig->covered, target));
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint8_tobuffer(sig->algorithm, target));
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint8_tobuffer(sig->labels, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Original TTL.
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint32_tobuffer(sig->originalttl, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Expire time.
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint32_tobuffer(sig->timeexpire, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Time signed.
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint32_tobuffer(sig->timesigned, target));
d8813e2ceee2f4adaf697931c2491de265ce5eb9Brian Wellington RETERR(uint16_tobuffer(sig->keyid, target));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Signer name.
5466ce3f279d9fa83ce826bcdc9482bc591152aeAndreas Gustafsson RETERR(name_tobuffer(&sig->signer, target));
373ce67419680a398ba3dc51a14a486caaf0afb0Mark Andrews return (mem_tobuffer(target, sig->signature, sig->siglen));
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Type covered.
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Original TTL.
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Expire time.
34b394b43e2207e8f8f3703f0402422121455638David Lawrence * Time signed.
1bb227b988b8170cbb1a2fcf43b19a3ec57423adMark Andrews RETERR(name_duporclone(&signer, mctx, &sig->signer));
cf3f14106d082e4676431c10c54b60b9a0e9b127Brian Wellington isc_region_consume(&sr, name_length(&sig->signer));
85bdc128fcda11c89ec1d76ea4221f4fa8e4fc24Mark Andrews sig->signature = mem_maybedup(mctx, sr.base, sig->siglen);
4529cdaedaf1a0a5f8ff89aeca510b7a4475446cBob Halleystatic inline void
b8dd48ecf83142f6ee7238cbd68fec455e527fc8Mark Andrews dns_rdata_sig_t *sig = (dns_rdata_sig_t *) source;
b0ba1a6059b6d6c4b3aa77d8bc84cc443b981e01Mukund Sivaraman REQUIRE(sig->common.rdtype == dns_rdatatype_sig);
3d17a3ba61a303d5c4d9867068d0fbe9f24d2988Mark Andrewsstatic inline int
854d0238dbc2908490197984b3b9d558008a53dfMark Andrews#endif /* RDATA_GENERIC_SIG_24_C */