Skip to content

Commit 909d42a

Browse files
starknet_os: fix blake2s finalize opcode command in naive blake
1 parent 0ecab45 commit 909d42a

File tree

1 file changed

+31
-6
lines changed
  • crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os

1 file changed

+31
-6
lines changed

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

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,43 @@
11
from starkware.cairo.common.alloc import alloc
22
from starkware.cairo.common.cairo_blake2s.blake2s import blake_with_opcode
3-
from starkware.cairo.common.cairo_blake2s.blake2s import BLAKE2S_FINALIZE_INSTRUCTION
43

54
// Computes blake2s of `input` of size 16 felts, representing 32 bits each.
65
// The initial state is the standard BLAKE2s IV XORed with the parameter block P[0] = 0x01010020.
76
func blake_with_opcode_for_single_16_length_word(data: felt*, out: felt*, initial_state: felt*) {
7+
const BLAKE2S_FINALIZE_OPCODE_EXT = 2;
8+
const OP0_REG = 1;
9+
const OP1_FP = 3;
10+
const AP_ADD1 = 11;
11+
// Flags: 000100000001010
12+
// - State and data are referenced from fp
13+
// - Counter is referenced from ap
14+
// - Increment ap by 1 after instruction
15+
const BLAKE2S_FLAGS = 2 ** OP0_REG + 2 ** OP1_FP + 2 ** AP_ADD1;
16+
17+
const STATE_OFFSET = -3;
18+
const MESSAGE_OFFSET = -5;
19+
const COUNTER_OFFSET = -1;
20+
21+
const COUNTER_SHIFT = 1;
22+
const STATE_SHIFT = 2 ** 16;
23+
const MESSAGE_SHIFT = 2 ** 32;
24+
const FLAGS_SHIFT = 2 ** 48;
25+
const OPCODE_EXT_SHIFT = 2 ** 63;
26+
27+
const POS_STATE_OFFSET = 2 ** 15 + STATE_OFFSET;
28+
const POS_MESSAGE_OFFSET = 2 ** 15 + MESSAGE_OFFSET;
29+
const POS_COUNTER_OFFSET = 2 ** 15 + COUNTER_OFFSET;
30+
31+
const BLAKE2S_FINALIZE_INSTRUCTION = POS_COUNTER_OFFSET * COUNTER_SHIFT + POS_STATE_OFFSET *
32+
STATE_SHIFT + POS_MESSAGE_OFFSET * MESSAGE_SHIFT + BLAKE2S_FLAGS * FLAGS_SHIFT +
33+
BLAKE2S_FINALIZE_OPCODE_EXT * OPCODE_EXT_SHIFT;
34+
835
tempvar counter = 64;
9-
[ap] = initial_state, ap++;
10-
[ap] = data, ap++;
11-
[ap] = counter, ap++;
1236
[ap] = out;
37+
static_assert [ap + COUNTER_OFFSET] == counter;
38+
static_assert [fp + STATE_OFFSET] == initial_state;
39+
static_assert [fp + MESSAGE_OFFSET] == data;
1340
dw BLAKE2S_FINALIZE_INSTRUCTION;
14-
// Increment AP after blake opcode.
15-
ap += 1;
1641
return ();
1742
}
1843

0 commit comments

Comments
 (0)