Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(646)

Unified Diff: net/ssl/token_binding.h

Issue 1378613004: Set Token-Binding HTTP header (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tb-tls-ext-new
Patch Set: Add UMA logging of Token Binding support and NetLog event for Token Binding key lookup Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/ssl/token_binding.h
diff --git a/net/ssl/token_binding.h b/net/ssl/token_binding.h
new file mode 100644
index 0000000000000000000000000000000000000000..5eb726ca58b4ba1537a592033acf9e3abca83281
--- /dev/null
+++ b/net/ssl/token_binding.h
@@ -0,0 +1,90 @@
+// Copyright 2015 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_SSL_TOKEN_BINDING_H_
+#define NET_SSL_TOKEN_BINDING_H_
+
+#include <string>
+#include <vector>
+
+#include "crypto/ec_private_key.h"
+
+namespace net {
+
+// Given a vector of serialized TokenBinding structs (as defined in
+// draft-ietf-tokbind-protocol-02), this function combines them to form the
+// serialized TokenBindingMessage struct in |*out|. This function returns a net
+// error.
davidben 2015/11/18 20:49:00 You can return a net::Error to make that clearer s
nharper 2015/12/04 01:42:20 Done.
+//
+// struct {
+// TokenBinding tokenbindings<0..2^16-1>;
+// } TokenBindingMessage;
+int BuildTokenBindingMessageFromTokenBindings(
+ const std::vector<std::string>& token_bindings,
+ std::string* out);
+
+// Builds a TokenBinding struct with a provided TokenBindingID created from
+// |*key| and a signature of |ekm| using |*key| to sign.
+//
+// enum {
+// rsa2048_pkcs1.5(0), rsa2048_pss(1), ecdsap256(2), (255)
+// } TokenBindingKeyParameters;
+//
+// struct {
+// opaque modulus<1..2^16-1>;
+// opaque publicexponent<1..2^8-1>;
+// } RSAPublicKey;
+//
+// struct {
+// opaque point <1..2^8-1>;
+// } ECPoint;
+//
+// enum {
+// provided_token_binding(0), referred_token_binding(1), (255)
davidben 2015/11/18 20:49:01 This is somewhat less related, but what exactly is
nharper 2015/12/04 01:42:20 The type (provided vs referred) is for the federat
+// } TokenBindingType;
+//
+// struct {
+// TokenBindingType tokenbinding_type;
+// TokenBindingKeyParameters key_parameters;
+// select (key_parameters) {
+// case rsa2048_pkcs1.5:
+// case rsa2048_pss:
+// RSAPublicKey rsapubkey;
+// case ecdsap256:
+// ECPoint point;
+// }
+// } TokenBindingID;
+//
+// struct {
+// TokenBindingID tokenbindingid;
+// opaque signature<0..2^16-1>;// Signature over the exported keying
+// // material value
+// Extension extensions<0..2^16-1>;
+// } TokenBinding;
+int BuildProvidedTokenBinding(crypto::ECPrivateKey* key,
+ const std::vector<uint8_t>& ekm,
+ std::string* out);
+
+// Given a TokenBindingMessage, parses the first TokenBinding from it,
+// extracts the ECPoint of the TokenBindingID into |*ec_point|, and extracts the
+// signature of the EKM value into |*signature|. It also verifies that the first
+// TokenBinding is a provided Token Binding, and that the key parameters is
+// ecdsap256. This function returns whether the message was able to be parsed
+// successfully.
+bool ParseTokenBindingMessage(const std::string& token_binding_message,
davidben 2015/11/18 20:49:01 This doesn't appear to have any callers.
nharper 2015/12/04 01:42:20 This is called in url_request_unittest.cc
+ std::string* ec_point,
+ std::string* signature);
davidben 2015/11/18 20:49:01 StringPiece to avoid all the copies? This function
nharper 2015/12/04 01:42:20 Done.
+
+// Takes an ECPoint |ec_point| from a TokenBindingID and |signature| from a
+// TokenBinding and verifies that |signature| is the signature of |ekm| using
+// |ec_point| as the public key. Returns true if the signature verifies and
+// false if it doesn't or some other error occurs in verification. This function
+// is only provided for testing.
+bool VerifyEKMSignature(const std::string& ec_point,
davidben 2015/11/18 20:49:01 This doesn't appear to have any callers.
nharper 2015/12/04 01:42:20 This is called in url_request_unittest.cc
+ const std::string& signature,
+ const std::string& ekm);
+
+} // namespace net
+
+#endif // NET_SSL_TOKEN_BINDING_H_

Powered by Google App Engine
This is Rietveld 408576698