Skip to content

cartridge-gg/cairo-sha256

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cairo-sha256

Computes SHA256 of 'input'. Inputs of arbitrary length are supported.

Usage

To use this function, split the input into (up to) 14 words of 32 bits (big endian).

To compute sha256('Hello world'), use:

input = [1214606444, 1864398703, 1919706112]

where:

1214606444 == int.from_bytes(b'Hell', 'big')
1864398703 == int.from_bytes(b'o wo', 'big')
1919706112 == int.from_bytes(b'rld\x00', 'big')  # Note the '\x00' padding.

For example:

let (hello_world) = alloc()
assert hello_world[0] = 'hell'
assert hello_world[1] = 'o wo'
assert hello_world[2] = 'rld\x00'

let (local sha256_ptr_start : felt*) = alloc()
let sha256_ptr = sha256_ptr_start
let sha256_ptr_end = sha256_ptr_start
let (hash) = sha256{sha256_ptr=sha256_ptr, sha256_ptr_end=sha256_ptr_end}(hello_world, 11)
finalize_sha256(sha256_ptr_start=sha256_ptr_start, sha256_ptr_end=sha256_ptr_end)

Output is an array of 8 32-bit words (big endian).

Note: You must call finalize_sha2() at the end of the program. Otherwise, this function is not sound and a malicious prover may return a wrong result. Note: the interface of this function may change in the future.

Development

The library uses Protostar for development.

Run tests with:

protostar test

Extension of the starkware implementation at: https://github.com/starkware-libs/cairo-examples/blob/master/sha256/sha256.cairo

About

Computes SHA256 of arbitrary length inputs.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages