Home | History | Annotate | Download | only in base
      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