Stack-based arbitrary-precision integers - Fast and portable with natural syntax for resource-restricted devices.
Go to file
Mamy Ratsimbazafy ddfa6c608a
Fix 32-bit failure on Nim 1.6 (#116)
* Nim 1.6 compiletime can now be affected by https://github.com/status-im/nim-stint/issues/92 ?

* seems like it happens on runtime too
2022-01-13 12:04:26 +01:00
.github/workflows CI: test with multiple Nim versions (#114) 2022-01-12 03:20:04 +01:00
benchmarks Uint - allow compile-time evaluation for all procs (#54) 2018-06-18 12:54:25 +02:00
stint RangeError are actually defect and not catchable. (#111) 2021-10-08 10:08:56 +02:00
tests Fix 32-bit failure on Nim 1.6 (#116) 2022-01-13 12:04:26 +01:00
.appveyor.yml CI: update script path 2019-08-24 21:03:10 +02:00
.gitignore fix the compilation of property_based_uint256 2018-05-03 21:10:55 +03:00
.travis.yml CI: update script path 2019-08-24 21:03:10 +02:00
LICENSE-APACHEv2 Relicense under dual Apache/MIT 2018-03-02 11:48:08 +01:00
LICENSE-MIT Relicense under dual Apache/MIT 2018-03-02 11:48:08 +01:00
README.md CI: refactor Nim compiler caching (#108) 2021-06-03 01:55:01 +02:00
stint.nim stew updates (#82) 2019-07-22 09:53:58 +02:00
stint.nimble CI: test with multiple Nim versions (#114) 2022-01-12 03:20:04 +01:00

README.md

Stint (Stack-based multiprecision integers)

Build Status (Travis) Windows build status (Appveyor) License: Apache License: MIT Stability: experimental Github action

A fast and portable stack-based multi-precision integer library in pure Nim

Main focus:

  • Portability
    • 32 and 64 bit arch
    • ARM for usage on mobile phones
    • 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 resort to assembly for portability.
  • No heap/dynamic allocation
  • Ethereum applications
    • Uint256/Int256 for Ethereum Virtual Machine usage.
    • Uint2048 for Ethereum Bloom filters
  • Ease of use:
    • Use traditional +, -, +=, etc operators like on native types
    • Representation of numbers in memory is the exact same as native types and endianness aware.
      • In practice that means that interfacing with binary blobs representing numbers from cryptographic libraries can be done with a cast if it represents a Uint256, Uint512, Uint1024, Uint2048.
    • converting to and from Hex
    • converting to and from decimal strings

License

Licensed and distributed under either of

or

at your option. This file may not be copied, modified, or distributed except according to those terms.