verity_verify_tls/
session.rs1use tlsn_core::proof::{SessionProof, TlsProof};
2
3use elliptic_curve::pkcs8::DecodePublicKey;
4
5pub fn verify_session(proof: &String, pub_key: &String) -> Result<(), String> {
8 let session: SessionProof =
9 serde_json::from_str(proof.as_str()).or(Err("INVALID PROOF".to_owned()))?;
10
11 let pub_key = p256::PublicKey::from_public_key_pem(pub_key.as_str())
12 .or(Err("INVALID PUBLIC KEY".to_owned()))?;
13
14 session
15 .verify_with_default_cert_verifier(pub_key)
16 .or(Err("INVALID PROOF SESSION".to_owned()))
17}
18
19pub fn verify_proof(proof: &String, pub_key: &String) -> Result<(String, String), String> {
22 let proof: TlsProof =
24 serde_json::from_str(proof.as_str()).or(Err("INVALID PROOF".to_owned()))?;
25
26 let TlsProof {
27 session,
30 substrings,
33 } = proof;
34
35 let session_stringified = &serde_json::to_string(&session).unwrap();
37 verify_session(session_stringified, pub_key)?;
38
39 let SessionProof {
40 header,
42 ..
45 } = session;
46
47 let (mut sent, mut recv) = substrings
51 .verify(&header)
52 .or(Err("PROOF VERIFICATION FAILED".to_string()))?;
53
54 sent.set_redacted(b'X');
56 recv.set_redacted(b'X');
57
58 Ok((
59 String::from_utf8(recv.data().to_vec()).unwrap(),
60 String::from_utf8(sent.data().to_vec()).unwrap(),
61 ))
62}