diff --git a/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/encrypt.cairo b/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/encrypt.cairo index b68b919e0c3..13a68267941 100644 --- a/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/encrypt.cairo +++ b/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/encrypt.cairo @@ -52,7 +52,6 @@ func encrypt_state_diff{range_check_ptr, ec_op_ptr: EcOpBuiltin*}( local symmetric_key: felt; local sn_private_keys: felt*; %{ generate_keys_from_hash(ids.compressed_start, ids.compressed_dst, ids.n_keys) %} - validate_sn_private_keys(n_keys=n_keys, sn_private_keys=sn_private_keys); local encrypted_start: felt*; %{ @@ -81,17 +80,6 @@ func encrypt_state_diff{range_check_ptr, ec_op_ptr: EcOpBuiltin*}( return (encrypted_start=encrypted_start, encrypted_dst=encrypted_dst); } -// Validates that the private keys are within the range [1, StarkCurve.ORDER - 1]. -func validate_sn_private_keys{range_check_ptr}(n_keys: felt, sn_private_keys: felt*) { - if (n_keys == 0) { - return (); - } - assert_not_zero(sn_private_keys[0]); - assert_le_felt(sn_private_keys[0], StarkCurve.ORDER - 1); - - return validate_sn_private_keys(n_keys=n_keys - 1, sn_private_keys=&sn_private_keys[1]); -} - // Compute public keys from private keys. // Step-by-step for each key: // 1) Multiply the private key by the curve generator to get the public point (x, y). @@ -102,11 +90,15 @@ func output_sn_public_keys{range_check_ptr, ec_op_ptr: EcOpBuiltin*, encrypted_d if (n_keys == 0) { return (); } + let (sn_public_key) = ec_mul( m=sn_private_keys[0], p=EcPoint(x=StarkCurve.GEN_X, y=StarkCurve.GEN_Y) ); assert encrypted_dst[0] = sn_public_key.x; let encrypted_dst = &encrypted_dst[1]; + // Validates that the private keys are within the range [1, StarkCurve.ORDER - 1]. + assert_not_zero(sn_private_keys[0]); + assert_le_felt(sn_private_keys[0], StarkCurve.ORDER - 1); return output_sn_public_keys(n_keys=n_keys - 1, sn_private_keys=&sn_private_keys[1]); } @@ -157,7 +149,7 @@ func encrypt{range_check_ptr, encrypted_dst: felt*}( naive_encode_felt252s_to_u32s( packed_values_len=1, packed_values=&symmetric_key, unpacked_u32s=encoded_symmetric_key ); - let blake_output: felt* = alloc(); + let blake_segment: felt* = alloc(); // Ensure the data size is small - we assume this when encoding the index in encrypt_inner. assert_le(data_end - data_start, 2 ** 32 - 1); let (initial_state: felt*) = create_initial_state_for_blake2s(); @@ -166,7 +158,7 @@ func encrypt{range_check_ptr, encrypted_dst: felt*}( data_end=data_end, index=0, encoded_symmetric_key=encoded_symmetric_key, - blake_output=blake_output, + blake_segment=blake_segment, initial_state=initial_state, ); return (); @@ -179,40 +171,40 @@ func encrypt_inner{range_check_ptr, encrypted_dst: felt*}( data_end: felt*, index: felt, encoded_symmetric_key: felt*, - blake_output: felt*, + blake_segment: felt*, initial_state: felt*, ) { if (data_start == data_end) { return (); } - let blake_encoding_start = blake_output; + let blake_input = blake_segment; // Write encoded symmetric key to blake output. - assert blake_output[0] = encoded_symmetric_key[0]; - assert blake_output[1] = encoded_symmetric_key[1]; - assert blake_output[2] = encoded_symmetric_key[2]; - assert blake_output[3] = encoded_symmetric_key[3]; - assert blake_output[4] = encoded_symmetric_key[4]; - assert blake_output[5] = encoded_symmetric_key[5]; - assert blake_output[6] = encoded_symmetric_key[6]; - assert blake_output[7] = encoded_symmetric_key[7]; - let blake_output = &blake_output[8]; + assert blake_segment[0] = encoded_symmetric_key[0]; + assert blake_segment[1] = encoded_symmetric_key[1]; + assert blake_segment[2] = encoded_symmetric_key[2]; + assert blake_segment[3] = encoded_symmetric_key[3]; + assert blake_segment[4] = encoded_symmetric_key[4]; + assert blake_segment[5] = encoded_symmetric_key[5]; + assert blake_segment[6] = encoded_symmetric_key[6]; + assert blake_segment[7] = encoded_symmetric_key[7]; + let blake_segment = &blake_segment[8]; // Write encoded index to blake output - since index is small, manually encode as [0, 0, 0, 0, 0, 0, 0, index]. - assert blake_output[0] = 0; - assert blake_output[1] = 0; - assert blake_output[2] = 0; - assert blake_output[3] = 0; - assert blake_output[4] = 0; - assert blake_output[5] = 0; - assert blake_output[6] = 0; - assert blake_output[7] = index; - let blake_output = &blake_output[8]; + assert blake_segment[0] = 0; + assert blake_segment[1] = 0; + assert blake_segment[2] = 0; + assert blake_segment[3] = 0; + assert blake_segment[4] = 0; + assert blake_segment[5] = 0; + assert blake_segment[6] = 0; + assert blake_segment[7] = index; + let blake_segment = &blake_segment[8]; // Calculate blake hash modulo prime. blake_with_opcode_for_single_16_length_word( - data=blake_encoding_start, out=blake_output, initial_state=initial_state + data=blake_input, out=blake_segment, initial_state=initial_state ); - let hash = u256_to_felt(u256=blake_output); - let blake_output = &blake_output[8]; + let hash = u256_to_felt(u256=blake_segment); + let blake_segment = &blake_segment[8]; // Encrypt the current element. assert encrypted_dst[0] = hash + data_start[0]; @@ -224,7 +216,7 @@ func encrypt_inner{range_check_ptr, encrypted_dst: felt*}( data_end=data_end, index=index + 1, encoded_symmetric_key=encoded_symmetric_key, - blake_output=blake_output, + blake_segment=blake_segment, initial_state=initial_state, ); } diff --git a/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/output.cairo b/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/output.cairo index 0728e335411..6c19090245c 100644 --- a/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/output.cairo +++ b/crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/output.cairo @@ -22,13 +22,7 @@ from starkware.starknet.core.os.state.output import ( serialize_full_contract_state_diff, ) from starkware.starknet.core.os.state.state import SquashedOsStateUpdate -from starkware.starknet.core.os.encrypt import ( - validate_sn_private_keys, - output_sn_public_keys, - output_encrypted_symmetric_key, - encrypt, - encrypt_state_diff, -) +from starkware.starknet.core.os.encrypt import encrypt, encrypt_state_diff // Represents the output of the OS. struct OsOutput { diff --git a/crates/apollo_starknet_os_program/src/program_hash.json b/crates/apollo_starknet_os_program/src/program_hash.json index 81ff11d63f3..67bd71b8f86 100644 --- a/crates/apollo_starknet_os_program/src/program_hash.json +++ b/crates/apollo_starknet_os_program/src/program_hash.json @@ -1,5 +1,5 @@ { - "os": "0x7f1ad76d2bc6845ae61c5ccb2f8aae2e2ff1418b5572bebcdf2dd832556a6b0", - "aggregator": "0x31a2d2cf5b673b718d9a9ed527fc343c2744ec3bd1daf1a7b9f1a4a1fa3d21d", - "aggregator_with_prefix": "0x4460a2cd0996f05489f8339d50f317d07b06f26dd2ecd5a5540368d2cef2a9d" + "os": "0x515b245eb6721b75e4464fbfba86e8b9fdab37058f71b248ce28dae04ae919c", + "aggregator": "0x3610564846e2696ddf525544033e3477a4bea977fc0d9102af3234c0629216c", + "aggregator_with_prefix": "0x426bb149ad6db9f503e0fe0d04bf6087db0c5155d2e5b5e7c42583a2facd5f9" } \ No newline at end of file