X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcertificate_chain.h;h=c74bc6e24b45967b9c0458c8ba5f8e72cfc9366c;hb=8d56ea4bbff391dd72981f86001245a595fa9c62;hp=3a925373365509fbdb59030fa8d90b9a6bde8d58;hpb=d927e9b913606f4fc982885c7582ecaf0e3c5a1a;p=libdcp.git diff --git a/src/certificate_chain.h b/src/certificate_chain.h index 3a925373..c74bc6e2 100644 --- a/src/certificate_chain.h +++ b/src/certificate_chain.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2015 Carl Hetherington + Copyright (C) 2013-2016 Carl Hetherington This file is part of libdcp. @@ -47,6 +47,15 @@ namespace xmlpp { class Node; } +struct certificates_validation1; +struct certificates_validation2; +struct certificates_validation3; +struct certificates_validation4; +struct certificates_validation5; +struct certificates_validation6; +struct certificates_validation7; +struct certificates_validation8; + namespace dcp { /** @class CertificateChain @@ -74,6 +83,8 @@ public: std::string leaf_common_name = "CS.smpte-430-2.LEAF.NOT_FOR_PRODUCTION" ); + explicit CertificateChain (std::string); + void add (Certificate c); void remove (Certificate c); void remove (int); @@ -81,16 +92,18 @@ public: Certificate root () const; Certificate leaf () const; - typedef std::list List; + typedef std::vector List; List leaf_to_root () const; List root_to_leaf () const; + List unordered () const; - bool valid () const; - bool attempt_reorder (); + bool valid (std::string* reason = 0) const; + bool chain_valid () const; + bool private_key_valid () const; void sign (xmlpp::Element* parent, Standard standard) const; - void add_signature_value (xmlpp::Node* parent, std::string ns) const; + void add_signature_value (xmlpp::Element* parent, std::string ns, bool add_indentation) const; boost::optional key () const { return _key; @@ -100,9 +113,21 @@ public: _key = k; } -private: - friend class ::certificates; + std::string chain () const; +private: + friend struct ::certificates_validation1; + friend struct ::certificates_validation2; + friend struct ::certificates_validation3; + friend struct ::certificates_validation4; + friend struct ::certificates_validation5; + friend struct ::certificates_validation6; + friend struct ::certificates_validation7; + friend struct ::certificates_validation8; + + bool chain_valid (List const & chain) const; + + /** Our certificates, not in any particular order */ List _certificates; /** Leaf certificate's private key, if known */ boost::optional _key;