proxygen
fizz::extensions::TokenBindingClientExtension Class Reference

#include <TokenBindingClientExtension.h>

Inheritance diagram for fizz::extensions::TokenBindingClientExtension:
fizz::ClientExtensions

Public Member Functions

 TokenBindingClientExtension (const std::shared_ptr< TokenBindingContext > &context)
 
std::vector< ExtensiongetClientHelloExtensions () const override
 
void onEncryptedExtensions (const std::vector< Extension > &extensions) override
 
const auto & getVersion ()
 
const auto & getNegotiatedKeyParam ()
 
- Public Member Functions inherited from fizz::ClientExtensions
virtual ~ClientExtensions ()=default
 

Private Attributes

folly::Optional< TokenBindingProtocolVersionnegotiatedVersion_
 
folly::Optional< TokenBindingKeyParametersnegotiatedKeyParam_
 
std::shared_ptr< TokenBindingContextcontext_
 

Detailed Description

Definition at line 19 of file TokenBindingClientExtension.h.

Constructor & Destructor Documentation

fizz::extensions::TokenBindingClientExtension::TokenBindingClientExtension ( const std::shared_ptr< TokenBindingContext > &  context)
inlineexplicit

Definition at line 21 of file TokenBindingClientExtension.h.

References getClientHelloExtensions(), and onEncryptedExtensions().

23  : context_(context) {}
context
Definition: CMakeCache.txt:563
std::shared_ptr< TokenBindingContext > context_

Member Function Documentation

std::vector< Extension > fizz::extensions::TokenBindingClientExtension::getClientHelloExtensions ( ) const
overridevirtual

Returns a list of extensions to be added to the ClientHello. Note that this can be called multiple times on a single connection (if a HelloRetryRequest is received).

Implements fizz::ClientExtensions.

Definition at line 14 of file TokenBindingClientExtension.cpp.

References context_, fizz::encodeExtension(), fizz::extensions::TokenBindingParameters::key_parameters_list, and fizz::extensions::TokenBindingParameters::version.

Referenced by TokenBindingClientExtension().

15  {
16  std::vector<Extension> clientExtensions;
17  if (context_->getSupportedVersions().empty() ||
18  context_->getKeyParams().empty()) {
19  return clientExtensions;
20  }
21  TokenBindingParameters clientParams;
22  clientParams.version = context_->getSupportedVersions().front();
23  clientParams.key_parameters_list = context_->getKeyParams();
24  clientExtensions.push_back(encodeExtension(clientParams));
25  return clientExtensions;
26 }
std::shared_ptr< TokenBindingContext > context_
Extension encodeExtension(const TokenBindingParameters &params)
Definition: Types.cpp:113
const auto& fizz::extensions::TokenBindingClientExtension::getNegotiatedKeyParam ( )
inline

Definition at line 33 of file TokenBindingClientExtension.h.

References negotiatedKeyParam_.

33  {
34  return negotiatedKeyParam_;
35  }
folly::Optional< TokenBindingKeyParameters > negotiatedKeyParam_
const auto& fizz::extensions::TokenBindingClientExtension::getVersion ( )
inline

Definition at line 29 of file TokenBindingClientExtension.h.

References negotiatedVersion_.

29  {
30  return negotiatedVersion_;
31  }
folly::Optional< TokenBindingProtocolVersion > negotiatedVersion_
void fizz::extensions::TokenBindingClientExtension::onEncryptedExtensions ( const std::vector< Extension > &  extensions)
overridevirtual

Called with the extensions present in EncryptedExtensions.

Implements fizz::ClientExtensions.

Definition at line 28 of file TokenBindingClientExtension.cpp.

References context_, negotiatedKeyParam_, negotiatedVersion_, fizz::unsupported_extension, and version.

Referenced by TokenBindingClientExtension().

29  {
30  auto serverParams = getExtension<TokenBindingParameters>(extensions);
31  if (!serverParams.hasValue()) {
32  VLOG(6) << "Server did not negotiate token binding";
33  return;
34  }
35  if (serverParams->key_parameters_list.size() != 1) {
36  throw FizzException(
37  "Incorrect number of key_parameters sent by server",
39  }
40  if (serverParams->version > context_->getSupportedVersions().front()) {
41  throw FizzException(
42  "Server sent higher tokbind version",
44  }
45 
46  auto keyParam = std::find(
47  context_->getKeyParams().begin(),
48  context_->getKeyParams().end(),
49  serverParams->key_parameters_list.front());
50  if (keyParam == context_->getKeyParams().end()) {
51  throw FizzException(
52  "Unsupported key parameter sent by server",
54  }
55 
56  auto version = std::find(
57  context_->getSupportedVersions().begin(),
58  context_->getSupportedVersions().end(),
59  serverParams->version);
60  if (version == context_->getSupportedVersions().end()) {
61  VLOG(6) << "Server sent lower, unsupported, token binding version";
62  return;
63  }
65  negotiatedKeyParam_ = *keyParam;
66 }
ProtocolVersion version
folly::Optional< TokenBindingKeyParameters > negotiatedKeyParam_
folly::Optional< TokenBindingProtocolVersion > negotiatedVersion_
std::shared_ptr< TokenBindingContext > context_

Member Data Documentation

std::shared_ptr<TokenBindingContext> fizz::extensions::TokenBindingClientExtension::context_
private
folly::Optional<TokenBindingKeyParameters> fizz::extensions::TokenBindingClientExtension::negotiatedKeyParam_
private

Definition at line 39 of file TokenBindingClientExtension.h.

Referenced by getNegotiatedKeyParam(), and onEncryptedExtensions().

folly::Optional<TokenBindingProtocolVersion> fizz::extensions::TokenBindingClientExtension::negotiatedVersion_
private

Definition at line 38 of file TokenBindingClientExtension.h.

Referenced by getVersion(), and onEncryptedExtensions().


The documentation for this class was generated from the following files: