Skip to content

Commit c189949

Browse files
feat: integrate html format with the notary
feat: support multiple selectors in html format feat: implement html extractor
1 parent ad24fdc commit c189949

File tree

24 files changed

+4603
-265
lines changed

24 files changed

+4603
-265
lines changed

β€Ž.cargo/config.tomlβ€Ž

Lines changed: 0 additions & 4 deletions
This file was deleted.

β€ŽCargo.lockβ€Ž

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{
2+
"mode": "TEE",
3+
"notary_host": "localhost",
4+
"notary_port": 7443,
5+
"notary_ca_cert": "MIIFszCCA5ugAwIBAgIUeXLQmnjeXsHpGji7xA8oJjjw7WwwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQBgNVBAcMCVBhbG8gQWx0bzEVMBMGA1UECgwMT3JnYW5pemF0aW9uMRowGAYDVQQDDBFMb2NhbGhvc3QgUm9vdCBDQTAeFw0yNDA2MDcyMjUyNDBaFw0yOTA2MDYyMjUyNDBaMGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlQYWxvIEFsdG8xFTATBgNVBAoMDE9yZ2FuaXphdGlvbjEaMBgGA1UEAwwRTG9jYWxob3N0IFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDIHMEL9gVSxT/J0qS4xDkDZs1d1UG0+z6NFLLsGdV7gu0ZJbDPlNd0kpjWsisVNB7TcqWoq5ROK5CR+6lZxXC8nbqr2YAJ2O8mHIXcYv7msAN3UYxtM6v1M7K+vNMJdDjZVAxcOKq5R7uUDUPw1weePz6eVEjntAW8mUjqkfnCqYml943Ud3724SkI5wyUT9rKS3bk6hvneq1ah/b1zRGDF2gp+T/oNe4ieS/LGoIUluE2csGRXtt542gpJnw5L54JASmGgt6hunUSWtoaht7Qxv6hYpieu4iHqZY1kfcFDjDH2WI16g1YqrWHzk1l7vWNLVDEcK3kdSQ1GmYAij8ZjAi0LJizLwtN//EkfxiOPlV435itK3uugY+etxrk77BeA6PmVcpZeLLXYuKSrzfaBh0ifP2p0uRlShURi5Rz4IE0I7wHkZ44x9MKYv8YzXK7O29HD158tgorxqwwKmkHqSxWpp7SRKvNnMulHN/el+IKDrPeBhVXsSSkd6U+/H61q7i0SY9TqqhdiMQLW/efK9LkVRen5myhwqogwiF/42Jp2nrCeuzv5YDsAFSrQ0lukW+Hz7FXV+0axnKeXZ08Nd+IS1BhGyMgHo6PWMP1fWyfO0DJVUfIqrHqvBy8bW0yNOuhiyU2oeyDRKv75OMxpIrUeX3qvmrVcYUPvfXsVQIDAQABo1MwUTAdBgNVHQ4EFgQUlro6UuKRY+lHZ3T4FQMhoQAJ2a8wHwYDVR0jBBgwFoAUlro6UuKRY+lHZ3T4FQMhoQAJ2a8wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEARliSCLdjNI5fFkNwXDK6k6jN5hITrY07XIawUIEwinjQqgLkYFvzXbMtfLwsWmxMPjDVYYDa5Y2NAGcH08b//2z9EuHxMOTOFTKr59BEcVxV1cxV+lspAunH8DLSlLJhf/EeR+MhIIHAfhlE8V7lvlE1EbM+Uj5JYIeefV/4omsGrphyHD3oSJAQDae0su200I/i2yAaTrwXLZ4HtaXsnxKZ4PMPFWaLvMQ8DsLgx2VB3/vQJn74Xepau6mYEWlRnUu90mj79gJOnwBKPlLojF6dJOMIJ2YHr9fI8sUfkVwPFVlkDKJcr0ll5RL3O/naNlLQZuOgijOM5YF5iTrefliVodEHpBPID2mhtq/E+ZIQWLpik8ulsJ8ufN9YfrbjbsiC/KeoMqoFCImRSyMGQDMADo4EV3DNfDFvfrHx0qBMmJ0nkhuGobphegMPCjZ3axvQwQulKuHXmFpAvGYcpK/twBMC1MJkV04tIwVEDZG6id5oKYtrIXHdSFshf6r3z4bbgq6kJnOxZ8Vo4cEw/dgc3hRivr+HnxOJcEk2CTQlCVOiCQAg64OqDEOoswVg6nzoO3RJhFatu+abO22MIXPNGma02zBoQZLYpGzL9z6pMnPKjL15G9H1SYVSTGhmq+GVtdRibg8rLBciSm3ERd7gNRqvYP5GrjCtUIbOTEc=",
6+
"target_method": "GET",
7+
"target_url": "https://en.wikipedia.org/wiki/Claude_Shannon",
8+
"target_headers": {},
9+
"target_body": "",
10+
"max_sent_data": 10000,
11+
"max_recv_data": 10000,
12+
"proving": {
13+
"manifest": {
14+
"manifestVersion": "1",
15+
"id": "wikipedia-claude-shannon",
16+
"title": "Wikipedia Claude Shannon",
17+
"description": "Generate a proof that you have visited the Claude Shannon Wikipedia page",
18+
"prepareUrl": "https://en.wikipedia.org/wiki/Claude_Shannon",
19+
"request": {
20+
"method": "GET",
21+
"version": "HTTP/1.1",
22+
"url": "https://en.wikipedia.org/wiki/Claude_Shannon",
23+
"headers": {
24+
"accept-encoding": "identity",
25+
"host": "en.wikipedia.org",
26+
"connection": "close",
27+
"accept": "*/*"
28+
}
29+
},
30+
"response": {
31+
"status": "200",
32+
"version": "HTTP/1.1",
33+
"message": "OK",
34+
"headers": {
35+
"Content-Type": "text/html; charset=UTF-8"
36+
},
37+
"body": {
38+
"format": "html",
39+
"extractors": [
40+
{
41+
"id": "pageTitle",
42+
"description": "Extract the page title",
43+
"selector": ["title"],
44+
"type": "string",
45+
"predicates": [
46+
{
47+
"type": "value",
48+
"comparison": "contains",
49+
"value": "Claude Shannon"
50+
}
51+
]
52+
},
53+
{
54+
"id": "roles",
55+
"description": "Extract his professional roles",
56+
"selector": ["div#mw-content-text", "div.mw-parser-output", "p", "a"],
57+
"type": "array",
58+
"predicates": [
59+
{
60+
"type": "value",
61+
"comparison": "contains",
62+
"value": "mathematician",
63+
"case_sensitive": false
64+
},
65+
{
66+
"type": "value",
67+
"comparison": "contains",
68+
"value": "electrical engineer",
69+
"case_sensitive": false
70+
},
71+
{
72+
"type": "value",
73+
"comparison": "contains",
74+
"value": "cryptographer",
75+
"case_sensitive": false
76+
}
77+
]
78+
}
79+
]
80+
}
81+
}
82+
}
83+
}
84+
}

β€Žnotary/src/proxy.rsβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub async fn proxy(
2828
State(state): State<Arc<SharedState>>,
2929
extract::Json(payload): extract::Json<client::ProxyConfig>,
3030
) -> Result<Json<TeeProof>, NotaryServerError> {
31-
let session_id = query.session_id.clone();
31+
let session_id = query.session_id;
3232

3333
info!("Starting proxy with ID: {}", session_id);
3434

@@ -78,7 +78,7 @@ async fn from_reqwest_response(response: Response) -> NotaryResponse {
7878
// TODO: This makes me think that perhaps this should be an optional field or something else
7979
body: ManifestResponseBody::default(),
8080
},
81-
notary_response_body: NotaryResponseBody { json },
81+
notary_response_body: NotaryResponseBody { body: json },
8282
}
8383
}
8484

β€Žnotary/src/tee.rsβ€Ž

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,5 @@ fn get_legal_notarization_values(
277277
}
278278

279279
// Check if response matches manifest and extract values
280-
response
281-
.match_and_extract(&manifest.response)?
282-
.filter(|values| !values.is_empty())
283-
.ok_or(NotaryServerError::ManifestResponseMismatch)
280+
response.match_and_extract(&manifest.response)?.ok_or(NotaryServerError::ManifestResponseMismatch)
284281
}

β€Žnotary/src/tls_parser.rsβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ impl DecryptWrapper {
513513
},
514514
Err(_) => None,
515515
},
516-
SupportedSuites::ChachaPoly => match self.inner.decrypt_tls13_chacha20(&msg, self.seq) {
516+
SupportedSuites::ChachaPoly => match self.inner.decrypt_tls13_chacha20(msg, self.seq) {
517517
Ok((plain_message, _)) => {
518518
self.seq += 1;
519519
Some(plain_message)

β€Žproofs/src/tests/inputs.rsβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,8 +654,9 @@ pub fn complex_manifest() -> OrigoManifest {
654654
"orderId".to_string(),
655655
],
656656
extractor_type: ExtractorType::String,
657-
required: true,
657+
required: false,
658658
predicates: vec![],
659+
attribute: None,
659660
}],
660661
}),
661662
},

β€Žweb-prover-core/Cargo.tomlβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ derive_more ={ workspace=true }
1515
# Using `regress` crate for compatibility with ECMAScript regular expressions in Manifest validation
1616
regress="0.10.3"
1717
regex ="1.11.1"
18+
tl ={ version="0.7.8", features=["simd"] }

β€Žweb-prover-core/REMOVE_MEβ€Ž

Lines changed: 0 additions & 2 deletions
This file was deleted.

β€Žweb-prover-core/fixtures/claude_shannon.htmlβ€Ž

Lines changed: 2784 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
Β (0)