Index: extensions/browser/api/cast_channel/cast_auth_util.h |
diff --git a/extensions/browser/api/cast_channel/cast_auth_util.h b/extensions/browser/api/cast_channel/cast_auth_util.h |
index 560f698d2b57430d7071dcae8d5b218426a094d9..7a045ddd5f450e32a2c120067e94848ecc3f134a 100644 |
--- a/extensions/browser/api/cast_channel/cast_auth_util.h |
+++ b/extensions/browser/api/cast_channel/cast_auth_util.h |
@@ -5,8 +5,13 @@ |
#ifndef EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_AUTH_UTIL_H_ |
#define EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_AUTH_UTIL_H_ |
+#include <map> |
#include <string> |
+#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string_piece.h" |
+#include "net/base/hash_value.h" |
+ |
namespace extensions { |
namespace core_api { |
namespace cast_channel { |
@@ -52,12 +57,59 @@ struct AuthResult { |
int nss_error_code); |
}; |
+typedef std::map<net::SHA256HashValue, |
+ base::StringPiece, |
+ net::SHA256HashValueLessThan> AuthorityKeysMap; |
+ |
+namespace proto { |
+ |
+// Forward declaration to avoid including generated protobuf header. |
+class AuthorityKeys; |
+ |
+} // namespace proto |
Ryan Sleevi
2014/10/22 22:07:10
Realized this isn't right anymore.
This should mo
vadimgo
2014/10/23 18:03:25
This is right, because the protobuf is also namesp
|
+ |
+// AuthorityKeysStore is a helper class that is used to store and manipulate |
+// intermediate CAs (ICAs) information used to authenticate cast devices. |
+// A static list of ICAs is hardcoded and may optionally be replaced during |
+// runtime by an extension supplying a protobuf of ICAs information signed with |
+// known key. |
+class AuthorityKeysStore { |
Ryan Sleevi
2014/10/22 22:07:10
naming wise, does this make sense singular? Author
vadimgo
2014/10/23 18:03:25
Done.
|
+ public: |
+ AuthorityKeysStore(); |
+ ~AuthorityKeysStore(); |
+ |
+ // Returns the public key of the ICA whose fingerprint matches |fingerprint|. |
+ // Returns an empty StringPiece if no such ICA is found. |
+ base::StringPiece GetICAPublicKeyFromFingerprint( |
+ const net::SHA256HashValue& fingerprint); |
+ |
+ // Returns the public key of the default / original cast ICA. |
+ // Returns an empty StringPiece if the default cast ICA is not found. |
+ base::StringPiece GetDefaultICAPublicKey(); |
+ |
+ // Loads authority keys from a serialized protobuf. |
Ryan Sleevi
2014/10/22 22:07:10
Documentation: This invalidates all previously ret
vadimgo
2014/10/23 18:03:25
Done.
Ryan Sleevi
2014/10/24 19:42:14
Not really. It doesn't document the 'surprising' p
|
+ bool Load(const std::string& keys); |
+ |
+ private: |
+ // The map of trusted certificate authorities - fingerprints to public keys. |
+ AuthorityKeysMap certificate_authorities_; |
+ |
+ // Trusted certificate authorities data passed from the extension. |
+ scoped_ptr<proto::AuthorityKeys> authority_keys_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AuthorityKeysStore); |
+}; |
+ |
// Authenticates the given |challenge_reply|: |
// 1. Signature contained in the reply is valid. |
// 2. Certficate used to sign is rooted to a trusted CA. |
AuthResult AuthenticateChallengeReply(const CastMessage& challenge_reply, |
const std::string& peer_cert); |
+// Sets trusted certificate authorities. |
+bool SetTrustedCertificateAuthorities(const std::string& keys, |
+ const std::string& signature); |
+ |
} // namespace cast_channel |
} // namespace core_api |
} // namespace extensions |