proxygen
Types.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
10 #include <fizz/record/Types.h>
11 
12 #include <folly/String.h>
13 #include <folly/io/Cursor.h>
14 
15 using namespace fizz::extensions;
16 
17 namespace fizz {
18 namespace detail {
19 
20 template <>
22  auto len = read(id.key_parameters, cursor);
23  len += readBuf<uint16_t>(id.key, cursor);
24  return len;
25 }
26 
27 template <>
29  write(id.key_parameters, out);
30  writeBuf<uint16_t>(id.key, out);
31 }
32 
33 template <>
35  return sizeof(TokenBindingKeyParameters) + getBufSize<uint16_t>(id.key);
36 }
37 
38 template <>
41  folly::io::Cursor& cursor) {
42  auto len = read(tokenBinding.tokenbinding_type, cursor);
43  len += read(tokenBinding.tokenbindingid, cursor);
44  len += readBuf<uint16_t>(tokenBinding.signature, cursor);
45  len += readBuf<uint16_t>(tokenBinding.extensions, cursor);
46  return len;
47 }
48 
49 template <>
52  folly::io::Appender& out) {
53  write(tokenBinding.tokenbinding_type, out);
54  write(tokenBinding.tokenbindingid, out);
55  writeBuf<uint16_t>(tokenBinding.signature, out);
56  writeBuf<uint16_t>(tokenBinding.extensions, out);
57 }
58 
59 template <>
61  return sizeof(TokenBindingType) + getSize(tokenBinding.tokenbindingid) +
62  getBufSize<uint16_t>(tokenBinding.signature) +
63  getBufSize<uint16_t>(tokenBinding.extensions);
64 }
65 } // namespace detail
66 
68  switch (version) {
70  return "Token Binding v1-draft-10";
72  return "Token Binding v1-draft-11";
74  return "Token Binding v1-draft-12";
76  return "Token Binding v1-draft-13";
78  return "Token Binding v1-draft-14";
80  return "Token Binding v1-draft-15";
81  }
82 
83  return enumToHex(version);
84 }
85 
87  switch (keyParams) {
89  return "RSA2048 pkcs";
91  return "RSA2048 pss";
93  return "ECDSA p256";
94  }
95  return enumToHex(keyParams);
96 }
97 
98 template <>
100  const std::vector<Extension>& extensions) {
101  auto it = findExtension(extensions, ExtensionType::token_binding);
102  if (it == extensions.end()) {
103  return folly::none;
104  }
106  folly::io::Cursor cursor(it->extension_data.get());
107  detail::read(params.version, cursor);
108  detail::readVector<uint8_t>(params.key_parameters_list, cursor);
109  return std::move(params);
110 }
111 
112 template <>
114  Extension ext;
117  folly::io::Appender appender(ext.extension_data.get(), 10);
118  detail::write(params.version, appender);
119  detail::writeVector<uint8_t>(params.key_parameters_list, appender);
120  return ext;
121 }
122 
123 template <>
125  auto buf = folly::IOBuf::create(20);
126  folly::io::Appender appender(buf.get(), 20);
127  detail::writeVector<uint16_t>(message.tokenbindings, appender);
128  return buf;
129 }
130 
131 template <>
134  detail::readVector<uint16_t>(message.tokenbindings, cursor);
135  return message;
136 }
137 } // namespace fizz
Definition: test.c:42
std::vector< Extension >::const_iterator findExtension(const std::vector< Extension > &extensions, ExtensionType type)
void write< TokenBindingID >(const TokenBindingID &id, folly::io::Appender &out)
Definition: Types.cpp:28
void write(const T &in, folly::io::Appender &appender)
Definition: Types-inl.h:112
static std::unique_ptr< IOBuf > create(std::size_t capacity)
Definition: IOBuf.cpp:229
void write< TokenBinding >(const TokenBinding &tokenBinding, folly::io::Appender &out)
Definition: Types.cpp:50
TokenBindingMessage decode(folly::io::Cursor &cursor)
Definition: Types.cpp:132
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
std::string enumToHex(T enumValue)
Definition: Types-inl.h:646
Buf extension_data
Definition: Types.h:175
TokenBindingKeyParameters
Definition: Types.h:33
folly::Optional< TokenBindingParameters > getExtension(const std::vector< Extension > &extensions)
Definition: Types.cpp:99
size_t getSize< TokenBindingID >(const TokenBindingID &id)
Definition: Types.cpp:34
ProtocolVersion version
std::vector< TokenBinding > tokenbindings
Definition: Types.h:66
TokenBindingProtocolVersion version
Definition: Types.h:42
constexpr Params params[]
size_t read(T &out, folly::io::Cursor &cursor)
Definition: Types-inl.h:258
size_t getSize(const T &t)
Definition: Types-inl.h:43
Definition: Actions.h:16
size_t getSize< TokenBinding >(const TokenBinding &tokenBinding)
Definition: Types.cpp:60
std::string message
Definition: SPDYCodec.cpp:133
StringPiece tokenBinding
size_t read< TokenBindingID >(TokenBindingID &id, folly::io::Cursor &cursor)
Definition: Types.cpp:21
std::string toString(TokenBindingProtocolVersion)
Definition: Types.cpp:67
Buf encode(TokenBindingMessage &&message)
Definition: Types.cpp:124
std::vector< TokenBindingKeyParameters > key_parameters_list
Definition: Types.h:43
const char * string
Definition: Conv.cpp:212
ExtensionType extension_type
Definition: Types.h:174
std::unique_ptr< folly::IOBuf > Buf
Definition: Types.h:22
TokenBindingProtocolVersion
Definition: Types.h:22
Extension encodeExtension(const TokenBindingParameters &params)
Definition: Types.cpp:113
size_t read< TokenBinding >(TokenBinding &tokenBinding, folly::io::Cursor &cursor)
Definition: Types.cpp:39
constexpr None none
Definition: Optional.h:87