-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequest.cairo
71 lines (61 loc) · 1.92 KB
/
request.cairo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
%builtins output
func main{output_ptr: felt*}() {
alloc_locals;
// Load fibonacci_claim_index and copy it to the output segment.
local domain: felt*;
local domain_len;
%{
x = program_input["domain"]
ids.domain = domain = segments.add()
for i, val in enumerate(x):
memory[domain + i] = val
ids.domain_len = len(x)
%}
local status;
local secrets: felt*;
local secrets_len: felt;
local cert: felt*;
local cert_len: felt;
local domain_end: felt;
%{
import requests
x = []
for i in range(ids.domain_len):
x.append(memory[ids.domain + i])
resp = requests.post("http://proxy.test/request", json={"domain": x})
ids.status = resp.json()["status_code"]
response = resp.json()
resp_secrets = response["connection_secrets"]
ids.secrets = secrets = segments.add()
for i, val in enumerate(resp_secrets):
memory[secrets + i] = val
ids.secrets_len = len(resp_secrets)
resp_first_cert_data = response["cert"]
ids.domain_end = resp_first_cert_data["domain_end"]
resp_cert = resp_first_cert_data["data"]
ids.cert = cert = segments.add()
for i, val in enumerate(resp_cert):
memory[cert + i] = val
ids.cert_len = len(resp_cert)
%}
assert_equal_from_end(domain, cert + domain_end - domain_len, domain_len);
// Return the updated output_ptr.
return ();
}
func print_output{output_ptr: felt*}(data_len: felt, data: felt*) {
if (data_len == 0) {
return ();
}
assert output_ptr[0] = data[0];
let output_ptr = output_ptr + 1;
print_output(data_len - 1, data + 1);
return ();
}
func assert_equal_from_end(a: felt*, b: felt*, len: felt) {
if (len == 0) {
return ();
}
assert a[0] = b[0];
assert_equal_from_end(a + 1, b + 1, len - 1);
return ();
}