- Notifications
You must be signed in to change notification settings - Fork11
Stack-based arbitrary-precision integers - Fast and portable with natural syntax for resource-restricted devices.
License
Apache-2.0, MIT licenses found
Licenses found
status-im/nim-stint
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
stint
provides efficient and convenient N-bit integers for Nim, for arbitrarysizes ofN
decided at compile time with an interface similar to toint64
/uint64
.
In addition to basic integer operations,stint
also contains primtives formodular arithmetic, endian conversion, basic I/O, bit twiddling etc.
stint
integers, like theirintXX
/uintXX
counterpart in Nim are stack-basedvalues, meaning that they are naturally allocation-free and have value-basedsemantics.
import stintfuncaddmul(a, b, c:UInt256):UInt256= a* b+ cechoaddmul(u256"100000000000000000000000000000",u256"1",u256"2")
- Portability
- 32 and 64 bit
- ARM/x86/x86_64 extensively tested
- Additionally RISC-V and MIPS for open hardware and low power IoT devices.
- Speed, library is carefully tuned to produce the best assembly given the current compilers.However, the library itself does not require assembly for portability.
- No heap/dynamic allocation
- Ease of use:
- Use traditional
+
,-
,+=
, etc operators like on native types - converting to and from raw byte BigInts (also called octet string in IETF specs)
- converting to and from Hex
- converting to and from decimal strings
- Use traditional
Non-priorities include:
- constant-time operation (not suitable for certain kinds of cryptography out of the box)
- runtime precision
- constantine - modular arithmetic and elliptic curve operations focusing on cryptography and constant-time implementation
- N2472 -
_ExtInt(N)
- native arbitrary precision integers for C - stew - helpers and utilities for ordinary Nim integers (
endians2
,bitops2
etc)
Licensed and distributed under either of
- MIT license:LICENSE-MIT orhttp://opensource.org/licenses/MIT
or
- Apache License, Version 2.0, (LICENSE-APACHEv2 orhttp://www.apache.org/licenses/LICENSE-2.0)
at your option. This file may not be copied, modified, or distributed except according to those terms.
About
Stack-based arbitrary-precision integers - Fast and portable with natural syntax for resource-restricted devices.