1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-25 15:43:13 +03:00
Commit Graph

38 Commits

Author SHA1 Message Date
Hani Damlaj
00e67c1bf9 mvfst License Header Update
Reviewed By: lnicco

Differential Revision: D33587012

fbshipit-source-id: 972eb440f0156c9c04aa6e8787561b18295c1a97
2022-01-18 13:56:12 -08:00
Hani Damlaj
2660a288b3 Update Company Name
Summary: - as title

Reviewed By: lnicco

Differential Revision: D33513410

fbshipit-source-id: 282b6f512cf83b9abb7990402661135b658f7bd1
2022-01-13 12:07:48 -08:00
Alex Guzman
306843bfec Allow opting into in-place decryption
Summary: As it says on tin. Allows for callers to opt in to in-place decryption always.

Reviewed By: mingtaoy

Differential Revision: D28270936

fbshipit-source-id: 389d9f9f4f7283af33c8eee5125f74bf7c034cd7
2021-06-08 16:57:00 -07:00
Alex Guzman
80b5588224 Add support for indicating AEAD options from higher levels
Summary: Adds piping from AsyncFizzClient/Server down to the AEAD to support indicating what the desired behavior is. Doesn't modify the current behavior.

Reviewed By: knekritz

Differential Revision: D28037478

fbshipit-source-id: ac2d3d24828ced6ec435cd060c2d28a5700bf6bf
2021-05-05 13:00:29 -07:00
Joseph Chen
b761b894da Back out "Add support for indicating AEAD options from higher levels"
Summary:
Original commit changeset: a77b4ddb8bd5

- The diff broke AdFinder by causing 10x critical exceptions to be thrown
- We also suspect this diff causes data corruption that leads to adid = 0 issue that has further impact in the system(to be verified in canary)

Reviewed By: wylqc

Differential Revision: D27898082

fbshipit-source-id: 4d4a2458b218714abe810b7f3e3ef1bfe62675a0
2021-04-21 16:23:05 -07:00
Alex Guzman
d07a8ff327 Add support for indicating AEAD options from higher levels
Summary: Adds piping from AsyncFizzClient/Server down to the AEAD to support indicating what the desired behavior is

Reviewed By: mingtaoy

Differential Revision: D27274332

fbshipit-source-id: a77b4ddb8bd52c8fb2bd38c89d3e489d07c7781a
2021-04-19 19:47:53 -07:00
Matt Joras
382c1cdcc6 Remove partial reliability from mvfst.
Summary: As in title.

Reviewed By: yangchi

Differential Revision: D26701886

fbshipit-source-id: c7b36c616200b17fbf697eff4ba0d18695effb45
2021-03-03 15:30:21 -08:00
Bonnie Xu
d0740f57c0 Fizz client config changes for ECH config
Summary:
Add ech config to connect API calls so it can be used in the client (see D24896065 for usage).
This involves updating some call sites where connect is being used.

Reviewed By: reanimus

Differential Revision: D24865702

fbshipit-source-id: bb050fdfbc8ad0f6b290f3daa0d04cbbd5b9c4b3
2020-11-30 10:45:37 -08:00
Amaury Séchet
155847f6f1 Move FailingAppTokenValidator to FizzServerHandshake.cpp (#175)
Summary:
Also move encoding/decoding of the AppToken to be transmitted via fizz in its own file.

Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/175

Reviewed By: yangchi

Differential Revision: D23681956

Pulled By: mjoras

fbshipit-source-id: dc98d0b4ba2bee4a05ae8832d36ff4a116cfbd0d
2020-09-24 11:54:34 -07:00
Amaury Séchet
71c88def3d Assing hanshake cipher directly in the conn object (#174)
Summary:
This reduce the amount of state overall.

Depends on https://github.com/facebookincubator/mvfst/issues/173

Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/174

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

 ---
## Traffic Canary
https://our.intern.facebook.com/intern/traffic/canary?fbid=1410439575823198
* elb.prod.msp1c01 - binary - 2020-09-21 11:33 - https://fburl.com/dyndash/uq2r8ruc
* slb.prod_regional.rrva0c00 - binary - 2020-09-21 11:33 - https://fburl.com/dyndash/aq7vnb1e
* slb.regional.rcln0c01 - binary - 2020-09-21 11:33 - https://fburl.com/dyndash/t2oc8ll3
 ---

Reviewed By: yangchi

Differential Revision: D23681965

Pulled By: mjoras

fbshipit-source-id: 15cad0dd807720f3f6d000aade9368fe4608b832
2020-09-24 10:31:13 -07:00
Amaury Séchet
fc5ccd14b2 Remove ServerHandshake::getContext (#167)
Summary:
We can remove the reference to the context in the handshake and use `state_.context()` instead.

Depends on https://github.com/facebookincubator/mvfst/issues/165

Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/167

Reviewed By: yangchi

Differential Revision: D23658708

Pulled By: xttjsn

fbshipit-source-id: 8cc42ea7677317b2bba562ba88d00a71a830bde0
2020-09-14 22:13:19 -07:00
Amaury Séchet
a92dfc18eb Pass FizzServerContext using FizzServerQuicHandshakeContext (#165)
Summary:
This remove one more fizz specific element from the common API

Depends on https://github.com/facebookincubator/mvfst/issues/162

Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/165

Reviewed By: yangchi

Differential Revision: D23637314

Pulled By: xttjsn

fbshipit-source-id: a3436510accc37687f6e3ea770fd120fa314ecdc
2020-09-14 13:08:46 -07:00
Amaury Séchet
04c63839e4 Start splitting the fizz specific parts of the server (#160)
Summary:
This is following a similar pattern than what was done for the client side.

Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/160

Reviewed By: yangchi

Differential Revision: D23560951

Pulled By: xttjsn

fbshipit-source-id: 351417cbfa3230112fff4c4de59b307f88389cf6
2020-09-08 17:17:47 -07:00
Matt Joras
42bba01005 Draft-29 support.
Summary:
This implements the connection ID validation via transport parameters. Note we don't do anything with the retry transport parameter yet.

This will probably require further surgery to tests when we want the MVFST version to do this, but for now I'm punting on that test plumbing.

This retains support for h3-27.

Reviewed By: yangchi

Differential Revision: D22045631

fbshipit-source-id: e93841e734c0683655c751d808fd90b3b391eb3e
2020-06-16 17:05:41 -07:00
Kyle Nekritz
3af87c825e Support synchronous handshake writes in ServerHandshakeTest.
Summary:
Previously we would only write the data to the client after an asynchronous
event.

Reviewed By: mjoras

Differential Revision: D22020222

fbshipit-source-id: cecd8196d692a0b9f0a60ab7849707bcbb0e1a20
2020-06-12 15:29:05 -07:00
Amaury Séchet
fb0b6b1cc4 Move fizz specific part of the client in quic/fizz/client (#120)
Summary:
This create a separate library for the fizz client. This allows complete separation of the fizz part of the client, and make it swapable for something else.

Depends on https://github.com/facebookincubator/mvfst/issues/118
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/120

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

 ---
## Proxygen Canary
Traffic Canary: https://our.intern.facebook.com/intern/traffic/canary?fbid=528194164778784
* elb.prod.muc2c01 - binary - 2020-04-05 14:59 - https://fburl.com/dyndash/ywntlz9n
* flb.prod.fceb2c02 - binary - 2020-04-05 14:59 - https://fburl.com/dyndash/ns1vzm1j
* olb.prod.ratn0c01.p2 - binary - 2020-04-05 14:59 - https://fburl.com/dyndash/0vxebqop
* slb.prod_regional.rnao0c00 - binary - 2020-04-05 14:59 - https://fburl.com/dyndash/a8syav0w
* slb.regional.rvll0c01.p2 - binary - 2020-04-05 14:59 - https://fburl.com/dyndash/igneyshj
 ---

Reviewed By: mjoras

Differential Revision: D20769060

Pulled By: yangchi

fbshipit-source-id: ad5d66c23b3a9723ad3f8c8091981df99339761e
2020-04-06 11:43:31 -07:00
Matt Joras
ef92376cb0 Support draft-27 transport parameters
Summary:
The transport parameters format changed in draft 27. It is now self describing via varints.

This diff retains support for the old encoding and does not iterate the mvfst version.

Reviewed By: lnicco

Differential Revision: D20149977

fbshipit-source-id: c6fa9c226f859ed81ca83ada5a8bc5832b4a3388
2020-03-04 22:08:34 -08:00
Matt Joras
2b3b76cc4d Remove support for MVFST_OLD.
Summary:
This eliminatees some tech debt by completely removing the notion of version from the core transport parameters structure and the app token for zero rtt.

Note that for the draft-27 changes we will need to temporarily re-introduce it, but to a different layer (the extension encoding itself).

Reviewed By: JunqiWang

Differential Revision: D20073578

fbshipit-source-id: 2b55af621566bf1c20e21dd17251116de1788fa0
2020-02-28 09:52:34 -08:00
Amaury Séchet
e6e6196c86 Move the delayed destruction from Handshake to QuicConnectionStateBase
Summary: Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/88

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

 ---
## Proxygen Canary
Traffic Canary: https://our.intern.facebook.com/intern/traffic/canary?fbid=224323975233396
* elb.prod.ham3c01 - binary_asan - 2020-02-05 02:00 - https://fburl.com/dyndash/u2q12hwq
* elb.prod.mia3c02 - binary - 2020-01-31 09:40 - https://fburl.com/dyndash/vmv34rpa
* elb.prod.otp1c01 - binary - 2020-02-05 02:26 - https://fburl.com/dyndash/0zttm61b
* flb.prod.fath4c02 - binary - 2020-02-05 02:26 - https://fburl.com/dyndash/6o1nqsti
* flb.prod.fgye3c01 - binary - 2020-01-31 09:40 - https://fburl.com/dyndash/nu3i5ahw
* olb.prod.rfrc0c01.p2 - binary - 2020-01-31 09:40 - https://fburl.com/dyndash/c1o6hpqw
* olb.prod.rftw0c01.p2 - binary - 2020-02-05 02:26 - https://fburl.com/dyndash/xg6qbyru
* slb.prod_regional.rcln0c00 - binary - 2020-02-05 02:26 - https://fburl.com/dyndash/e4qkbzcz
* slb.prod_regional.rfrc0c00 - binary - 2020-01-31 09:40 - https://fburl.com/dyndash/j0yxofty
* slb.prod_regional.rrva0c00 - binary_asan - 2020-02-05 02:00 - https://fburl.com/dyndash/4hsg02uj
* slb.regional.rfrc0c01.p2 - binary - 2020-01-31 09:40 - https://fburl.com/dyndash/1njxzbgf
* slb.regional.rvll0c01.p2 - binary - 2020-02-05 02:26 - https://fburl.com/dyndash/056xdmzn
 ---

Reviewed By: lnicco

Differential Revision: D19551142

Pulled By: mjoras

fbshipit-source-id: b0d14146d14384b8c37887b3e9d8fed7d6181d88
2020-02-05 06:13:33 -08:00
Luca Niccolini
90f0aa9665 add advertisedInitialMaxStreamsBidi and advertisedInitialMaxStreamsUni to transport params
Reviewed By: JunqiWang

Differential Revision: D19718461

fbshipit-source-id: 2a51f8e6c88663deb3a0d85402b53a9e3c1ffe61
2020-02-04 09:24:34 -08:00
Udip Pant
74f98d4604 Move the fizz code into its own package
Summary:
This moves the fizz specific part of the handshake into its own folder and library.

There is a bit of smurf naming going on as a result, not sure it is worth fixing or not at this stage. Maybe this code should be a in namespace named quic::fizz .

This should be doable with the client as well as soon as the key cache situation is figured out.
 ---
## Proxygen Canary

Reviewed By: yangchi

Differential Revision: D19290919

fbshipit-source-id: 48d7f7c70db42c65f7dffe3256805c268a481198
2020-01-09 20:59:54 -08:00
Samuel Miller
f2dc903e30 Removing state param to ticket decrypt calls
Summary: We'd like to remove this param from our decrypt() api, as it's no longer needed.

Reviewed By: reanimus

Differential Revision: D18855369

fbshipit-source-id: cfe5b3d847918a9ef4a4834df716b79baf0e804a
2020-01-06 15:45:27 -08:00
Amaury Séchet
2daf89c1dd Split fizz specific ClientTransportParametersExtension into FizzClientExtensions (#76)
Summary:
That ensure the connect API from ClientHandshake doesn't depend on fizz specific things anymore.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/76

Reviewed By: yangchi

Differential Revision: D18888115

Pulled By: mjoras

fbshipit-source-id: 00103d629708796b73787b3dabb6f8d3815ff976
2019-12-12 14:31:38 -08:00
Amaury Séchet
fd48df2e6b Ressurect QuicFizzFactory (#70)
Summary:
Now that we actually have a place to put it.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/70

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

 ---
## Proxygen Canary
Traffic Canary: https://our.intern.facebook.com/intern/traffic/canary?fbid=150012342925497
* elb.prod.bog1c01 - binary - 2019-11-25 14:44 - https://fburl.com/dyndash/e0a7ztjh
* flb.prod.fbed1c02 - binary - 2019-11-25 14:44 - https://fburl.com/dyndash/un5zlmj3
* olb.prod.rpnb0c01 - binary - 2019-11-25 14:44 - https://fburl.com/dyndash/ixxpou7h
* slb.prod_regional.rodn0c00 - binary - 2019-11-25 14:44 - https://fburl.com/dyndash/858m1x46
* slb.regional.ratn0c01 - binary - 2019-11-25 14:44 - https://fburl.com/dyndash/pqemf15m
 ---

Reviewed By: sharma95

Differential Revision: D18619927

Pulled By: mjoras

fbshipit-source-id: 6ef07db48ec91dad6571f383c9dbea28c3cdb951
2019-11-26 03:42:19 -08:00
Viktor Chynarov
20807a350d Exchange active_connection_id_limit in transport parameters [2/2]
Summary:
Client will set their active_connection_id_limit to the server as 7 (so it will
have 8 conn ids in total).

Reviewed By: JunqiWang

Differential Revision: D18532441

fbshipit-source-id: b0be65cec9f7c483469b0b4a2810bc370a6945c3
2019-11-20 08:46:56 -08:00
Chad Austin
83b8ff6b69 enable -Wunused-exception-parameter
Reviewed By: yfeldblum

Differential Revision: D18414245

fbshipit-source-id: a9d9015649a1f7f9a5d677ad7b5f81d87088811f
2019-11-12 17:48:19 -08:00
Amaury Séchet
a0ebc3995b Fusion QuicFizzFactory into FizzCryptoFactory (#44)
Summary:
They are strongly coupled, which indicate this is probably better to do it as one class.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/44

Reviewed By: mjoras

Differential Revision: D17590918

Pulled By: yangchi

fbshipit-source-id: 2eaca079fd760107eefd2b74fa612d7a0c8b3001
2019-10-08 22:17:02 -07:00
Samuel Miller
36043b390e Adding const State* arg to TicketCipher->decrypt()
Summary: Having access to the state when decrypting tickets gives us more control over ticket acceptance policies.

Reviewed By: knekritz

Differential Revision: D17528945

fbshipit-source-id: a3cb3d4c0917f2494f5669f283cda70776b608c6
2019-10-02 13:00:47 -07:00
Luca Niccolini
cf842aab47 cleanup some unused includes and using
Reviewed By: yangchi

Differential Revision: D16976466

fbshipit-source-id: c1fc2ee0795997f498ac7431542bbfbf1f0d2fb2
2019-08-24 02:03:39 -07:00
Amaury Séchet
cbd77a3603 Extend CryptoFactory with makePacketNumberCipher (#40)
Summary:
The CryptoFactory is extended with makePacketNumberCipher . In order to support that feature, FizzCryptoFactory now explicitly takes a QuicFizzFactory as argument instead of a generic fizz::Factory, which is the only type that is used in practice anyways.

The cypher argument was removed because:
1/ Only one cypher is used at all. Fizz also supports ChaCha20, but using it in mvfst will throw an exception.
2/ it seems like the factory should know what cypher it is dealing with.

If a choice of cypher needs to be supported going forward, it can be done by adding state to FizzCryptoFactory.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/40

Reviewed By: mjoras

Differential Revision: D16785274

Pulled By: yangchi

fbshipit-source-id: a1c490e34c5ddd107e8e068d8b127c1ed00a59ec
2019-08-16 08:52:43 -07:00
Amaury Séchet
f4e90017a3 Add mvfst specific encryption level (#26)
Summary:
This ensure a lot of code do not depend on fizz anymore.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/26

Reviewed By: mjoras, JunqiWang

Differential Revision: D16030663

Pulled By: yangchi

fbshipit-source-id: a3cc34905a6afb657da194e2166434425e7e163c
2019-06-27 14:09:04 -07:00
Bonnie Xu
2762cc1597 Setup stateless reset token
Summary: Replace hard coded stateless reset token with a token from the stateless reset token generator.

Reviewed By: yangchi

Differential Revision: D15481858

fbshipit-source-id: 30c96843c38c616600466b2fabb6defd5fcc5799
2019-06-13 08:44:53 -07:00
Alex Guzman
63d8271b4d Expire cached PSKs when initial handshake is stale
Summary: After a given amount of time, discards PSKs whose handshakes are too old.

Reviewed By: knekritz

Differential Revision: D14174662

fbshipit-source-id: ef505af91732c1030c6ce27835db49cf07d9c506
2019-06-10 13:56:00 -07:00
Amaury Séchet
f26cd1f62d Add a bridge to fizz::Aead (#12)
Summary:
This introduce quic::Aead as a simple typedef to fizz::Aead and update the codebase to use quic::Aead . This should not impact the functionality of the code in any way.

This is a first step toward introducing an interface that is specific for mvfst so that mvfst can swap fizz for something else.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/12

Reviewed By: JunqiWang

Differential Revision: D15335324

Pulled By: mjoras

fbshipit-source-id: fef166a9a5c2cbae08ad9511d0abd749f330c221
2019-05-29 11:54:08 -07:00
Bonnie Xu
f4ae0a1efd Updated files to change syntax.
Summary: Changed existing chrono syntax to chrono_literals syntax.

Reviewed By: mjoras, sharma95

Differential Revision: D15374649

fbshipit-source-id: 40033e90cca226266ef85e4fec629f290bc5dae6
2019-05-20 12:10:46 -07:00
Junqi Wang
92b8876ebf Update 0-rtt ticket transport params to d-20
Reviewed By: mjoras

Differential Revision: D15293208

fbshipit-source-id: 4ea5bf6c2c335a5c034341086f9348451bed827e
2019-05-10 16:19:43 -07:00
Matt Joras
b2e1eedfd3 Mostly remove version negotiation
Summary:
Draft-19 onwards effectively punted version negotiation to QUICv2. Now receiving version negotiation on clients is treated as an immediate termination of the connection.

The transport parameter format has also changed to no longer include any reference to the QUIC version. To avoid us (Facebook) having to turn off QUIC traffic in production, our server needs to be able to parse these transport parameters from our older clients. To achieve this when parsing the transport parameters we will, as a temporary measure, check for the Facebook QUIC version to determine which transport parameter format we are parsing. Luckily for us the version we chose maps nicely to an implausible length for the transport parameters (0xface).

Note that this diff still has the client send the old transport parameter format, so that the rollout can be staged.

Reviewed By: yangchi

Differential Revision: D15203481

fbshipit-source-id: dfaaddc3acc76434461b04430b82a0902138c060
2019-05-10 12:55:28 -07:00
udippant
50d4939e9e Initial commit of mvfst 2019-04-22 23:42:46 -07:00