@@ -2,9 +2,11 @@ from builtin_selection.inner_select_builtins import inner_select_builtins
2
2
from builtin_selection.select_input_builtins import select_input_builtins
3
3
from builtin_selection.validate_builtins import validate_builtins
4
4
from common.builtin_poseidon.poseidon import PoseidonBuiltin, poseidon_hash_many
5
- from common.cairo_builtins import HashBuiltin
5
+ from common.cairo_builtins import HashBuiltin, EcOpBuiltin
6
6
from common.hash_chain import hash_chain
7
+ from common.bool import TRUE
7
8
from common.registers import get_ap, get_fp_and_pc
9
+ from common.signature import check_ecdsa_signature
8
10
9
11
const BOOTLOADER_VERSION = 0 ;
10
12
@@ -28,7 +30,9 @@ struct BuiltinData {
28
30
output: felt ,
29
31
pedersen: felt ,
30
32
range_check: felt ,
33
+ ecdsa: felt ,
31
34
bitwise: felt ,
35
+ ec_op: felt ,
32
36
poseidon: felt ,
33
37
}
34
38
@@ -109,6 +113,21 @@ func execute_task{builtin_ptrs: BuiltinData*, self_range_check_ptr}(
109
113
use_poseidon = bool (ids.use_poseidon)), ' Computed hash does not match input.'
110
114
%}
111
115
116
+ local public_key: felt ;
117
+ local signature_r: felt ;
118
+ local signature_s: felt ;
119
+ %{
120
+ ids.public_key = simple_bootloader_input.job.public_key
121
+ ids.signature_r = simple_bootloader_input.job.signature_r
122
+ ids.signature_s = simple_bootloader_input.job.signature_s
123
+ %}
124
+
125
+ let ec_op_ptr = cast (input_builtin_ptrs.ec_op, EcOpBuiltin*);
126
+ with ec_op_ptr {
127
+ let (res) = check_ecdsa_signature(message=hash, public_key=public_key, signature_r=signature_r, signature_s=signature_s);
128
+ assert res = TRUE;
129
+ }
130
+
112
131
// Set the program entry point, so the bootloader can later run the program.
113
132
local builtin_list: felt * = &program_header.builtin_list;
114
133
local n_builtins = program_header.n_builtins;
@@ -127,7 +146,9 @@ func execute_task{builtin_ptrs: BuiltinData*, self_range_check_ptr}(
127
146
output=output_ptr + 2 ,
128
147
pedersen=cast (pedersen_ptr, felt ),
129
148
range_check=input_builtin_ptrs.range_check,
149
+ ecdsa=input_builtin_ptrs.ecdsa,
130
150
bitwise=input_builtin_ptrs.bitwise,
151
+ ec_op=cast (ec_op_ptr, felt ),
131
152
poseidon=cast (poseidon_ptr, felt ),
132
153
);
133
154
0 commit comments