• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_BASE_DNSSEC_KEYSET_H_
6 #define NET_BASE_DNSSEC_KEYSET_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/string_piece.h"
12 
13 namespace net {
14 
15 // DNSSECKeySet function wraps crypto/signature_verifier.h to accept
16 // DNSSEC encodings. (See RFC 4043)
17 class DNSSECKeySet {
18  public:
19   DNSSECKeySet();
20   ~DNSSECKeySet();
21 
22   // AddKey adds a key to the trusted set.
23   //   dnskey: the RRDATA of a DNSKEY.
24   bool AddKey(const base::StringPiece& dnskey);
25 
26   // CheckSignature checks the DNSSEC signature on set of resource records.
27   //   name: the domain that the records are from
28   //   zone: the signing zone
29   //   signature: the RRSIG signature, not include the signing zone.
30   //   rrtype: the type of the resource records
31   //   rrdatas: the RRDATA of the signed resource records, in canonical order.
32   bool CheckSignature(const base::StringPiece& name,
33                       const base::StringPiece& zone,
34                       const base::StringPiece& signature,
35                       uint16 rrtype,
36                       const std::vector<base::StringPiece>& rrdatas);
37 
38   // DNSKEYToKeyID converts the RRDATA of a DNSKEY to its key id. See RFC 4043,
39   // app B.
40   static uint16 DNSKEYToKeyID(const base::StringPiece& dnskey);
41 
42   // Used for testing: the timestamps on signatures will be ignored to allow
43   // golden data to remain valid.
44   void IgnoreTimestamps();
45 
46  private:
47   bool VerifySignature(
48       base::StringPiece signature_algorithm,
49       base::StringPiece signature,
50       base::StringPiece public_key,
51       base::StringPiece signed_data);
52 
53   std::string ASN1WrapDNSKEY(const base::StringPiece& dnskey);
54 
55   bool ignore_timestamps_;
56   std::vector<uint16> keyids_;
57   std::vector<std::string> public_keys_;
58 };
59 
60 }  // namespace net
61 
62 #endif  // NET_BASE_DNSSEC_KEYSET_H_
63