mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-05-22 09:49:26 +00:00
fix arg order for memory version
This commit is contained in:
parent
4d8f618fd2
commit
2f97ad4416
@ -1,18 +1,20 @@
|
|||||||
/// Variables beginning with _ are in memory
|
/// Variables beginning with _ are in memory
|
||||||
///
|
///
|
||||||
/// def ripemd160(_input):
|
/// def ripemd160(_input):
|
||||||
/// state, count, _buffer = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0], 0, [0]*64
|
/// STATE, count, _buffer = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0], 0, [0]*64
|
||||||
/// state, count, _buffer = ripemd_update(state, count, _buffer, len(input) , bytes = _input )
|
/// STATE, count, _buffer = ripemd_update(STATE, count, _buffer, len(input) , bytes = _input )
|
||||||
/// state, count, _buffer = ripemd_update(state, count, _buffer, padlength(len(input)), bytes = [0x80]+[0]*63)
|
/// STATE, count, _buffer = ripemd_update(STATE, count, _buffer, padlength(len(input)), bytes = [0x80]+[0]*63)
|
||||||
/// state, count, _buffer = ripemd_update(state, count, _buffer, 8, bytes = size(len(_input)))
|
/// STATE, count, _buffer = ripemd_update(STATE, count, _buffer, 8, bytes = size(len(_input)))
|
||||||
/// return process(state)
|
/// return process(STATE)
|
||||||
///
|
///
|
||||||
/// ripemd is called on a stack with ADDR and length
|
/// ripemd is called on a stack with ADDR and length
|
||||||
/// ripemd_update will receive and return the stack in the form:
|
/// ripemd_stack is called on a stack with length, followed by the input bytes
|
||||||
|
///
|
||||||
|
/// ripemd_update receives and return the stack in the form:
|
||||||
/// stack: STATE, count, length, virt
|
/// stack: STATE, count, length, virt
|
||||||
/// where virt is the virtual address of the bytes argument
|
/// where virt is the virtual address of the bytes argument
|
||||||
|
|
||||||
global ripemd_alt:
|
global ripemd_stack:
|
||||||
// stack: length, INPUT
|
// stack: length, INPUT
|
||||||
%stack (length) -> (64, length, 0x80, 63, length, length)
|
%stack (length) -> (64, length, 0x80, 63, length, length)
|
||||||
// stack: 64, length, 0x80, 63, length, length, INPUT
|
// stack: 64, length, 0x80, 63, length, length, INPUT
|
||||||
@ -24,8 +26,8 @@ global ripemd_alt:
|
|||||||
|
|
||||||
global ripemd:
|
global ripemd:
|
||||||
// stack: ADDR, length
|
// stack: ADDR, length
|
||||||
%stack (ADDR: 3, length) -> (64, length, 0x80, 63, ADDR, length, length)
|
%stack (ADDR: 3, length) -> (64, length, 0x80, 63, length, ADDR, length)
|
||||||
// stack: 64, length, 0x80, 63, ADDR, length, length
|
// stack: 64, length, 0x80, 63, length, ADDR, length
|
||||||
%jump(ripemd_storage) // stores the following into memory
|
%jump(ripemd_storage) // stores the following into memory
|
||||||
// init _buffer at virt 0 [consumes 64]
|
// init _buffer at virt 0 [consumes 64]
|
||||||
// store _size at virt 64 [consumes length]
|
// store _size at virt 64 [consumes length]
|
||||||
|
|||||||
@ -28,14 +28,15 @@ store_size:
|
|||||||
%jump(store_padding)
|
%jump(store_padding)
|
||||||
|
|
||||||
store_padding:
|
store_padding:
|
||||||
// stack: i (init 63)
|
// stack: i [init 63], length
|
||||||
%store_zeros(136, store_padding)
|
%store_zeros(136, store_padding)
|
||||||
|
// stack: length
|
||||||
DUP1
|
DUP1
|
||||||
%jumpi(store_input_alt)
|
%jumpi(store_input_stack)
|
||||||
POP
|
POP
|
||||||
%jump(ripemd_init)
|
%jump(ripemd_init)
|
||||||
|
|
||||||
store_input_alt:
|
store_input_stack:
|
||||||
// stack: rem, length, REM_INP
|
// stack: rem, length, REM_INP
|
||||||
%stack (rem, length, head) -> (length, rem, 136, head, rem, length)
|
%stack (rem, length, head) -> (length, rem, 136, head, rem, length)
|
||||||
SUB
|
SUB
|
||||||
@ -46,38 +47,36 @@ store_input_alt:
|
|||||||
%sub_const(1)
|
%sub_const(1)
|
||||||
DUP1
|
DUP1
|
||||||
// stack: rem - 1, rem - 1, length, REM_INP
|
// stack: rem - 1, rem - 1, length, REM_INP
|
||||||
%jumpi(store_input_alt)
|
%jumpi(store_input_stack)
|
||||||
// stack: 0, length
|
// stack: 0, length
|
||||||
POP
|
POP
|
||||||
%jump(ripemd_init)
|
%jump(ripemd_init)
|
||||||
|
|
||||||
store_input:
|
store_input:
|
||||||
// stack: ADDR , rem , length
|
// stack: rem , ADDR , length
|
||||||
DUP3
|
DUP4
|
||||||
DUP3
|
DUP4
|
||||||
DUP3
|
DUP4
|
||||||
MLOAD_GENERAL
|
MLOAD_GENERAL
|
||||||
// stack: byte, ADDR , rem , length
|
// stack: byte, rem , ADDR , length
|
||||||
DUP5
|
DUP2
|
||||||
DUP7
|
DUP7
|
||||||
SUB
|
SUB
|
||||||
%add_const(136)
|
%add_const(136)
|
||||||
// stack: offset, byte, ADDR , rem , length
|
// stack: offset, byte, rem , ADDR , length
|
||||||
%mstore_kernel_general
|
%mstore_kernel_general
|
||||||
// stack: ADDR , rem , length
|
// stack: rem , ADDR , length
|
||||||
SWAP2
|
|
||||||
%add_const(1)
|
|
||||||
SWAP2
|
|
||||||
// stack: ADDR + 1, rem , length
|
|
||||||
SWAP3
|
|
||||||
%sub_const(1)
|
%sub_const(1)
|
||||||
|
// stack: rem-1, ADDR , length
|
||||||
SWAP3
|
SWAP3
|
||||||
// stack: ADDR + 1, rem - 1, length
|
%add_const(1)
|
||||||
DUP4
|
SWAP3
|
||||||
|
// stack: rem-1, ADDR+1, length
|
||||||
|
DUP2
|
||||||
%jumpi(store_input)
|
%jumpi(store_input)
|
||||||
// stack: ADDR , 0 , length
|
// stack: 0 , ADDR , length
|
||||||
%pop4
|
%pop4
|
||||||
// stack: length
|
// stack: length
|
||||||
%jump(ripemd_init)
|
%jump(ripemd_init)
|
||||||
|
|
||||||
%macro store_zeros(N, label)
|
%macro store_zeros(N, label)
|
||||||
|
|||||||
@ -43,7 +43,7 @@ fn test_ripemd() -> Result<()> {
|
|||||||
let expected = U256::from(y);
|
let expected = U256::from(y);
|
||||||
|
|
||||||
let kernel = combined_kernel();
|
let kernel = combined_kernel();
|
||||||
let initial_offset = kernel.global_labels["ripemd_alt"];
|
let initial_offset = kernel.global_labels["ripemd_stack"];
|
||||||
let initial_stack: Vec<U256> = input.iter().map(|&x| U256::from(x as u8)).rev().collect();
|
let initial_stack: Vec<U256> = input.iter().map(|&x| U256::from(x as u8)).rev().collect();
|
||||||
let final_stack: Vec<U256> = run_with_kernel(&kernel, initial_offset, initial_stack)?
|
let final_stack: Vec<U256> = run_with_kernel(&kernel, initial_offset, initial_stack)?
|
||||||
.stack()
|
.stack()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user