Skip to content

Commit

Permalink
starknet layout & job signature verification in bootloader
Browse files Browse the repository at this point in the history
  • Loading branch information
Okm165 committed Apr 28, 2024
1 parent 0c0a9aa commit b701e92
Show file tree
Hide file tree
Showing 16 changed files with 909 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[env]
RUST_LOG = "info"
CAIRO_PATH = "cairo"
BOOTLOADER_PATH = "bootloader/recursive_with_poseidon/simple_bootloader.cairo"
BOOTLOADER_PATH = "bootloader/starknet/simple_bootloader.cairo"
BOOTLOADER_OUT_NAME = "bootloader.json"
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
OUTPUT_BUILTIN,
PEDERSEN_BUILTIN,
RANGE_CHECK_BUILTIN,
ECDSA_BUILTIN,
BITWISE_BUILTIN,
EC_OP_BUILTIN,
POSEIDON_BUILTIN,
]
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ from builtin_selection.inner_select_builtins import inner_select_builtins
from builtin_selection.select_input_builtins import select_input_builtins
from builtin_selection.validate_builtins import validate_builtins
from common.builtin_poseidon.poseidon import PoseidonBuiltin, poseidon_hash_many
from common.cairo_builtins import HashBuiltin
from common.cairo_builtins import HashBuiltin, EcOpBuiltin
from common.hash_chain import hash_chain
from common.bool import TRUE
from common.registers import get_ap, get_fp_and_pc
from common.signature import check_ecdsa_signature

const BOOTLOADER_VERSION = 0;

Expand All @@ -28,7 +30,9 @@ struct BuiltinData {
output: felt,
pedersen: felt,
range_check: felt,
ecdsa: felt,
bitwise: felt,
ec_op: felt,
poseidon: felt,
}

Expand Down Expand Up @@ -109,6 +113,21 @@ func execute_task{builtin_ptrs: BuiltinData*, self_range_check_ptr}(
use_poseidon=bool(ids.use_poseidon)), 'Computed hash does not match input.'
%}

local public_key: felt;
local signature_r: felt;
local signature_s: felt;
%{
ids.public_key = simple_bootloader_input.job.public_key
ids.signature_r = simple_bootloader_input.job.signature_r
ids.signature_s = simple_bootloader_input.job.signature_s
%}

let ec_op_ptr = cast(input_builtin_ptrs.ec_op, EcOpBuiltin*);
with ec_op_ptr {
let (res) = check_ecdsa_signature(message=hash, public_key=public_key, signature_r=signature_r, signature_s=signature_s);
assert res = TRUE;
}

// Set the program entry point, so the bootloader can later run the program.
local builtin_list: felt* = &program_header.builtin_list;
local n_builtins = program_header.n_builtins;
Expand All @@ -127,7 +146,9 @@ func execute_task{builtin_ptrs: BuiltinData*, self_range_check_ptr}(
output=output_ptr + 2,
pedersen=cast(pedersen_ptr, felt),
range_check=input_builtin_ptrs.range_check,
ecdsa=input_builtin_ptrs.ecdsa,
bitwise=input_builtin_ptrs.bitwise,
ec_op=cast(ec_op_ptr, felt),
poseidon=cast(poseidon_ptr, felt),
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from bootloader.recursive_with_poseidon.execute_task import BuiltinData, execute_task
from bootloader.starknet.execute_task import BuiltinData, execute_task
from common.cairo_builtins import HashBuiltin, PoseidonBuiltin
from common.registers import get_fp_and_pc

Expand All @@ -14,7 +14,9 @@ func run_simple_bootloader{
output_ptr: felt*,
pedersen_ptr: HashBuiltin*,
range_check_ptr,
ecdsa_ptr,
bitwise_ptr,
ec_op_ptr,
poseidon_ptr: PoseidonBuiltin*,
}() {
alloc_locals;
Expand All @@ -41,7 +43,9 @@ func run_simple_bootloader{
output=cast(output_ptr, felt),
pedersen=cast(pedersen_ptr, felt),
range_check=task_range_check_ptr,
ecdsa=ecdsa_ptr,
bitwise=bitwise_ptr,
ec_op=ec_op_ptr,
poseidon=cast(poseidon_ptr, felt),
);

Expand All @@ -50,15 +54,19 @@ func run_simple_bootloader{
output='output',
pedersen='pedersen',
range_check='range_check',
ecdsa='ecdsa',
bitwise='bitwise',
ec_op='ec_op',
poseidon='poseidon',
);

local builtin_instance_sizes: BuiltinData = BuiltinData(
output=1,
pedersen=3,
range_check=1,
ecdsa=2,
bitwise=5,
ec_op=7,
poseidon=6,
);

Expand All @@ -83,7 +91,9 @@ func run_simple_bootloader{
let output_ptr = cast(builtin_ptrs.output, felt*);
let pedersen_ptr = cast(builtin_ptrs.pedersen, HashBuiltin*);
let range_check_ptr = builtin_ptrs.range_check;
let ecdsa_ptr = builtin_ptrs.ecdsa;
let bitwise_ptr = builtin_ptrs.bitwise;
let ec_op_ptr = builtin_ptrs.ec_op;
let poseidon_ptr = cast(builtin_ptrs.poseidon, PoseidonBuiltin*);

// 'execute_tasks' runs untrusted code and uses the range_check builtin to verify that
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%builtins output pedersen range_check bitwise poseidon
%builtins output pedersen range_check ecdsa bitwise ec_op poseidon

from bootloader.recursive_with_poseidon.run_simple_bootloader import (
from bootloader.starknet.run_simple_bootloader import (
run_simple_bootloader,
)
from common.cairo_builtins import HashBuiltin, PoseidonBuiltin
Expand All @@ -10,7 +10,9 @@ func main{
output_ptr: felt*,
pedersen_ptr: HashBuiltin*,
range_check_ptr,
ecdsa_ptr,
bitwise_ptr,
ec_op_ptr,
poseidon_ptr: PoseidonBuiltin*,
}() {
%{
Expand Down
3 changes: 3 additions & 0 deletions cairo/common/bool.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Represents boolean values in Cairo.
const FALSE = 0;
const TRUE = 1;
6 changes: 3 additions & 3 deletions cairo/common/cairo_builtins.cairo
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from starkware.cairo.common.ec_point import EcPoint
from starkware.cairo.common.keccak_state import KeccakBuiltinState
from starkware.cairo.common.poseidon_state import PoseidonBuiltinState
from common.ec_point import EcPoint
from common.keccak_state import KeccakBuiltinState
from common.poseidon_state import PoseidonBuiltinState

// Specifies the hash builtin memory structure.
struct HashBuiltin {
Expand Down
Loading

0 comments on commit b701e92

Please sign in to comment.