constantine
cps
constantine | cps | |
---|---|---|
14 | 9 | |
254 | 194 | |
- | 0.5% | |
8.4 | 7.9 | |
6 days ago | 14 days ago | |
Nim | Nim | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
constantine
-
A beginner's guide to constant-time cryptography (2017)
Percival cache attacks on Hyperthreading.
I go over some examples here: https://github.com/mratsim/constantine/issues/358#issuecomme...
-
D Programming Language
`when myCondition():` instead of `if myCondition:` is done at compile-time.
Alternatively you can use a `static:` code block to force compile time evaluation. Or tag a function {.compileTime.} or tag function inputs with `static` modifier.
It is possible to create a compiler or an assembler running fully in Nim macros as well:
- https://github.com/mratsim/constantine/blob/master/constanti... (all that file runs at compile-time)
You can also implement Continuation-Passing-Style transformation at compile-time:
- Fast constant-time pairing or elliptic curve based cryptography (Nim/C)
-
Matrix Multiplication Using Only Addition
At a glance this sounds like a re-discovery of addition chains and using them to construct Pippenger algorithm. But applied to matrices instead of group elements.
See: https://github.com/mratsim/constantine/issues/37
-
Elliptic Curve Cryptography Explained
I usually explain extension fields as similar to complex numbers with regards to reals.
I've collected a lot of extension fields references while working on my own implementation: https://github.com/mratsim/constantine/tree/master/constanti...
The best likely being
- Arithmetic of Finite Fields
- Constant-Time Big Numbers: An Introduction
-
just a question that has been lingering on my mind
Regarding your first question, you don't need to attack the hard-drive, for non constant-time crypto you can read power consumption or electromagnetic traces when the secret key is used to reconstruct it: - https://github.com/mratsim/constantine/wiki/Constant-time-arithmetics
-
Const [pdf]
Unfortunate name collision with my constant-time pairing-based cryptography library :/.
https://github.com/mratsim/constantine
-
DSL for Zero Knowledge Proofs
KZG for sure yes, I actually already started implementing them: https://github.com/mratsim/constantine/tree/c2d716b/research/kzg_poly_commit
-
How is Elliptic Curve Cryptography Encryption Fast?
I have a small write-up on various details of elliptic curve crypto implementation here: https://github.com/mratsim/constantine/tree/master/constantine/elliptic
cps
-
Nim CPS: compile-time continuations
This'll get you closer: https://github.com/nim-works/cps
Sorry, I was in a hurry.
-
D Programming Language
- https://github.com/nim-works/cps
Or a neural network DSL or for a self-contained example, einsum:
-
NIR: Nim Intermediate Representation
There has been a more-or-less working CPS implementation for Nim for a few years now,
https://github.com/nim-works/cps
https://github.com/nim-works/cps/tree/master/docs
Nobody seems to care though, as it has gained no traction at all and it has been mostly ignored by the core team.
-
Nim v2.0 Released
Ones that have not been mentioned so far:
nlvm is an unofficial LLVM backend: https://github.com/arnetheduck/nlvm
npeg lets you write PEGs inline in almost normal PEG notation: https://github.com/zevv/npeg
futhark provides for much more automatic C interop: https://github.com/PMunch/futhark
nimpy allows calling Python code from Nim and vice versa: https://github.com/yglukhov/nimpy
questionable provides a lot of syntax sugar surrounding Option/Result types: https://github.com/codex-storage/questionable
ratel is a framework for embedded programming: https://github.com/PMunch/ratel
cps allows arbitrary procedure rewriting to continuation passing style: https://github.com/nim-works/cps
chronos is an alternative async/await backend: https://github.com/status-im/nim-chronos
zero-functional fixes some inefficiencies when chaining list operations: https://github.com/zero-functional/zero-functional
owlkettle is a declarative macro-oriented library for GTK: https://github.com/can-lehmann/owlkettle
A longer list can be found at https://github.com/ringabout/awesome-nim.
- CPS – Also Known as Continuation-Passing Style – For Nim
-
In Defense of Async: Function Colors Are Rusty
I think the CPS attempt in Nim could do this
https://github.com/nim-works/cps
-
Nim Version 1.6 Released
* Goroutines are probably a lot more easier to use. Work is being done to make Nim even better in that area: https://github.com/nim-works/cps but don't expect it soonish.
* I feel like Go has less 'edge cases', but the Nim compiler is steadily getting more stable, especially consider it's not backed up by a major company!
* Metaprogramming is really powerful, but not beginner friendly. The documentation says use macros when necessary, but personally I don't think that really happens in practice.
The advantages by far outweigh the disadvantages, especially if you are looking for a clean Go alternative(except maaaaaaybeee web application).
-
Looking for more example of nim's coroutines
and the fifth: https://github.com/disruptek/cps
What are some alternatives?
blst - Multilingual BLS12-381 signature library
nim-chronos - Chronos - An efficient library for asynchronous programming
nim-stint - Stack-based arbitrary-precision integers - Fast and portable with natural syntax for resource-restricted devices.
treesitter-unit - A Neovim plugin to deal with treesitter units
secp256k1 - Optimized C library for EC operations on curve secp256k1
httpbeast - A highly performant, multi-threaded HTTP 1.1 server written in Nim.
noir - Noir is a domain specific language for zero knowledge proofs
p-map - Map over promises concurrently
Practical-Cryptography-for-Developers-Book - Practical Cryptography for Developers: Hashes, MAC, Key Derivation, DHKE, Symmetric and Asymmetric Ciphers, Public Key Cryptosystems, RSA, Elliptic Curves, ECC, secp256k1, ECDH, ECIES, Digital Signatures, ECDSA, EdDSA
jester - A sinatra-like web framework for Nim.
mbedTLS - An open source, portable, easy to use, readable and flexible TLS library, and reference implementation of the PSA Cryptography API. Releases are on a varying cadence, typically around 3 - 6 months between releases.
godot-nim - Nim bindings for Godot Engine