Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ProVerif Handshake Model #98

Merged
merged 52 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
9cd1b62
Handwritten lib is not part of extraction
jschneider-bensch Mar 11, 2024
1d11fb3
Depend on `hax-lib-macros`
jschneider-bensch Mar 11, 2024
2cc2414
Annotate handwritten / constructor `fn`s, update driver command
jschneider-bensch Mar 11, 2024
578f757
Latest generated model
jschneider-bensch Mar 12, 2024
70e1a0a
Include models for tls13utils
jschneider-bensch Mar 12, 2024
0aa98fb
Insert tls13format models
jschneider-bensch Mar 12, 2024
ca9920d
Insert tls13crypto models
jschneider-bensch Mar 12, 2024
2fc12cb
Insert tls13cert models
jschneider-bensch Mar 12, 2024
549ebd3
Zeroes should be a constructor
jschneider-bensch Mar 12, 2024
02fa23b
Replace macro paths by `use`
jschneider-bensch Mar 13, 2024
00e2986
Repair `kem_keygen` model
jschneider-bensch Mar 13, 2024
3fbab7e
check_eq handwritten
jschneider-bensch Mar 18, 2024
e43cbe4
handwritten HandshakeData concat
jschneider-bensch Mar 18, 2024
46b21f7
HandshakeData to_two & to_four rewrite
jschneider-bensch Mar 18, 2024
dae8a65
Transcript add handwritten
jschneider-bensch Mar 18, 2024
9e291cc
Simplify length constants
jschneider-bensch Mar 18, 2024
d76379d
Workaround for memory issues: simplify large integer
jschneider-bensch Mar 18, 2024
598541c
Simplify length constants
jschneider-bensch Mar 18, 2024
8de6553
Concat any HandshakeData
jschneider-bensch Mar 18, 2024
b247a26
Make `hkdf_expand_label` a constructor
jschneider-bensch Mar 19, 2024
c125242
Remove auto-generated events
jschneider-bensch Mar 20, 2024
76013e0
Fix `HandshakeData__to_four`
jschneider-bensch Mar 20, 2024
de34fd8
Fix `parse_certificate_verify`
jschneider-bensch Mar 20, 2024
7fd0649
Fix `parse_encrypted_extensions`
jschneider-bensch Mar 20, 2024
97ef62e
Fix `parse_server_certificate`
jschneider-bensch Mar 20, 2024
455cd07
Remove auto-generated event
jschneider-bensch Mar 20, 2024
bb70be6
More specific reduc for ECDSA signature verification
jschneider-bensch Mar 20, 2024
4352fcf
Certificate constructor
jschneider-bensch Mar 20, 2024
8710793
Simple reachability event
jschneider-bensch Mar 20, 2024
83061af
Treat HandshakeData as bytes
jschneider-bensch Mar 20, 2024
f7a4fcd
Introduce server name and certificate signing key free names
jschneider-bensch Mar 20, 2024
c546f9c
Full handshake reachability analysis
jschneider-bensch Mar 20, 2024
cf216c5
len functions can actually be extracted
jschneider-bensch Mar 23, 2024
561051c
More conservative `hkdf_expand_label`
jschneider-bensch Mar 23, 2024
d0fe172
Remove unnecessary newlines
jschneider-bensch Mar 23, 2024
cbafa66
auth/secrecy queries
karthikbhargavan Mar 25, 2024
80be87f
Certificate verification crutch
jschneider-bensch Mar 25, 2024
2a612f4
`hmac_tag` should not be `[data]`
jschneider-bensch Mar 25, 2024
018b166
Server key compromise event
jschneider-bensch Mar 25, 2024
9ddf065
Server key compromise queries
jschneider-bensch Mar 25, 2024
faad1f9
Allow specification of algs and psk-mode for server/client processes
jschneider-bensch Mar 27, 2024
a1ec30d
Fix `put_client_hello`
jschneider-bensch Mar 27, 2024
889a4df
Fix RSA certificate verification
jschneider-bensch Mar 27, 2024
9aadae3
Fix PSK mode
jschneider-bensch Mar 27, 2024
ad607a3
Separating out PSK and cert_sk compromise scenarios
jschneider-bensch Mar 28, 2024
99da441
Remove dependency on non-`main` hax branch
jschneider-bensch Mar 28, 2024
a6de9bd
Store model patches in separate directory
jschneider-bensch Mar 29, 2024
1835378
Make `proofs/proverif/extraction` track unmodified extraction output
jschneider-bensch Mar 29, 2024
0336128
Move `hax-lib-macros` dependency to a feature
jschneider-bensch Apr 2, 2024
e87410c
Merge pull request #102 from cryspen/jonas/hax-pv-feature
jschneider-bensch Apr 2, 2024
9050ddb
Merge branch 'main' into jonas/pv-handshake-annotations
jschneider-bensch Apr 2, 2024
d7e9a5b
Merge branch 'main' into jonas/pv-handshake-annotations
jschneider-bensch Apr 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ rand = "0.8.0"
hex = "0.4.3"
tracing = "0.1"
libcrux = { version = "0.0.2-pre.2", features = ["rand"] }
hax-lib-macros = { git = "https://github.com/hacspec/hax", optional = true }


[features]
default = ["api"]
test_utils = []
secret_integers = []
api = [] # The streaming Rust API that everyone should use but is not hacspec.
hax-pv = ["dep:hax-lib-macros"]

[dev-dependencies]
bertie = { path = ".", features = ["test_utils"] }
Expand Down
20 changes: 11 additions & 9 deletions hax-driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def shell(command, expect=0, cwd=None, env={}):
extract_parser = sub_parser.add_parser("extract")
extract_proverif_parser = sub_parser.add_parser("extract-proverif")
typecheck_parser = sub_parser.add_parser("typecheck")
patch_proverif_parser = sub_parser.add_parser("patch-proverif")
typecheck_proverif_parser = sub_parser.add_parser("typecheck-proverif")

typecheck_parser.add_argument(
"--lax",
action="store_true",
Expand Down Expand Up @@ -108,16 +110,11 @@ def shell(command, expect=0, cwd=None, env={}):
" ".join([
"-**",
"+~**::tls13handshake::**",
"+~**::server::lookup_db" #transitive dependency on tls13utils
"+~**::server::lookup_db", # to include transitive dependency on tls13utils
"+~**::tls13utils::parse_failed", # transitive dependencies required
"+~**::tls13crypto::zero_key", # transitive dependencies required
]),
"pro-verif",
"--assume-items",
" ".join([
"+**::tls13formats::**",
"+**::tls13crypto::**",
"+**::tls13utils::**",
"+**::tls13cert::**"
])
],
cwd=".",
env=hax_env,
Expand All @@ -133,10 +130,15 @@ def shell(command, expect=0, cwd=None, env={}):
shell(["make", "-C", "proofs/fstar/extraction/", "clean"])
shell(["make", "-C", "proofs/fstar/extraction/"], env=custom_env)
exit(0)
elif options.sub == "patch-proverif":
custom_env = {}
shell(["patch", "proofs/proverif/extraction/lib.pvl", "proofs/proverif/patches/lib.patch"], env=custom_env)
shell(["patch", "proofs/proverif/extraction/analysis.pv", "proofs/proverif/patches/analysis.patch"], env=custom_env)
exit(0)
elif options.sub == "typecheck-proverif":
# Typecheck subcommand.
custom_env = {}
shell(["proverif", "-lib", "proofs/proverif/extraction/handwritten_lib", "-lib", "proofs/proverif/extraction/lib", "proofs/proverif/extraction/analysis.pv"], env=custom_env)
shell(["proverif", "-lib", "proofs/proverif/handwritten_lib", "-lib", "proofs/proverif/extraction/lib", "proofs/proverif/extraction/analysis.pv"], env=custom_env)
exit(0)
else:
parser.print_help()
Expand Down
7 changes: 0 additions & 7 deletions proofs/proverif/extraction/handwritten_lib.pvl

This file was deleted.

3,107 changes: 1,722 additions & 1,385 deletions proofs/proverif/extraction/lib.pvl

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions proofs/proverif/handwritten_lib.pvl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
type impl_CryptoRng___RngCore.
letfun rand_core__RngCore_f_fill_bytes(rng: impl_CryptoRng___RngCore, dest: bitstring) = new b: bitstring; (rng, b).

fun rust_primitives__hax__repeat(nat, nat): bitstring.

letfun core__ops__bit__Not__v_not(b: bool) = if b then false else true.
letfun core__cmp__PartialOrd__ge(lhs: nat, rhs:nat ) = lhs >= rhs.


type libcrux__digest__Algorithm.
fun libcrux__digest__Algorithm_Algorithm_Sha256_c(): libcrux__digest__Algorithm [data].
fun libcrux__digest__Algorithm_Algorithm_Sha384_c(): libcrux__digest__Algorithm [data].
fun libcrux__digest__Algorithm_Algorithm_Sha512_c(): libcrux__digest__Algorithm [data].

letfun libcrux__digest__digest_size(alg: libcrux__digest__Algorithm) =
let libcrux__digest__Algorithm_Algorithm_Sha256_c() = alg in 32
else let libcrux__digest__Algorithm_Algorithm_Sha384_c() = alg in 48
else let libcrux__digest__Algorithm_Algorithm_Sha512_c() = alg in 64.
Loading
Loading