josibake
59c0ece0a7
fuzz: replace hardcoded numbers for bech32 limits
...
Use bech32::CharLimit::BECH32 and bech32::CHECKSUM_SIZE instead of
hardcoded values. This is a follow-up fix for #34007
(where this file was missed)
2024-08-06 11:03:31 +02:00
Lőrinc
07f64177a4
Reduce memory copying operations in bech32 encode
...
Here I've reduced the memory reallocations and copying operations in bech32 encode, making it ~15% faster.
make && ./src/bench/bench_bitcoin --filter='Bech32Encode' --min-time=1000
Before:
| ns/byte | byte/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 19.97 | 50,074,562.72 | 0.1% | 1.06 | `Bech32Encode`
After:
| ns/byte | byte/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 17.33 | 57,687,668.20 | 0.1% | 1.10 | `Bech32Encode`
Co-authored-by: josibake <josibake@protonmail.com>
2024-06-05 13:18:13 +02:00
Lőrinc
d5ece3c4b5
Reserve hrp memory in Decode and LocateErrors
2024-06-05 12:46:39 +02:00
Lőrinc
7f3f6c6dc8
refactor: replace hardcoded numbers
...
Replace ExpandHRP with a PreparePolynomialCoefficients function. Instead
of using a hardcoded value for the size of the array (90 in this case)
and a hardcoded value for the checksum, use the actual values vector and
define checksum size as a constexpr. Use the new CHECKSUM_SIZE
throughout instead 6.
Co-authored-by: Lőrinc <pap.lorinc@gmail.com>
2024-05-21 09:14:55 +02:00
josibake
5676aec1e1
refactor: Model the bech32 charlimit as an Enum
...
Bech32(m) was defined with a 90 character limit so that certain
guarantees for error detection could be made for segwit addresses.
However, there is nothing about the encoding scheme itself that requires
a limit and in practice bech32(m) has been used without the 90 char
limit (e.g. lightning invoices).
Further, increasing the character limit doesn't do away with error
detection, it simply lessons the guarantees.
Model charlimit as an Enum, so that if a different address scheme is
using bech32(m), the character limit for that address scheme can be
used, rather than always using the 90 charlimit defined for segwit
addresses.
upate comment
2024-05-13 12:07:47 +02:00
Hennadii Stepanov
306ccd4927
scripted-diff: Bump copyright headers
...
-BEGIN VERIFY SCRIPT-
./contrib/devtools/copyright_header.py update ./
-END VERIFY SCRIPT-
Commits of previous years:
- 2021: f47dda2c58
- 2020: fa0074e2d8
- 2019: aaaaad6ac9
2022-12-24 23:49:50 +00:00
Hennadii Stepanov
5c5b85d0e7
refactor: Make 64-bit shift explicit
...
Also this change enables MSVC warning C4334 for all codebase.
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4334
2022-10-04 21:49:07 +01:00
MarcoFalke
aaaa4dbab4
Avoid implicit-integer-sign-change in bech32.cpp
2022-02-25 09:43:54 +01:00
Samuel Dobson
a4fe70171b
Make Bech32 LocateErrors return error list rather than using out-arg
2021-12-06 14:17:41 +13:00
Samuel Dobson
2fa4fd1961
Use std::iota instead of manually pushing range
2021-12-01 11:01:20 +13:00
Samuel Dobson
405c96fc9f
Use bounds-checked array lookups in Bech32 error detection code
2021-12-01 11:01:20 +13:00
Samuel Dobson
28d9c2857f
Simplify encoding of e in GF(1024) tables to (1,0)
...
This follows PR 64 of the sipa/bech32 repo.
2021-12-01 11:01:20 +13:00
Samuel Dobson
14358a029d
Replace GF1024 tables and syndrome constants with compile-time generated constexprs.
2021-12-01 11:01:20 +13:00
Samuel Dobson
c8b9a224e7
Report encoding type in bech32 error message
2021-11-23 15:48:59 +13:00
Samuel Dobson
bb4d3e9b97
Address review comments for Bech32 error validation
2021-11-23 15:48:59 +13:00
Samuel Dobson
88cc481092
Modify copyright header on Bech32 code
2021-10-12 12:03:14 +13:00
Samuel Dobson
5599813b80
Add lots of comments to Bech32
2021-10-12 12:03:14 +13:00
Samuel Dobson
b62b67e06c
Add Bech32 error location function
2021-10-12 12:03:14 +13:00
Pieter Wuille
b8cd2a4292
Add references for the generator/constant used in Bech32(m)
2021-08-20 15:49:50 -04:00
Fabian Jahr
03346022d6
naming nits
2021-03-17 17:59:22 -07:00
Pieter Wuille
da2bb6976d
Implement Bech32m encoding/decoding
2021-03-15 17:26:35 -07:00
Pieter Wuille
e65e61c812
Add some general std::vector utility functions
...
Added are:
* Vector(arg1,arg2,arg3,...) constructs a vector with the specified
arguments as elements. The vector's type is derived from the
arguments. If some of the arguments are rvalue references, they
will be moved into place rather than copied (which can't be achieved
using list initialization).
* Cat(vector1,vector2) returns a concatenation of the two vectors,
efficiently moving elements when relevant.
Vector generalizes (and replaces) the Singleton function in
src/descriptor.cpp, and Cat replaces the Cat function in bech32.cpp
2019-10-16 08:56:57 -07:00
Samuel Dobson
2457aea83c
Assert that the HRP is lowercase in Bech32::Encode
2019-09-05 13:25:11 +12:00
practicalswift
f34c8c466a
Make objects in range declarations immutable by default. Avoid unnecessary copying of objects in range declarations.
2018-08-27 18:19:33 +02:00
murrayn
60f61f9952
Tighten up bech32::Decode(); add tests.
2018-04-12 17:52:33 -07:00
MeshCollider
1a445343f6
scripted-diff: Replace #include "" with #include <> (ryanofsky)
...
-BEGIN VERIFY SCRIPT-
for f in \
src/*.cpp \
src/*.h \
src/bench/*.cpp \
src/bench/*.h \
src/compat/*.cpp \
src/compat/*.h \
src/consensus/*.cpp \
src/consensus/*.h \
src/crypto/*.cpp \
src/crypto/*.h \
src/crypto/ctaes/*.h \
src/policy/*.cpp \
src/policy/*.h \
src/primitives/*.cpp \
src/primitives/*.h \
src/qt/*.cpp \
src/qt/*.h \
src/qt/test/*.cpp \
src/qt/test/*.h \
src/rpc/*.cpp \
src/rpc/*.h \
src/script/*.cpp \
src/script/*.h \
src/support/*.cpp \
src/support/*.h \
src/support/allocators/*.h \
src/test/*.cpp \
src/test/*.h \
src/wallet/*.cpp \
src/wallet/*.h \
src/wallet/test/*.cpp \
src/wallet/test/*.h \
src/zmq/*.cpp \
src/zmq/*.h
do
base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f
done
-END VERIFY SCRIPT-
2017-11-16 08:23:01 +13:00
Pieter Wuille
8fd2267053
Import Bech32 C++ reference code & tests
...
This includes a reformatted version of the Bech32 reference code
(see https://github.com/sipa/bech32/tree/master/ref/c%2B%2B ), with
extra documentation.
2017-09-28 16:02:16 -07:00