diff --git a/README.md b/README.md index c4c46c7..e444a98 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,17 @@ Implementation of the zkSNARK [Pinocchio protocol](https://eprint.iacr.org/2013/ Not finished, implementing this in my free time to understand it better, so I don't have much time. +Currently allows to do the complete path with [Pinocchio protocol](https://eprint.iacr.org/2013/279.pdf) : +- compile circuuit + - parsers + - R1CS + - QAP +- generate trusted setup +- calculate witness +- generate proofs +- verify proofs + - with BN128 pairing + Current implementation status: - [x] Finite Fields (1, 2, 6, 12) operations - [x] G1 and G2 curve operations @@ -165,6 +176,9 @@ assert.True(t, VerifyProof(*circuit, setup, proof, publicSignalsVerif, true)) go test ./... -v ``` +## vim/nvim circuit syntax highlighter +For more details and installation instructions see https://github.com/arnaucube/go-snark/tree/master/vim-syntax + --- diff --git a/circuitexamples/factor.circuit b/circuitexamples/factor.circuit new file mode 100644 index 0000000..8bbb1b5 --- /dev/null +++ b/circuitexamples/factor.circuit @@ -0,0 +1,4 @@ +func test(private a, private b, public c): + d = a * b + equals(c, d) + out = 1 * 1 diff --git a/circuitexamples/function.circuit b/circuitexamples/function.circuit new file mode 100644 index 0000000..fc29edc --- /dev/null +++ b/circuitexamples/function.circuit @@ -0,0 +1,8 @@ +func test(private s0, public s1): + s2 = s0 * s0 + s3 = s2 * s0 + s4 = s3 + s0 + s5 = s4 + 5 + equals(s1, s5) + out = 1 * 1 + diff --git a/vim-syntax/README.md b/vim-syntax/README.md new file mode 100644 index 0000000..663c6d0 --- /dev/null +++ b/vim-syntax/README.md @@ -0,0 +1,10 @@ +# circuit vim syntax + +## Installation in vim/nvim using plug +Using [Plug](https://github.com/junegunn/vim-plug), add this lines into the `.vimrc`/`init.vim`: +``` +Plug 'arnaucube/go-snark' +Plug 'arnaucube/go-snark', {'rtp': 'vim-syntax'} +``` + +![screenshot-vim](https://raw.githubusercontent.com/arnaucube/go-snark/master/vim-syntax/screenshot.png "screenshot-vim") diff --git a/vim-syntax/ftdetect/go-snark-circuit.vim b/vim-syntax/ftdetect/go-snark-circuit.vim new file mode 100644 index 0000000..92ca0bd --- /dev/null +++ b/vim-syntax/ftdetect/go-snark-circuit.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.circuit set filetype=go-snark-circuit diff --git a/vim-syntax/screenshot.png b/vim-syntax/screenshot.png new file mode 100644 index 0000000..766faf5 Binary files /dev/null and b/vim-syntax/screenshot.png differ diff --git a/vim-syntax/syntax/go-snark-circuit.vim b/vim-syntax/syntax/go-snark-circuit.vim new file mode 100644 index 0000000..0a0ea81 --- /dev/null +++ b/vim-syntax/syntax/go-snark-circuit.vim @@ -0,0 +1,61 @@ +" Vim syntax file +" Language: go-snark-circuit +" URL: https://github.com/arnaucube/go-snark/blob/master/vim-syntax/syntax/go-snark-circuit.vim + +if !exists("main_syntax") + " quit when a syntax file was already loaded + if exists("b:current_syntax") + finish + endif + let main_syntax = 'go-snark-circuit' +elseif exists("b:current_syntax") && b:current_syntax == "go-snark-circuit" + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword goSnarkCircuitCommentTodo TODO FIXME XXX TBD contained +syn match goSnarkCircuitLineComment "\/\/.*" contains=@Spell,goSnarkCircuitCommentTodo +syn match goSnarkCircuitSpecialCharacter "'\\.'" +syn match goSnarkCircuitNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" +syn match goSnarkCircuitOpSymbols "+\|-\|\*\|:\|)\|(\|=" +syn keyword goSnarkCircuitPrivatePublic private public +syn keyword goSnarkCircuitOut out +syn keyword goSnarkCircuitEquals equals +syn keyword goSnarkCircuitFunction func +syn match goSnarkCircuitFuncCall /\<\K\k*\ze\s*(/ +syn keyword goSnarkCircuitPrivate private nextgroup=goSnarkCircuitInputName skipwhite +syn keyword goSnarkCircuitPublic public nextgroup=goSnarkCircuitInputName skipwhite +syn match goSnarkCircuitInputName '\i\+' contained +syn match goSnarkCircuitBraces "[{}\[\]]" +syn match goSnarkCircuitParens "[()]" + +syn sync fromstart +syn sync maxlines=100 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet +hi def link goSnarkCircuitLineComment Comment +hi def link goSnarkCircuitCommentTodo Todo +hi def link goSnarkCircuitSpecialCharacter Special +hi def link goSnarkCircuitNumber Number +hi def link goSnarkCircuitOpSymbols Operator +hi def link goSnarkCircuitFuncCall Function +hi def link goSnarkCircuitEquals Identifier +hi def link goSnarkCircuitFunction Keyword +hi def link goSnarkCircuitBraces Function +hi def link goSnarkCircuitPrivate Keyword +hi def link goSnarkCircuitPublic Keyword +hi def link goSnarkCircuitInputName Special +hi def link goSnarkCircuitOut Special +hi def link goSnarkCircuitPrivatePublic Keyword + +let b:current_syntax = "go-snark-circuit" +if main_syntax == 'go-snark-circuit' + unlet main_syntax +endif +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8