secp256k1.cr

a native library implementing secp256k1 purely for the crystal language.

APACHE-2.0 License

Stars
48
secp256k1.cr - lib secp256k1.cr v0.5.0 Latest Release

Published by q9f over 2 years ago

lib secp256k1.cr v0.5.0 is a complete rewrite of the secp256k1.cr shard.

notables:

  • the entire gem has been completely refactored and optimized. instead of listing all the changes, it's worth taking a look at the docs: https://q9f.github.io/secp256k1.cr/
  • the only logic change is that signatures are now deterministic as per rfc-6979: https://datatracker.ietf.org/doc/html/rfc6979
    • old signatures remain valid, though.
    • new signatures also encode a recovery id in v.
  • ethereum and bitcoin accounts have been demoted to examples as they should be handled in external libraries. they live in their own namespace now and should be considered educational material.

changes:

full changelog: https://github.com/q9f/secp256k1.cr/compare/v0.3.6...v0.5.0

secp256k1.cr - lib secp256k1.cr v0.3.6

Published by q9f about 3 years ago

lib secp256k1.cr v0.3.6 is a service release that ensures compatibility with crystal 1.1.1.

changes:

  • ci: fix github workflows #45
  • docs: regenerate crystal documentation #46
  • shards: update supported crystal version to v1.1.1 #47
secp256k1.cr - lib secp256k1.cr v0.3.5

Published by q9f over 3 years ago

lib secp256k1.cr v0.3.5 is a service release which ensures compatibility with crystal 0.36.1.

changes:

  • Shards: bump crystal to v0.36.1 (#44)
secp256k1.cr - lib secp256k1.cr v0.3.4

Published by q9f about 4 years ago

lib secp256k1.cr v0.3.4 is a service release which ensures compatibility with crystal 0.35.1.

changes:

  • Shards: bump crystal version to 0.35.1 (#43)
secp256k1.cr - lib secp256k1.cr v0.3.3

Published by q9f over 4 years ago

lib secp256k1.cr v0.3.3 is a service release which ensures compatibility with crystal 0.35.0.

changes:

  • Hash: Fix deprecated warnings (crystal 0.35) (#41)
  • Shards: bump crystal version to 0.35.0 (#42)
secp256k1.cr - lib secp256k1.cr v0.3.2

Published by q9f over 4 years ago

lib secp256k1.cr v0.3.2 is a service release which ensures compatibility with crystal 0.34.0.

changes:

  • ensure crystal 0.34 compatibility (#40)
secp256k1.cr - lib secp256k1.cr v0.3.1

Published by q9f over 4 years ago

lib secp256k1.cr v0.3.1 is a service release which ensures compatibility with crystal 0.33.0.

changes:

  • update crystal version to 0.33.0 #39
secp256k1.cr - lib secp256k1.cr v0.3.0

Published by q9f over 4 years ago

this minor release improves stability. the following api renames shall be noted:

  • EC_Point is now ECPoint
  • ECDSA_Signature is now ECDSASignature
  • all hashing functions ending with _string are renamed now overloadable with String

changes:

  • changes to code style (#34)
  • add stats to nightly workflows (#36)
  • overload hashing functions with strings (#37)
  • update contributors (#38)
secp256k1.cr - lib secp256k1.cr v0.2.2

Published by q9f almost 5 years ago

this feature release improves keypair and account management by introducing data structures for

  • Secp256k1::Keypair
  • Secp256k1::Bitcoin::Account
  • Secp256k1::Ethereum::Account
  • Secp256k1::Ethereum::Enode

changes:

  • add devp2p enode support #31
  • add mini_is_valid? #29
secp256k1.cr - lib secp256k1.cr v0.2.1

Published by q9f almost 5 years ago

this release significantly improves the documentation at https://q9f.github.io/secp256k1.cr/ and applies some minor enhancements to the exposed apis of the library, namely:

  • mini-private keys now use BASE-56 instead of BASE-57. that does not affect existing mini-private keys.
  • added Secp256k1::Bitcoin.wif_from_private_uncompressed wrapper for uncompressed wif
  • renamed Secp256k1::Bitcoin.wif_compressed_from_private to .wif_from_private_compressed
  • private keys are handled as BigInt instead of a String literals wherever possible, e.g., Secp256k1::Bitcoin.address_from_private or Secp256k1::Ethereum.address_from_private
  • constants: renamed EC_PARAM_PRIME to EC_PRIME_P
  • replaced BASE_57 in favor of BASE_56 by removing the o from the alphabet as recommended by the Bitcoin Wiki.
  • binary hashing operations now directly operate on Bytes instead of String literals, e.g., Secp256k1::Hash.sha3, .sha256, .keccak256, .ripemd160
  • added Secp256k1::Hash.ripemd160_string for RIPEMD-160 hashes on String literals to complement .sha3_string, .sha256_string, and .keccak256_string
  • added Secp256k1::Hash.base58_char to complement .base56_char
  • pass the prime through Secp256k1::Util.restore_public_key

changes:

  • improve the documentation #27
secp256k1.cr - lib secp256k1.cr v0.2.0

Published by q9f almost 5 years ago

this release refactors the entire library and entangles some of the submodules exposed by the library.

this library now exposes the following modules (in logical order):

  • Secp256k1: necessary constants and data structures
  • Secp256k1::Core: the entire core mathematics behind the elliptic curve cryptography
  • Secp256k1::Util: all tools for the handling of private-public key-pairs
  • Secp256k1::Hash: implementation of various hashing algorithms for convenience
  • Secp256k1::Signature: allows for signing messages and verifying signatures
  • Secp256k1::Bitcoin: for the generation of bitcoin addresses
  • Secp256k1::Ethereum: for the generation of ethereum addresses

docs are now published on github pages: q9f.github.io/secp256k1.cr

changes:

  • add docs to readme (#26)
  • add crystal docs (#25)
  • rename utils to util (#24)
  • refactor code with meaningful submodule namespaces (#23)
secp256k1.cr - lib secp256k1.cr v0.1.6

Published by q9f almost 5 years ago

this is a feature release that allows for basic ecdsa signature generation and verification.

changes:

  • allow to sign and verify messages #20
secp256k1.cr - lib secp256k1.cr v0.1.5

Published by q9f almost 5 years ago

this is a feature release that allows for retrieving bitcoin addresses from wallet import format by honoring the compressed byte.

changes:

  • allow for wif to address #19
secp256k1.cr - lib secp256k1.cr v0.1.4

Published by q9f almost 5 years ago

this is a feature release that allows for generation of mini private keys and proper handling of bitcoin's wallet import format.

changes:

  • try: add an example program #14
  • add support for mini private keys #16
  • add support for wallet import format #18
secp256k1.cr - lib secp256k1.cr v0.1.3

Published by q9f almost 5 years ago

this is a feature release that allows for generation of bitcoin and ethereum addresses.

changes:

  • add cryptographic hashing functions #9
  • add bitcoin and ethereum address modules #9
  • allow for export of unprefixed uncompressed keys for ethereum #9
  • add tests for hashes on bytes #9
  • implement eip-55 test cases #9
  • bind mpz_powm_sec from libgmp #11
secp256k1.cr - lib secp256k1.cr v0.1.2

Published by q9f almost 5 years ago

this is a feature release adding the ability to encode and decode the different public key formats

changes:

  • allow for converting between different public key formats #7
  • add a known private key to tests #7
  • raise if it tries to decode compressed keys as mod_exp overflows #7
secp256k1.cr - lib secp256k1.cr v0.1.1

Published by q9f almost 5 years ago

this is a bugfix release that improves performance and stability.

changes:

  • use proper integer division #6
  • ensure private keys are within the ec field size #6
  • disallow ec multiplication with invalid private keys #6
secp256k1.cr - lib secp256k1.cr v0.1.0

Published by q9f almost 5 years ago

initial release for the secp256k1 crystal library

containing:

  • the constants describing the elliptic curve #1
  • the four Secp256k1:: key functions for ec_mul, ec_add, ec_double, and ec_mod_inv #1
  • utilities to generate private and public keys #1
  • tests for the secp256k1 module #1
  • a struct for EC_Point #1
  • github actions checking format and spec #2
  • a meaningful readme #3
Package Rankings
Top 9.59% on Proxy.golang.org
Badges
Extracted from project README
Build Status Code Coverage Documentation Release Language License
Related Projects