(provider_kp: &SignKeyPair, resolver_kp: &CryptKeyPair, ts_start: u32)
| 187 | |
| 188 | impl DNSCryptCert { |
| 189 | pub fn new(provider_kp: &SignKeyPair, resolver_kp: &CryptKeyPair, ts_start: u32) -> Self { |
| 190 | let ts_end = ts_start.saturating_add(DNSCRYPT_CERTS_TTL); |
| 191 | |
| 192 | let mut dnscrypt_cert = DNSCryptCert::default(); |
| 193 | |
| 194 | let dnscrypt_cert_inner = &mut dnscrypt_cert.inner; |
| 195 | dnscrypt_cert_inner |
| 196 | .resolver_pk |
| 197 | .copy_from_slice(resolver_kp.pk.as_bytes()); |
| 198 | dnscrypt_cert_inner |
| 199 | .client_magic |
| 200 | .copy_from_slice(&dnscrypt_cert_inner.resolver_pk[..8]); |
| 201 | BigEndian::write_u32(&mut dnscrypt_cert_inner.serial, 1); |
| 202 | BigEndian::write_u32(&mut dnscrypt_cert_inner.ts_start, ts_start); |
| 203 | BigEndian::write_u32(&mut dnscrypt_cert_inner.ts_end, ts_end); |
| 204 | |
| 205 | BigEndian::write_u32(&mut dnscrypt_cert.cert_magic, 0x44_4e_53_43); |
| 206 | BigEndian::write_u16(&mut dnscrypt_cert.es_version, 2); |
| 207 | BigEndian::write_u16(&mut dnscrypt_cert.minor_version, 0); |
| 208 | |
| 209 | dnscrypt_cert.signature.copy_from_slice( |
| 210 | provider_kp |
| 211 | .sk |
| 212 | .sign(dnscrypt_cert_inner.as_bytes()) |
| 213 | .as_bytes(), |
| 214 | ); |
| 215 | dnscrypt_cert |
| 216 | } |
| 217 | |
| 218 | pub fn as_bytes(&self) -> &[u8] { |
| 219 | unsafe { slice::from_raw_parts(self as *const _ as *const u8, mem::size_of_val(self)) } |
nothing calls this directly
no test coverage detected