Skip to content

Commit 0ecab45

Browse files
apollo_starknet_os_program: move encrypt state diff to a function (#9464)
1 parent a5a9b50 commit 0ecab45

File tree

3 files changed

+50
-32
lines changed

3 files changed

+50
-32
lines changed

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/encrypt.cairo

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,46 @@ from starkware.starknet.core.os.naive_blake import (
1313
from starkware.cairo.common.cairo_blake2s.blake2s import blake_with_opcode
1414
from starkware.cairo.common.alloc import alloc
1515

16+
// Encrypts state diff data by generating keys, outputting public keys,
17+
// encrypting symmetric keys, and encrypting the data.
18+
func encrypt_state_diff{range_check_ptr, ec_op_ptr: EcOpBuiltin*}(
19+
compressed_start: felt*, compressed_dst: felt*, n_keys: felt, public_keys: felt*
20+
) -> (encrypted_start: felt*, encrypted_dst: felt*) {
21+
alloc_locals;
22+
23+
// Generate random symmetric key and random starknet private keys.
24+
local symmetric_key: felt;
25+
local sn_private_keys: felt*;
26+
%{ generate_keys_from_hash(ids.compressed_start, ids.compressed_dst, ids.n_keys) %}
27+
validate_sn_private_keys(n_keys=n_keys, sn_private_keys=sn_private_keys);
28+
29+
local encrypted_start: felt*;
30+
%{
31+
if use_kzg_da:
32+
ids.encrypted_start = segments.add()
33+
else:
34+
# Assign a temporary segment, to be relocated into the output segment.
35+
ids.encrypted_start = segments.add_temp_segment()
36+
%}
37+
38+
let encrypted_dst = encrypted_start;
39+
assert encrypted_dst[0] = n_keys;
40+
let encrypted_dst = &encrypted_dst[1];
41+
42+
with encrypted_dst {
43+
output_sn_public_keys(n_keys=n_keys, sn_private_keys=sn_private_keys);
44+
output_encrypted_symmetric_key(
45+
n_keys=n_keys,
46+
public_keys=public_keys,
47+
sn_private_keys=sn_private_keys,
48+
symmetric_key=symmetric_key,
49+
);
50+
encrypt(data_start=compressed_start, data_end=compressed_dst, symmetric_key=symmetric_key);
51+
}
52+
53+
return (encrypted_start=encrypted_start, encrypted_dst=encrypted_dst);
54+
}
55+
1656
// Validates that the private keys are within the range [1, StarkCurve.ORDER - 1] as required by
1757
// the Diffie-Hellman elliptic curve encryption scheme.
1858
func validate_sn_private_keys{range_check_ptr}(n_keys: felt, sn_private_keys: felt*) {

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/output.cairo

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ from starkware.starknet.core.os.encrypt import (
2727
output_sn_public_keys,
2828
output_encrypted_symmetric_key,
2929
encrypt,
30+
encrypt_state_diff,
3031
)
3132

3233
// Represents the output of the OS.
@@ -270,35 +271,12 @@ func process_data_availability{range_check_ptr, ec_op_ptr: EcOpBuiltin*}(
270271
}
271272

272273
// Encrypt the compressed state updates.
273-
// Generate random symmetric key and random starknet private keys.
274-
local symmetric_key: felt;
275-
local sn_private_keys: felt*;
276-
%{ generate_keys_from_hash(ids.compressed_start, ids.compressed_dst, ids.n_keys) %}
277-
validate_sn_private_keys(n_keys=n_keys, sn_private_keys=sn_private_keys);
278-
279-
local encrypted_start: felt*;
280-
%{
281-
if use_kzg_da:
282-
ids.encrypted_start = segments.add()
283-
else:
284-
# Assign a temporary segment, to be relocated into the output segment.
285-
ids.encrypted_start = segments.add_temp_segment()
286-
%}
287-
288-
let encrypted_dst = encrypted_start;
289-
assert encrypted_dst[0] = n_keys;
290-
let encrypted_dst = &encrypted_dst[1];
291-
292-
with encrypted_dst {
293-
output_sn_public_keys(n_keys=n_keys, sn_private_keys=sn_private_keys);
294-
output_encrypted_symmetric_key(
295-
n_keys=n_keys,
296-
public_keys=public_keys,
297-
sn_private_keys=sn_private_keys,
298-
symmetric_key=symmetric_key,
299-
);
300-
encrypt(data_start=compressed_start, data_end=compressed_dst, symmetric_key=symmetric_key);
301-
}
274+
let (encrypted_start, encrypted_dst) = encrypt_state_diff(
275+
compressed_start=compressed_start,
276+
compressed_dst=compressed_dst,
277+
n_keys=n_keys,
278+
public_keys=public_keys,
279+
);
302280

303281
return (da_start=encrypted_start, da_end=encrypted_dst);
304282
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"os": "0x3e7651b150fbcab98774184c28edbc8cfa10e0e246d612810b1ec0133c0e7d3",
3-
"aggregator": "0x4b62d0cfc8c03d2b2c4e214c2f2792cdd66068e871b33010a19f2c747877fe9",
4-
"aggregator_with_prefix": "0x1605e56d904eb1db8959651aa03e70828c763c842e2f433a2a25706f7dba173"
2+
"os": "0x338203798f8c939bae2c9bd06afd80bb63595007601729b33d6739920416c24",
3+
"aggregator": "0x110273c1890c2e09a34e3995eeeaa7e0a10fe5a8bd98c84ccf6243512f7a7e6",
4+
"aggregator_with_prefix": "0x3ca5d4c4724e45c896bf36d26e28a7e585e61d680b3b06962af652cafa166d7"
55
}

0 commit comments

Comments
 (0)