dns_message_parser/encode/rr/
rfc_4034.rs

1use crate::encode::Encoder;
2use crate::rr::{AlgorithmType, DigestType, Type, DNSKEY, DS};
3use crate::EncodeResult;
4
5impl Encoder {
6    fn rr_algorithm_type(&mut self, algorithm_type: AlgorithmType) {
7        self.u8(algorithm_type as u8);
8    }
9
10    fn rr_digest_type(&mut self, digest_type: DigestType) {
11        self.u8(digest_type as u8);
12    }
13
14    pub(super) fn rr_dnskey(&mut self, dnskey: &DNSKEY) -> EncodeResult<()> {
15        self.domain_name(&dnskey.domain_name)?;
16        self.rr_type(&Type::DNSKEY);
17        self.rr_class(&dnskey.class);
18        self.u32(dnskey.ttl);
19        let length_index = self.create_length_index();
20        self.u16(dnskey.get_flags());
21        self.u8(3);
22        self.rr_algorithm_type(dnskey.algorithm_type);
23        self.vec(&dnskey.public_key);
24        self.set_length_index(length_index)
25    }
26
27    pub(super) fn rr_ds(&mut self, ds: &DS) -> EncodeResult<()> {
28        self.domain_name(&ds.domain_name)?;
29        self.rr_type(&Type::DS);
30        self.rr_class(&ds.class);
31        self.u32(ds.ttl);
32        let length_index = self.create_length_index();
33        self.u16(ds.key_tag);
34        self.rr_algorithm_type(ds.algorithm_type);
35        self.rr_digest_type(ds.digest_type);
36        self.vec(&ds.digest);
37        self.set_length_index(length_index)
38    }
39}