|
1 | 1 | from starkware.cairo.common.alloc import alloc
|
2 | 2 | from starkware.cairo.common.cairo_blake2s.blake2s import blake_with_opcode
|
3 |
| -from starkware.cairo.common.cairo_blake2s.blake2s import BLAKE2S_FINALIZE_INSTRUCTION |
4 | 3 |
|
5 | 4 | // Computes blake2s of `input` of size 16 felts, representing 32 bits each.
|
6 | 5 | // The initial state is the standard BLAKE2s IV XORed with the parameter block P[0] = 0x01010020.
|
7 | 6 | 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 | +
|
8 | 35 | tempvar counter = 64;
|
9 |
| - [ap] = initial_state, ap++; |
10 |
| - [ap] = data, ap++; |
11 |
| - [ap] = counter, ap++; |
12 | 36 | [ap] = out;
|
| 37 | + static_assert [ap + COUNTER_OFFSET] == counter; |
| 38 | + static_assert [fp + STATE_OFFSET] == initial_state; |
| 39 | + static_assert [fp + MESSAGE_OFFSET] == data; |
13 | 40 | dw BLAKE2S_FINALIZE_INSTRUCTION;
|
14 |
| - // Increment AP after blake opcode. |
15 |
| - ap += 1; |
16 | 41 | return ();
|
17 | 42 | }
|
18 | 43 |
|
|
0 commit comments