// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_DNSSEC_KEYSET_H_ #define NET_BASE_DNSSEC_KEYSET_H_ #include <string> #include <vector> #include "base/string_piece.h" namespace net { // DNSSECKeySet function wraps crypto/signature_verifier.h to accept // DNSSEC encodings. (See RFC 4043) class DNSSECKeySet { public: DNSSECKeySet(); ~DNSSECKeySet(); // AddKey adds a key to the trusted set. // dnskey: the RRDATA of a DNSKEY. bool AddKey(const base::StringPiece& dnskey); // CheckSignature checks the DNSSEC signature on set of resource records. // name: the domain that the records are from // zone: the signing zone // signature: the RRSIG signature, not include the signing zone. // rrtype: the type of the resource records // rrdatas: the RRDATA of the signed resource records, in canonical order. bool CheckSignature(const base::StringPiece& name, const base::StringPiece& zone, const base::StringPiece& signature, uint16 rrtype, const std::vector<base::StringPiece>& rrdatas); // DNSKEYToKeyID converts the RRDATA of a DNSKEY to its key id. See RFC 4043, // app B. static uint16 DNSKEYToKeyID(const base::StringPiece& dnskey); // Used for testing: the timestamps on signatures will be ignored to allow // golden data to remain valid. void IgnoreTimestamps(); private: bool VerifySignature( base::StringPiece signature_algorithm, base::StringPiece signature, base::StringPiece public_key, base::StringPiece signed_data); std::string ASN1WrapDNSKEY(const base::StringPiece& dnskey); bool ignore_timestamps_; std::vector<uint16> keyids_; std::vector<std::string> public_keys_; }; } // namespace net #endif // NET_BASE_DNSSEC_KEYSET_H_