@aztec-labs/foundation 6.0.0-nightly.20260829
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dest/array/array.d.ts +68 -0
- package/dest/array/array.d.ts.map +1 -0
- package/dest/array/array.js +100 -0
- package/dest/array/index.d.ts +3 -0
- package/dest/array/index.d.ts.map +1 -0
- package/dest/array/index.js +2 -0
- package/dest/array/sorted_array.d.ts +15 -0
- package/dest/array/sorted_array.d.ts.map +1 -0
- package/dest/array/sorted_array.js +109 -0
- package/dest/async-map/index.d.ts +13 -0
- package/dest/async-map/index.d.ts.map +1 -0
- package/dest/async-map/index.js +17 -0
- package/dest/async-pool/index.d.ts +3 -0
- package/dest/async-pool/index.d.ts.map +1 -0
- package/dest/async-pool/index.js +48 -0
- package/dest/bigint/index.d.ts +7 -0
- package/dest/bigint/index.d.ts.map +1 -0
- package/dest/bigint/index.js +15 -0
- package/dest/bigint-buffer/index.d.ts +40 -0
- package/dest/bigint-buffer/index.d.ts.map +1 -0
- package/dest/bigint-buffer/index.js +81 -0
- package/dest/branded-types/block_number.d.ts +56 -0
- package/dest/branded-types/block_number.d.ts.map +1 -0
- package/dest/branded-types/block_number.js +89 -0
- package/dest/branded-types/buffer32_hash.d.ts +27 -0
- package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
- package/dest/branded-types/buffer32_hash.js +12 -0
- package/dest/branded-types/checkpoint_number.d.ts +60 -0
- package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
- package/dest/branded-types/checkpoint_number.js +88 -0
- package/dest/branded-types/epoch.d.ts +42 -0
- package/dest/branded-types/epoch.d.ts.map +1 -0
- package/dest/branded-types/epoch.js +59 -0
- package/dest/branded-types/index.d.ts +8 -0
- package/dest/branded-types/index.d.ts.map +1 -0
- package/dest/branded-types/index.js +6 -0
- package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
- package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
- package/dest/branded-types/index_within_checkpoint.js +59 -0
- package/dest/branded-types/slot.d.ts +45 -0
- package/dest/branded-types/slot.d.ts.map +1 -0
- package/dest/branded-types/slot.js +62 -0
- package/dest/branded-types/types.d.ts +5 -0
- package/dest/branded-types/types.d.ts.map +1 -0
- package/dest/branded-types/types.js +1 -0
- package/dest/buffer/buffer16.d.ts +82 -0
- package/dest/buffer/buffer16.d.ts.map +1 -0
- package/dest/buffer/buffer16.js +102 -0
- package/dest/buffer/buffer32.d.ts +54 -0
- package/dest/buffer/buffer32.d.ts.map +1 -0
- package/dest/buffer/buffer32.js +83 -0
- package/dest/buffer/index.d.ts +4 -0
- package/dest/buffer/index.d.ts.map +1 -0
- package/dest/buffer/index.js +3 -0
- package/dest/buffer/utils.d.ts +3 -0
- package/dest/buffer/utils.d.ts.map +1 -0
- package/dest/buffer/utils.js +7 -0
- package/dest/collection/array.d.ts +135 -0
- package/dest/collection/array.d.ts.map +1 -0
- package/dest/collection/array.js +302 -0
- package/dest/collection/index.d.ts +5 -0
- package/dest/collection/index.d.ts.map +1 -0
- package/dest/collection/index.js +4 -0
- package/dest/collection/lru_map.d.ts +41 -0
- package/dest/collection/lru_map.d.ts.map +1 -0
- package/dest/collection/lru_map.js +119 -0
- package/dest/collection/lru_set.d.ts +35 -0
- package/dest/collection/lru_set.d.ts.map +1 -0
- package/dest/collection/lru_set.js +95 -0
- package/dest/collection/object.d.ts +30 -0
- package/dest/collection/object.d.ts.map +1 -0
- package/dest/collection/object.js +57 -0
- package/dest/committable/committable.d.ts +28 -0
- package/dest/committable/committable.d.ts.map +1 -0
- package/dest/committable/committable.js +36 -0
- package/dest/committable/index.d.ts +2 -0
- package/dest/committable/index.d.ts.map +1 -0
- package/dest/committable/index.js +1 -0
- package/dest/config/env_var.d.ts +2 -0
- package/dest/config/env_var.d.ts.map +1 -0
- package/dest/config/env_var.js +1 -0
- package/dest/config/index.d.ts +154 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +272 -0
- package/dest/config/network_config.d.ts +28 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +14 -0
- package/dest/config/network_name.d.ts +3 -0
- package/dest/config/network_name.d.ts.map +1 -0
- package/dest/config/network_name.js +19 -0
- package/dest/config/parse-env.d.ts +3 -0
- package/dest/config/parse-env.d.ts.map +1 -0
- package/dest/config/parse-env.js +7 -0
- package/dest/config/secret_value.d.ts +28 -0
- package/dest/config/secret_value.d.ts.map +1 -0
- package/dest/config/secret_value.js +36 -0
- package/dest/crypto/aes128/index.d.ts +33 -0
- package/dest/crypto/aes128/index.d.ts.map +1 -0
- package/dest/crypto/aes128/index.js +71 -0
- package/dest/crypto/bls/bn254_keystore.d.ts +129 -0
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
- package/dest/crypto/bls/bn254_keystore.js +206 -0
- package/dest/crypto/bls/index.d.ts +13 -0
- package/dest/crypto/bls/index.d.ts.map +1 -0
- package/dest/crypto/bls/index.js +87 -0
- package/dest/crypto/bn254/index.d.ts +39 -0
- package/dest/crypto/bn254/index.d.ts.map +1 -0
- package/dest/crypto/bn254/index.js +56 -0
- package/dest/crypto/ecdsa/index.d.ts +39 -0
- package/dest/crypto/ecdsa/index.d.ts.map +1 -0
- package/dest/crypto/ecdsa/index.js +102 -0
- package/dest/crypto/ecdsa/signature.d.ts +69 -0
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -0
- package/dest/crypto/ecdsa/signature.js +92 -0
- package/dest/crypto/grumpkin/index.d.ts +42 -0
- package/dest/crypto/grumpkin/index.d.ts.map +1 -0
- package/dest/crypto/grumpkin/index.js +160 -0
- package/dest/crypto/keccak/index.d.ts +26 -0
- package/dest/crypto/keccak/index.d.ts.map +1 -0
- package/dest/crypto/keccak/index.js +248 -0
- package/dest/crypto/keys/index.d.ts +4 -0
- package/dest/crypto/keys/index.d.ts.map +1 -0
- package/dest/crypto/keys/index.js +34 -0
- package/dest/crypto/pedersen/index.d.ts +2 -0
- package/dest/crypto/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/pedersen/index.js +1 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts +9 -0
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.noble.js +558 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +19 -0
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -0
- package/dest/crypto/pedersen/pedersen.wasm.js +51 -0
- package/dest/crypto/poseidon/index.d.ts +23 -0
- package/dest/crypto/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/poseidon/index.js +71 -0
- package/dest/crypto/random/index.d.ts +23 -0
- package/dest/crypto/random/index.d.ts.map +1 -0
- package/dest/crypto/random/index.js +38 -0
- package/dest/crypto/random/randomness_singleton.d.ts +24 -0
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -0
- package/dest/crypto/random/randomness_singleton.js +55 -0
- package/dest/crypto/schnorr/index.d.ts +32 -0
- package/dest/crypto/schnorr/index.d.ts.map +1 -0
- package/dest/crypto/schnorr/index.js +60 -0
- package/dest/crypto/schnorr/signature.d.ts +48 -0
- package/dest/crypto/schnorr/signature.d.ts.map +1 -0
- package/dest/crypto/schnorr/signature.js +77 -0
- package/dest/crypto/secp256k1/index.d.ts +30 -0
- package/dest/crypto/secp256k1/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1/index.js +121 -0
- package/dest/crypto/secp256k1-signer/index.d.ts +3 -0
- package/dest/crypto/secp256k1-signer/index.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/index.js +2 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +24 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/secp256k1_signer.js +30 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts +102 -0
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -0
- package/dest/crypto/secp256k1-signer/utils.js +196 -0
- package/dest/crypto/sha256/index.d.ts +37 -0
- package/dest/crypto/sha256/index.d.ts.map +1 -0
- package/dest/crypto/sha256/index.js +208 -0
- package/dest/crypto/sha512/index.d.ts +9 -0
- package/dest/crypto/sha512/index.d.ts.map +1 -0
- package/dest/crypto/sha512/index.js +12 -0
- package/dest/crypto/signature/index.d.ts +17 -0
- package/dest/crypto/signature/index.d.ts.map +1 -0
- package/dest/crypto/signature/index.js +3 -0
- package/dest/crypto/sync/index.d.ts +3 -0
- package/dest/crypto/sync/index.d.ts.map +1 -0
- package/dest/crypto/sync/index.js +4 -0
- package/dest/crypto/sync/pedersen/index.d.ts +19 -0
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -0
- package/dest/crypto/sync/pedersen/index.js +45 -0
- package/dest/crypto/sync/poseidon/index.d.ts +23 -0
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -0
- package/dest/crypto/sync/poseidon/index.js +60 -0
- package/dest/curves/bls12/field.d.ts +148 -0
- package/dest/curves/bls12/field.d.ts.map +1 -0
- package/dest/curves/bls12/field.js +357 -0
- package/dest/curves/bls12/index.d.ts +3 -0
- package/dest/curves/bls12/index.d.ts.map +1 -0
- package/dest/curves/bls12/index.js +2 -0
- package/dest/curves/bls12/point.d.ts +229 -0
- package/dest/curves/bls12/point.d.ts.map +1 -0
- package/dest/curves/bls12/point.js +400 -0
- package/dest/curves/bn254/field.d.ts +185 -0
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/curves/bn254/field.js +420 -0
- package/dest/curves/bn254/index.d.ts +3 -0
- package/dest/curves/bn254/index.d.ts.map +1 -0
- package/dest/curves/bn254/index.js +2 -0
- package/dest/curves/bn254/point.d.ts +54 -0
- package/dest/curves/bn254/point.d.ts.map +1 -0
- package/dest/curves/bn254/point.js +143 -0
- package/dest/curves/grumpkin/index.d.ts +10 -0
- package/dest/curves/grumpkin/index.d.ts.map +1 -0
- package/dest/curves/grumpkin/index.js +3 -0
- package/dest/curves/grumpkin/point.d.ts +168 -0
- package/dest/curves/grumpkin/point.d.ts.map +1 -0
- package/dest/curves/grumpkin/point.js +263 -0
- package/dest/decorators/index.d.ts +2 -0
- package/dest/decorators/index.d.ts.map +1 -0
- package/dest/decorators/index.js +1 -0
- package/dest/decorators/memoize.d.ts +2 -0
- package/dest/decorators/memoize.d.ts.map +1 -0
- package/dest/decorators/memoize.js +11 -0
- package/dest/error/index.d.ts +21 -0
- package/dest/error/index.d.ts.map +1 -0
- package/dest/error/index.js +17 -0
- package/dest/eth-address/index.d.ts +143 -0
- package/dest/eth-address/index.d.ts.map +1 -0
- package/dest/eth-address/index.js +224 -0
- package/dest/eth-signature/eth_signature.d.ts +65 -0
- package/dest/eth-signature/eth_signature.d.ts.map +1 -0
- package/dest/eth-signature/eth_signature.js +110 -0
- package/dest/eth-signature/index.d.ts +2 -0
- package/dest/eth-signature/index.d.ts.map +1 -0
- package/dest/eth-signature/index.js +1 -0
- package/dest/fifo/fifo_frame_reader.d.ts +41 -0
- package/dest/fifo/fifo_frame_reader.d.ts.map +1 -0
- package/dest/fifo/fifo_frame_reader.js +91 -0
- package/dest/fifo/index.d.ts +2 -0
- package/dest/fifo/index.d.ts.map +1 -0
- package/dest/fifo/index.js +1 -0
- package/dest/fifo_set/fifo_set.d.ts +15 -0
- package/dest/fifo_set/fifo_set.d.ts.map +1 -0
- package/dest/fifo_set/fifo_set.js +39 -0
- package/dest/fifo_set/index.d.ts +2 -0
- package/dest/fifo_set/index.d.ts.map +1 -0
- package/dest/fifo_set/index.js +1 -0
- package/dest/fs/index.d.ts +3 -0
- package/dest/fs/index.d.ts.map +1 -0
- package/dest/fs/index.js +2 -0
- package/dest/fs/run_in_dir.d.ts +2 -0
- package/dest/fs/run_in_dir.d.ts.map +1 -0
- package/dest/fs/run_in_dir.js +31 -0
- package/dest/fs/try_rm_dir.d.ts +3 -0
- package/dest/fs/try_rm_dir.d.ts.map +1 -0
- package/dest/fs/try_rm_dir.js +16 -0
- package/dest/iterable/all.d.ts +9 -0
- package/dest/iterable/all.d.ts.map +1 -0
- package/dest/iterable/all.js +18 -0
- package/dest/iterable/filter.d.ts +10 -0
- package/dest/iterable/filter.d.ts.map +1 -0
- package/dest/iterable/filter.js +48 -0
- package/dest/iterable/first.d.ts +8 -0
- package/dest/iterable/first.d.ts.map +1 -0
- package/dest/iterable/first.js +11 -0
- package/dest/iterable/index.d.ts +9 -0
- package/dest/iterable/index.d.ts.map +1 -0
- package/dest/iterable/index.js +8 -0
- package/dest/iterable/isAsyncIt.d.ts +7 -0
- package/dest/iterable/isAsyncIt.d.ts.map +1 -0
- package/dest/iterable/isAsyncIt.js +7 -0
- package/dest/iterable/map.d.ts +12 -0
- package/dest/iterable/map.d.ts.map +1 -0
- package/dest/iterable/map.js +36 -0
- package/dest/iterable/peek.d.ts +19 -0
- package/dest/iterable/peek.d.ts.map +1 -0
- package/dest/iterable/peek.js +33 -0
- package/dest/iterable/sort.d.ts +14 -0
- package/dest/iterable/sort.d.ts.map +1 -0
- package/dest/iterable/sort.js +15 -0
- package/dest/iterable/take.d.ts +10 -0
- package/dest/iterable/take.d.ts.map +1 -0
- package/dest/iterable/take.js +32 -0
- package/dest/iterable/toArray.d.ts +2 -0
- package/dest/iterable/toArray.d.ts.map +1 -0
- package/dest/iterable/toArray.js +7 -0
- package/dest/iterator/filter.d.ts +3 -0
- package/dest/iterator/filter.d.ts.map +1 -0
- package/dest/iterator/filter.js +7 -0
- package/dest/iterator/index.d.ts +2 -0
- package/dest/iterator/index.d.ts.map +1 -0
- package/dest/iterator/index.js +1 -0
- package/dest/jest/env.js +48 -0
- package/dest/jest/setup.js +34 -0
- package/dest/jest/setupAfterEnv.js +3 -0
- package/dest/json-rpc/client/fetch.d.ts +37 -0
- package/dest/json-rpc/client/fetch.d.ts.map +1 -0
- package/dest/json-rpc/client/fetch.js +67 -0
- package/dest/json-rpc/client/index.d.ts +3 -0
- package/dest/json-rpc/client/index.d.ts.map +1 -0
- package/dest/json-rpc/client/index.js +2 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +33 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
- package/dest/json-rpc/client/safe_json_rpc_client.js +218 -0
- package/dest/json-rpc/client/undici.d.ts +16 -0
- package/dest/json-rpc/client/undici.d.ts.map +1 -0
- package/dest/json-rpc/client/undici.js +112 -0
- package/dest/json-rpc/convert.d.ts +20 -0
- package/dest/json-rpc/convert.d.ts.map +1 -0
- package/dest/json-rpc/convert.js +40 -0
- package/dest/json-rpc/errors.d.ts +4 -0
- package/dest/json-rpc/errors.d.ts.map +1 -0
- package/dest/json-rpc/errors.js +6 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +13 -0
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_a.js +20 -0
- package/dest/json-rpc/fixtures/class_b.d.ts +13 -0
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/class_b.js +20 -0
- package/dest/json-rpc/fixtures/test_state.d.ts +85 -0
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
- package/dest/json-rpc/fixtures/test_state.js +171 -0
- package/dest/json-rpc/index.d.ts +3 -0
- package/dest/json-rpc/index.d.ts.map +1 -0
- package/dest/json-rpc/index.js +2 -0
- package/dest/json-rpc/js_utils.d.ts +13 -0
- package/dest/json-rpc/js_utils.d.ts.map +1 -0
- package/dest/json-rpc/js_utils.js +16 -0
- package/dest/json-rpc/server/api_key_auth.d.ts +19 -0
- package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
- package/dest/json-rpc/server/api_key_auth.js +57 -0
- package/dest/json-rpc/server/index.d.ts +3 -0
- package/dest/json-rpc/server/index.d.ts.map +1 -0
- package/dest/json-rpc/server/index.js +2 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +177 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.js +570 -0
- package/dest/json-rpc/test/index.d.ts +2 -0
- package/dest/json-rpc/test/index.d.ts.map +1 -0
- package/dest/json-rpc/test/index.js +1 -0
- package/dest/json-rpc/test/integration.d.ts +14 -0
- package/dest/json-rpc/test/integration.d.ts.map +1 -0
- package/dest/json-rpc/test/integration.js +21 -0
- package/dest/log/aws-logger-config.d.ts +8 -0
- package/dest/log/aws-logger-config.d.ts.map +1 -0
- package/dest/log/aws-logger-config.js +55 -0
- package/dest/log/bigint-utils.d.ts +5 -0
- package/dest/log/bigint-utils.d.ts.map +1 -0
- package/dest/log/bigint-utils.js +21 -0
- package/dest/log/console.d.ts +11 -0
- package/dest/log/console.d.ts.map +1 -0
- package/dest/log/console.js +36 -0
- package/dest/log/gcloud-logger-config.d.ts +13 -0
- package/dest/log/gcloud-logger-config.d.ts.map +1 -0
- package/dest/log/gcloud-logger-config.js +61 -0
- package/dest/log/index.d.ts +7 -0
- package/dest/log/index.d.ts.map +1 -0
- package/dest/log/index.js +6 -0
- package/dest/log/libp2p_logger.d.ts +10 -0
- package/dest/log/libp2p_logger.d.ts.map +1 -0
- package/dest/log/libp2p_logger.js +76 -0
- package/dest/log/log-filters.d.ts +20 -0
- package/dest/log/log-filters.d.ts.map +1 -0
- package/dest/log/log-filters.js +73 -0
- package/dest/log/log-levels.d.ts +3 -0
- package/dest/log/log-levels.d.ts.map +1 -0
- package/dest/log/log-levels.js +10 -0
- package/dest/log/log_fn.d.ts +7 -0
- package/dest/log/log_fn.d.ts.map +1 -0
- package/dest/log/log_fn.js +1 -0
- package/dest/log/noir_debug_log_util.d.ts +14 -0
- package/dest/log/noir_debug_log_util.d.ts.map +1 -0
- package/dest/log/noir_debug_log_util.js +14 -0
- package/dest/log/pino-logger-server.d.ts +9 -0
- package/dest/log/pino-logger-server.d.ts.map +1 -0
- package/dest/log/pino-logger-server.js +18 -0
- package/dest/log/pino-logger.d.ts +86 -0
- package/dest/log/pino-logger.d.ts.map +1 -0
- package/dest/log/pino-logger.js +347 -0
- package/dest/message/index.d.ts +32 -0
- package/dest/message/index.d.ts.map +1 -0
- package/dest/message/index.js +27 -0
- package/dest/mutex/index.d.ts +53 -0
- package/dest/mutex/index.d.ts.map +1 -0
- package/dest/mutex/index.js +78 -0
- package/dest/mutex/mutex_database.d.ts +10 -0
- package/dest/mutex/mutex_database.d.ts.map +1 -0
- package/dest/mutex/mutex_database.js +4 -0
- package/dest/noir/index.d.ts +2 -0
- package/dest/noir/index.d.ts.map +1 -0
- package/dest/noir/index.js +1 -0
- package/dest/noir/noir_package_config.d.ts +44 -0
- package/dest/noir/noir_package_config.d.ts.map +1 -0
- package/dest/noir/noir_package_config.js +36 -0
- package/dest/number/index.d.ts +3 -0
- package/dest/number/index.d.ts.map +1 -0
- package/dest/number/index.js +12 -0
- package/dest/profiler/index.d.ts +2 -0
- package/dest/profiler/index.d.ts.map +1 -0
- package/dest/profiler/index.js +1 -0
- package/dest/profiler/profiler.d.ts +8 -0
- package/dest/profiler/profiler.d.ts.map +1 -0
- package/dest/profiler/profiler.js +97 -0
- package/dest/promise/index.d.ts +3 -0
- package/dest/promise/index.d.ts.map +1 -0
- package/dest/promise/index.js +2 -0
- package/dest/promise/running-promise.d.ts +53 -0
- package/dest/promise/running-promise.d.ts.map +1 -0
- package/dest/promise/running-promise.js +122 -0
- package/dest/promise/utils.d.ts +25 -0
- package/dest/promise/utils.d.ts.map +1 -0
- package/dest/promise/utils.js +40 -0
- package/dest/queue/base_memory_queue.d.ts +65 -0
- package/dest/queue/base_memory_queue.d.ts.map +1 -0
- package/dest/queue/base_memory_queue.js +116 -0
- package/dest/queue/batch_queue.d.ts +47 -0
- package/dest/queue/batch_queue.d.ts.map +1 -0
- package/dest/queue/batch_queue.js +106 -0
- package/dest/queue/bounded_serial_queue.d.ts +56 -0
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -0
- package/dest/queue/bounded_serial_queue.js +84 -0
- package/dest/queue/fifo_memory_queue.d.ts +21 -0
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -0
- package/dest/queue/fifo_memory_queue.js +29 -0
- package/dest/queue/index.d.ts +7 -0
- package/dest/queue/index.d.ts.map +1 -0
- package/dest/queue/index.js +6 -0
- package/dest/queue/priority_memory_queue.d.ts +13 -0
- package/dest/queue/priority_memory_queue.d.ts.map +1 -0
- package/dest/queue/priority_memory_queue.js +16 -0
- package/dest/queue/priority_queue.d.ts +14 -0
- package/dest/queue/priority_queue.d.ts.map +1 -0
- package/dest/queue/priority_queue.js +29 -0
- package/dest/queue/semaphore.d.ts +27 -0
- package/dest/queue/semaphore.d.ts.map +1 -0
- package/dest/queue/semaphore.js +26 -0
- package/dest/queue/serial_queue.d.ts +49 -0
- package/dest/queue/serial_queue.d.ts.map +1 -0
- package/dest/queue/serial_queue.js +74 -0
- package/dest/retry/index.d.ts +83 -0
- package/dest/retry/index.d.ts.map +1 -0
- package/dest/retry/index.js +146 -0
- package/dest/running-promise/index.d.ts +2 -0
- package/dest/running-promise/index.d.ts.map +1 -0
- package/dest/running-promise/index.js +1 -0
- package/dest/schemas/api.d.ts +23 -0
- package/dest/schemas/api.d.ts.map +1 -0
- package/dest/schemas/api.js +9 -0
- package/dest/schemas/index.d.ts +6 -0
- package/dest/schemas/index.d.ts.map +1 -0
- package/dest/schemas/index.js +5 -0
- package/dest/schemas/parse.d.ts +9 -0
- package/dest/schemas/parse.d.ts.map +1 -0
- package/dest/schemas/parse.js +23 -0
- package/dest/schemas/schemas.d.ts +46 -0
- package/dest/schemas/schemas.d.ts.map +1 -0
- package/dest/schemas/schemas.js +56 -0
- package/dest/schemas/types.d.ts +33 -0
- package/dest/schemas/types.d.ts.map +1 -0
- package/dest/schemas/types.js +25 -0
- package/dest/schemas/utils.d.ts +47 -0
- package/dest/schemas/utils.d.ts.map +1 -0
- package/dest/schemas/utils.js +54 -0
- package/dest/serialize/buffer_reader.d.ts +274 -0
- package/dest/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/serialize/buffer_reader.js +359 -0
- package/dest/serialize/buffer_sink.d.ts +134 -0
- package/dest/serialize/buffer_sink.d.ts.map +1 -0
- package/dest/serialize/buffer_sink.js +297 -0
- package/dest/serialize/field_reader.d.ts +121 -0
- package/dest/serialize/field_reader.d.ts.map +1 -0
- package/dest/serialize/field_reader.js +164 -0
- package/dest/serialize/free_funcs.d.ts +107 -0
- package/dest/serialize/free_funcs.d.ts.map +1 -0
- package/dest/serialize/free_funcs.js +183 -0
- package/dest/serialize/index.d.ts +8 -0
- package/dest/serialize/index.d.ts.map +1 -0
- package/dest/serialize/index.js +7 -0
- package/dest/serialize/serialize.d.ts +168 -0
- package/dest/serialize/serialize.d.ts.map +1 -0
- package/dest/serialize/serialize.js +258 -0
- package/dest/serialize/type_registry.d.ts +23 -0
- package/dest/serialize/type_registry.d.ts.map +1 -0
- package/dest/serialize/type_registry.js +61 -0
- package/dest/serialize/types.d.ts +33 -0
- package/dest/serialize/types.d.ts.map +1 -0
- package/dest/serialize/types.js +21 -0
- package/dest/sleep/index.d.ts +54 -0
- package/dest/sleep/index.d.ts.map +1 -0
- package/dest/sleep/index.js +80 -0
- package/dest/string/index.d.ts +18 -0
- package/dest/string/index.d.ts.map +1 -0
- package/dest/string/index.js +62 -0
- package/dest/testing/files/index.d.ts +20 -0
- package/dest/testing/files/index.d.ts.map +1 -0
- package/dest/testing/files/index.js +59 -0
- package/dest/testing/formatting.d.ts +4 -0
- package/dest/testing/formatting.d.ts.map +1 -0
- package/dest/testing/formatting.js +3 -0
- package/dest/testing/index.d.ts +5 -0
- package/dest/testing/index.d.ts.map +1 -0
- package/dest/testing/index.js +4 -0
- package/dest/testing/port_allocator.d.ts +10 -0
- package/dest/testing/port_allocator.d.ts.map +1 -0
- package/dest/testing/port_allocator.js +29 -0
- package/dest/testing/snapshot_serializer.d.ts +5 -0
- package/dest/testing/snapshot_serializer.d.ts.map +1 -0
- package/dest/testing/snapshot_serializer.js +32 -0
- package/dest/testing/test_data.d.ts +7 -0
- package/dest/testing/test_data.d.ts.map +1 -0
- package/dest/testing/test_data.js +29 -0
- package/dest/timer/date.d.ts +39 -0
- package/dest/timer/date.d.ts.map +1 -0
- package/dest/timer/date.js +62 -0
- package/dest/timer/elapsed.d.ts +13 -0
- package/dest/timer/elapsed.d.ts.map +1 -0
- package/dest/timer/elapsed.js +25 -0
- package/dest/timer/index.d.ts +5 -0
- package/dest/timer/index.d.ts.map +1 -0
- package/dest/timer/index.js +4 -0
- package/dest/timer/timeout.d.ts +56 -0
- package/dest/timer/timeout.d.ts.map +1 -0
- package/dest/timer/timeout.js +113 -0
- package/dest/timer/timer.d.ts +37 -0
- package/dest/timer/timer.d.ts.map +1 -0
- package/dest/timer/timer.js +40 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +111 -0
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
- package/dest/transport/dispatch/create_dispatch_proxy.js +59 -0
- package/dest/transport/dispatch/messages.d.ts +52 -0
- package/dest/transport/dispatch/messages.d.ts.map +1 -0
- package/dest/transport/dispatch/messages.js +13 -0
- package/dest/transport/index.d.ts +10 -0
- package/dest/transport/index.d.ts.map +1 -0
- package/dest/transport/index.js +9 -0
- package/dest/transport/interface/connector.d.ts +8 -0
- package/dest/transport/interface/connector.d.ts.map +1 -0
- package/dest/transport/interface/connector.js +3 -0
- package/dest/transport/interface/listener.d.ts +12 -0
- package/dest/transport/interface/listener.d.ts.map +1 -0
- package/dest/transport/interface/listener.js +4 -0
- package/dest/transport/interface/socket.d.ts +13 -0
- package/dest/transport/interface/socket.d.ts.map +1 -0
- package/dest/transport/interface/socket.js +7 -0
- package/dest/transport/interface/transferable.d.ts +68 -0
- package/dest/transport/interface/transferable.d.ts.map +1 -0
- package/dest/transport/interface/transferable.js +63 -0
- package/dest/transport/node/index.d.ts +3 -0
- package/dest/transport/node/index.d.ts.map +1 -0
- package/dest/transport/node/index.js +2 -0
- package/dest/transport/node/node_connector.d.ts +27 -0
- package/dest/transport/node/node_connector.d.ts.map +1 -0
- package/dest/transport/node/node_connector.js +26 -0
- package/dest/transport/node/node_connector_socket.d.ts +41 -0
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
- package/dest/transport/node/node_connector_socket.js +44 -0
- package/dest/transport/node/node_listener.d.ts +25 -0
- package/dest/transport/node/node_listener.d.ts.map +1 -0
- package/dest/transport/node/node_listener.js +26 -0
- package/dest/transport/node/node_listener_socket.d.ts +36 -0
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
- package/dest/transport/node/node_listener_socket.js +40 -0
- package/dest/transport/transport_client.d.ts +60 -0
- package/dest/transport/transport_client.d.ts.map +1 -0
- package/dest/transport/transport_client.js +96 -0
- package/dest/transport/transport_server.d.ts +47 -0
- package/dest/transport/transport_server.d.ts.map +1 -0
- package/dest/transport/transport_server.js +114 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts +16 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/balanced_merkle_tree_root.js +50 -0
- package/dest/trees/hasher.d.ts +40 -0
- package/dest/trees/hasher.d.ts.map +1 -0
- package/dest/trees/hasher.js +10 -0
- package/dest/trees/index.d.ts +13 -0
- package/dest/trees/index.d.ts.map +1 -0
- package/dest/trees/index.js +12 -0
- package/dest/trees/indexed_merkle_tree.d.ts +11 -0
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree.js +27 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +21 -0
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/indexed_merkle_tree_calculator.js +87 -0
- package/dest/trees/indexed_tree_leaf.d.ts +55 -0
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -0
- package/dest/trees/indexed_tree_leaf.js +5 -0
- package/dest/trees/membership_witness.d.ts +63 -0
- package/dest/trees/membership_witness.d.ts.map +1 -0
- package/dest/trees/membership_witness.js +83 -0
- package/dest/trees/merkle_tree.d.ts +16 -0
- package/dest/trees/merkle_tree.d.ts.map +1 -0
- package/dest/trees/merkle_tree.js +58 -0
- package/dest/trees/merkle_tree_calculator.d.ts +16 -0
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/merkle_tree_calculator.js +57 -0
- package/dest/trees/sibling_path.d.ts +96 -0
- package/dest/trees/sibling_path.d.ts.map +1 -0
- package/dest/trees/sibling_path.js +139 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +48 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.js +154 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts +27 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_root.js +83 -0
- package/dest/trees/unbalanced_tree_store.d.ts +24 -0
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -0
- package/dest/trees/unbalanced_tree_store.js +148 -0
- package/dest/types/index.d.ts +68 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +24 -0
- package/dest/url/index.d.ts +9 -0
- package/dest/url/index.d.ts.map +1 -0
- package/dest/url/index.js +62 -0
- package/dest/validation/index.d.ts +9 -0
- package/dest/validation/index.d.ts.map +1 -0
- package/dest/validation/index.js +15 -0
- package/package.json +213 -0
- package/src/array/array.ts +147 -0
- package/src/array/index.ts +2 -0
- package/src/array/sorted_array.ts +138 -0
- package/src/async-map/index.ts +18 -0
- package/src/async-pool/index.ts +51 -0
- package/src/bigint/index.ts +20 -0
- package/src/bigint-buffer/index.ts +92 -0
- package/src/branded-types/block_number.ts +135 -0
- package/src/branded-types/buffer32_hash.ts +38 -0
- package/src/branded-types/checkpoint_number.ts +130 -0
- package/src/branded-types/epoch.ts +88 -0
- package/src/branded-types/index.ts +8 -0
- package/src/branded-types/index_within_checkpoint.ts +88 -0
- package/src/branded-types/slot.ts +93 -0
- package/src/branded-types/types.ts +2 -0
- package/src/buffer/buffer16.ts +135 -0
- package/src/buffer/buffer32.ts +116 -0
- package/src/buffer/index.ts +3 -0
- package/src/buffer/utils.ts +8 -0
- package/src/collection/array.ts +351 -0
- package/src/collection/index.ts +4 -0
- package/src/collection/lru_map.ts +143 -0
- package/src/collection/lru_set.ts +115 -0
- package/src/collection/object.ts +89 -0
- package/src/committable/committable.ts +46 -0
- package/src/committable/index.ts +1 -0
- package/src/config/env_var.ts +412 -0
- package/src/config/index.ts +419 -0
- package/src/config/network_config.ts +21 -0
- package/src/config/network_name.ts +28 -0
- package/src/config/parse-env.ts +4 -0
- package/src/config/secret_value.ts +49 -0
- package/src/crypto/aes128/index.ts +77 -0
- package/src/crypto/bls/bn254_keystore.ts +276 -0
- package/src/crypto/bls/index.ts +76 -0
- package/src/crypto/bn254/index.ts +64 -0
- package/src/crypto/ecdsa/index.ts +88 -0
- package/src/crypto/ecdsa/signature.ts +100 -0
- package/src/crypto/grumpkin/index.ts +90 -0
- package/src/crypto/keccak/index.ts +283 -0
- package/src/crypto/keys/index.ts +26 -0
- package/src/crypto/pedersen/index.ts +1 -0
- package/src/crypto/pedersen/pedersen.noble.ts +573 -0
- package/src/crypto/pedersen/pedersen.wasm.ts +52 -0
- package/src/crypto/poseidon/index.ts +83 -0
- package/src/crypto/random/index.ts +47 -0
- package/src/crypto/random/randomness_singleton.ts +64 -0
- package/src/crypto/schnorr/index.ts +61 -0
- package/src/crypto/schnorr/signature.ts +87 -0
- package/src/crypto/secp256k1/index.ts +61 -0
- package/src/crypto/secp256k1-signer/index.ts +2 -0
- package/src/crypto/secp256k1-signer/secp256k1_signer.ts +38 -0
- package/src/crypto/secp256k1-signer/utils.ts +244 -0
- package/src/crypto/sha256/index.ts +194 -0
- package/src/crypto/sha512/index.ts +16 -0
- package/src/crypto/signature/index.ts +17 -0
- package/src/crypto/sync/index.ts +6 -0
- package/src/crypto/sync/pedersen/index.ts +46 -0
- package/src/crypto/sync/poseidon/index.ts +72 -0
- package/src/curves/bls12/field.ts +456 -0
- package/src/curves/bls12/index.ts +2 -0
- package/src/curves/bls12/point.ts +450 -0
- package/src/curves/bn254/field.ts +531 -0
- package/src/curves/bn254/index.ts +2 -0
- package/src/curves/bn254/point.ts +170 -0
- package/src/curves/grumpkin/index.ts +11 -0
- package/src/curves/grumpkin/point.ts +300 -0
- package/src/decorators/index.ts +1 -0
- package/src/decorators/memoize.ts +11 -0
- package/src/error/index.ts +22 -0
- package/src/eth-address/index.ts +269 -0
- package/src/eth-signature/eth_signature.ts +155 -0
- package/src/eth-signature/index.ts +1 -0
- package/src/fifo/fifo_frame_reader.ts +113 -0
- package/src/fifo/index.ts +1 -0
- package/src/fifo_set/fifo_set.ts +52 -0
- package/src/fifo_set/index.ts +1 -0
- package/src/fs/index.ts +2 -0
- package/src/fs/run_in_dir.ts +33 -0
- package/src/fs/try_rm_dir.ts +15 -0
- package/src/iterable/all.ts +32 -0
- package/src/iterable/filter.ts +77 -0
- package/src/iterable/first.ts +14 -0
- package/src/iterable/index.ts +8 -0
- package/src/iterable/isAsyncIt.ts +8 -0
- package/src/iterable/map.ts +66 -0
- package/src/iterable/peek.ts +58 -0
- package/src/iterable/sort.ts +39 -0
- package/src/iterable/take.ts +54 -0
- package/src/iterable/toArray.ts +9 -0
- package/src/iterator/filter.ts +11 -0
- package/src/iterator/index.ts +1 -0
- package/src/jest/env.mjs +52 -0
- package/src/jest/setup.mjs +38 -0
- package/src/jest/setupAfterEnv.mjs +3 -0
- package/src/json-rpc/README.md +55 -0
- package/src/json-rpc/client/fetch.ts +98 -0
- package/src/json-rpc/client/index.ts +2 -0
- package/src/json-rpc/client/safe_json_rpc_client.ts +283 -0
- package/src/json-rpc/client/undici.ts +128 -0
- package/src/json-rpc/convert.ts +52 -0
- package/src/json-rpc/errors.ts +6 -0
- package/src/json-rpc/fixtures/class_a.ts +18 -0
- package/src/json-rpc/fixtures/class_b.ts +18 -0
- package/src/json-rpc/fixtures/test_state.ts +143 -0
- package/src/json-rpc/index.ts +2 -0
- package/src/json-rpc/js_utils.ts +21 -0
- package/src/json-rpc/server/api_key_auth.ts +63 -0
- package/src/json-rpc/server/index.ts +2 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +626 -0
- package/src/json-rpc/test/index.ts +1 -0
- package/src/json-rpc/test/integration.ts +35 -0
- package/src/log/aws-logger-config.ts +32 -0
- package/src/log/bigint-utils.ts +25 -0
- package/src/log/console.ts +42 -0
- package/src/log/gcloud-logger-config.ts +72 -0
- package/src/log/index.ts +6 -0
- package/src/log/libp2p_logger.ts +93 -0
- package/src/log/log-filters.ts +81 -0
- package/src/log/log-levels.ts +3 -0
- package/src/log/log_fn.ts +5 -0
- package/src/log/noir_debug_log_util.ts +21 -0
- package/src/log/pino-logger-server.ts +25 -0
- package/src/log/pino-logger.ts +406 -0
- package/src/message/index.ts +47 -0
- package/src/mutex/index.ts +84 -0
- package/src/mutex/mutex_database.ts +11 -0
- package/src/noir/index.ts +1 -0
- package/src/noir/noir_package_config.ts +66 -0
- package/src/number/index.ts +14 -0
- package/src/profiler/index.ts +1 -0
- package/src/profiler/profiler.ts +125 -0
- package/src/promise/index.ts +2 -0
- package/src/promise/running-promise.ts +138 -0
- package/src/promise/utils.ts +60 -0
- package/src/queue/base_memory_queue.ts +138 -0
- package/src/queue/batch_queue.ts +121 -0
- package/src/queue/bounded_serial_queue.ts +103 -0
- package/src/queue/fifo_memory_queue.ts +39 -0
- package/src/queue/index.ts +6 -0
- package/src/queue/priority_memory_queue.ts +20 -0
- package/src/queue/priority_queue.ts +34 -0
- package/src/queue/semaphore.ts +38 -0
- package/src/queue/serial_queue.ts +86 -0
- package/src/retry/index.ts +185 -0
- package/src/running-promise/index.ts +1 -0
- package/src/schemas/api.ts +47 -0
- package/src/schemas/index.ts +5 -0
- package/src/schemas/parse.ts +32 -0
- package/src/schemas/schemas.ts +93 -0
- package/src/schemas/types.ts +36 -0
- package/src/schemas/utils.ts +91 -0
- package/src/serialize/buffer_reader.ts +472 -0
- package/src/serialize/buffer_sink.ts +350 -0
- package/src/serialize/field_reader.ts +208 -0
- package/src/serialize/free_funcs.ts +198 -0
- package/src/serialize/index.ts +7 -0
- package/src/serialize/serialize.ts +320 -0
- package/src/serialize/type_registry.ts +75 -0
- package/src/serialize/types.ts +40 -0
- package/src/sleep/index.ts +90 -0
- package/src/string/index.ts +80 -0
- package/src/testing/files/index.ts +74 -0
- package/src/testing/formatting.ts +3 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/port_allocator.ts +31 -0
- package/src/testing/snapshot_serializer.ts +33 -0
- package/src/testing/test_data.ts +36 -0
- package/src/timer/date.ts +82 -0
- package/src/timer/elapsed.ts +23 -0
- package/src/timer/index.ts +4 -0
- package/src/timer/timeout.ts +136 -0
- package/src/timer/timer.ts +48 -0
- package/src/transport/dispatch/create_dispatch_proxy.ts +151 -0
- package/src/transport/dispatch/messages.ts +58 -0
- package/src/transport/index.ts +9 -0
- package/src/transport/interface/connector.ts +8 -0
- package/src/transport/interface/listener.ts +15 -0
- package/src/transport/interface/socket.ts +14 -0
- package/src/transport/interface/transferable.ts +125 -0
- package/src/transport/node/index.ts +2 -0
- package/src/transport/node/node_connector.ts +30 -0
- package/src/transport/node/node_connector_socket.ts +52 -0
- package/src/transport/node/node_listener.ts +34 -0
- package/src/transport/node/node_listener_socket.ts +48 -0
- package/src/transport/transport_client.ts +130 -0
- package/src/transport/transport_server.ts +111 -0
- package/src/trees/balanced_merkle_tree_root.ts +65 -0
- package/src/trees/hasher.ts +51 -0
- package/src/trees/index.ts +12 -0
- package/src/trees/indexed_merkle_tree.ts +40 -0
- package/src/trees/indexed_merkle_tree_calculator.ts +98 -0
- package/src/trees/indexed_tree_leaf.ts +56 -0
- package/src/trees/membership_witness.ts +112 -0
- package/src/trees/merkle_tree.ts +75 -0
- package/src/trees/merkle_tree_calculator.ts +66 -0
- package/src/trees/sibling_path.ts +177 -0
- package/src/trees/unbalanced_merkle_tree_calculator.ts +176 -0
- package/src/trees/unbalanced_merkle_tree_root.ts +112 -0
- package/src/trees/unbalanced_tree_store.ts +161 -0
- package/src/types/index.ts +103 -0
- package/src/url/index.ts +72 -0
- package/src/validation/index.ts +18 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { randomBytes as bbRandomBytes } from '@aztec/bb.js';
|
|
2
|
+
|
|
3
|
+
import { RandomnessSingleton } from './randomness_singleton.js';
|
|
4
|
+
|
|
5
|
+
export const randomBytes = (len: number) => {
|
|
6
|
+
const singleton = RandomnessSingleton.getInstance();
|
|
7
|
+
|
|
8
|
+
if (singleton.isDeterministic()) {
|
|
9
|
+
return singleton.getBytes(len);
|
|
10
|
+
}
|
|
11
|
+
return Buffer.from(bbRandomBytes(len)) as Buffer<ArrayBuffer>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generate a random integer less than max.
|
|
16
|
+
* @param max - The maximum value.
|
|
17
|
+
* @returns A random integer.
|
|
18
|
+
*
|
|
19
|
+
* TODO(#3949): This is insecure as it's modulo biased. Nuke or safeguard before mainnet.
|
|
20
|
+
*/
|
|
21
|
+
export const randomInt = (max: number) => {
|
|
22
|
+
const randomBuffer = randomBytes(6); // Generate a buffer of 6 random bytes.
|
|
23
|
+
const randomInt = parseInt(randomBuffer.toString('hex'), 16); // Convert buffer to a large integer.
|
|
24
|
+
return randomInt % max; // Use modulo to ensure the result is less than max.
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Generate a random bigint less than max.
|
|
29
|
+
* @param max - The maximum value.
|
|
30
|
+
* @returns A random bigint.
|
|
31
|
+
*
|
|
32
|
+
* TODO(#3949): This is insecure as it's modulo biased. Nuke or safeguard before mainnet.
|
|
33
|
+
*/
|
|
34
|
+
export const randomBigInt = (max: bigint) => {
|
|
35
|
+
const randomBuffer = randomBytes(8); // Generate a buffer of 8 random bytes.
|
|
36
|
+
const randomBigInt = BigInt(`0x${randomBuffer.toString('hex')}`); // Convert buffer to a large integer.
|
|
37
|
+
return randomBigInt % max; // Use modulo to ensure the result is less than max.
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Generate a random boolean value.
|
|
42
|
+
* @returns A random boolean value.
|
|
43
|
+
*/
|
|
44
|
+
export const randomBoolean = () => {
|
|
45
|
+
const randomByte = randomBytes(1)[0]; // Generate a single random byte.
|
|
46
|
+
return randomByte % 2 === 0; // Use modulo to determine if the byte is even or odd.
|
|
47
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger } from '../../log/pino-logger.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A number generator which is used as a source of randomness in the system. If the SEED env variable is set, the
|
|
5
|
+
* generator will be deterministic and will always produce the same sequence of numbers. Otherwise a true randomness
|
|
6
|
+
* sourced by crypto library will be used.
|
|
7
|
+
* @remarks This class was implemented so that tests can be run deterministically.
|
|
8
|
+
*
|
|
9
|
+
* TODO(#3949): This is not safe enough for production and should be made safer or removed before mainnet.
|
|
10
|
+
*/
|
|
11
|
+
export class RandomnessSingleton {
|
|
12
|
+
private static instance: RandomnessSingleton;
|
|
13
|
+
|
|
14
|
+
private counter = 0;
|
|
15
|
+
private log: Logger;
|
|
16
|
+
|
|
17
|
+
private constructor(
|
|
18
|
+
private readonly seed?: number,
|
|
19
|
+
bindings?: LoggerBindings,
|
|
20
|
+
) {
|
|
21
|
+
this.log = createLogger('foundation:randomness_singleton', bindings);
|
|
22
|
+
if (seed !== undefined) {
|
|
23
|
+
this.log.debug(`Using pseudo-randomness with seed: ${seed}`);
|
|
24
|
+
this.counter = seed;
|
|
25
|
+
} else {
|
|
26
|
+
this.log.debug('Using true randomness');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public static getInstance(bindings?: LoggerBindings): RandomnessSingleton {
|
|
31
|
+
if (!RandomnessSingleton.instance) {
|
|
32
|
+
const seed = process.env.SEED ? Number(process.env.SEED) : undefined;
|
|
33
|
+
RandomnessSingleton.instance = new RandomnessSingleton(seed, bindings);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return RandomnessSingleton.instance;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Indicates whether the generator is deterministic (was seeded) or not.
|
|
41
|
+
* @returns Whether the generator is deterministic.
|
|
42
|
+
*/
|
|
43
|
+
public isDeterministic(): boolean {
|
|
44
|
+
return this.seed !== undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public getBytes(length: number): Buffer {
|
|
48
|
+
if (this.seed === undefined) {
|
|
49
|
+
// Note: It would be more natural to just have the contents of randomBytes(...) function from
|
|
50
|
+
// yarn-project/foundation/src/crypto/random/index.ts here but that would result in a larger
|
|
51
|
+
// refactor so I think prohibiting use of this func when the seed is undefined is and handling
|
|
52
|
+
// the singleton within randomBytes func is fine.
|
|
53
|
+
throw new Error('RandomnessSingleton is not implemented for non-deterministic mode');
|
|
54
|
+
}
|
|
55
|
+
const result = Buffer.alloc(length);
|
|
56
|
+
for (let i = 0; i < length; i++) {
|
|
57
|
+
// Each byte of the buffer is set to a 1 byte of this.counter's value. 0xff is 255 in decimal and it's used as
|
|
58
|
+
// a mask to get the last 8 bits of the shifted counter.
|
|
59
|
+
result[i] = (this.counter >> (i * 8)) & 0xff;
|
|
60
|
+
}
|
|
61
|
+
this.counter++;
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
2
|
+
|
|
3
|
+
import type { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
4
|
+
import type { GrumpkinScalar } from '@aztec-labs/foundation/curves/grumpkin';
|
|
5
|
+
import { Point } from '@aztec-labs/foundation/curves/grumpkin';
|
|
6
|
+
|
|
7
|
+
import { SchnorrSignature } from './signature.js';
|
|
8
|
+
|
|
9
|
+
export * from './signature.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Schnorr signature construction and helper operations.
|
|
13
|
+
*/
|
|
14
|
+
export class Schnorr {
|
|
15
|
+
/**
|
|
16
|
+
* Computes a grumpkin public key from a private key.
|
|
17
|
+
* @param privateKey - The private key.
|
|
18
|
+
* @returns A grumpkin public key.
|
|
19
|
+
*/
|
|
20
|
+
public async computePublicKey(privateKey: GrumpkinScalar): Promise<Point> {
|
|
21
|
+
await BarretenbergSync.initSingleton();
|
|
22
|
+
const api = BarretenbergSync.getSingleton();
|
|
23
|
+
const response = api.schnorrComputePublicKey({ privateKey: privateKey.toBuffer() });
|
|
24
|
+
return Point.fromBuffer(Buffer.concat([Buffer.from(response.publicKey.x), Buffer.from(response.publicKey.y)]));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a Schnorr signature over a 32-byte message field element.
|
|
29
|
+
* @param msg - The message hash, as a grumpkin base field element.
|
|
30
|
+
* @param privateKey - The private key of the signer.
|
|
31
|
+
* @returns A Schnorr signature of the form (s, e).
|
|
32
|
+
*/
|
|
33
|
+
public async constructSignature(msg: Fr, privateKey: GrumpkinScalar) {
|
|
34
|
+
await BarretenbergSync.initSingleton();
|
|
35
|
+
const api = BarretenbergSync.getSingleton();
|
|
36
|
+
const response = api.schnorrConstructSignature({
|
|
37
|
+
messageField: msg.toBuffer(),
|
|
38
|
+
privateKey: privateKey.toBuffer(),
|
|
39
|
+
});
|
|
40
|
+
return new SchnorrSignature(Buffer.from([...response.s, ...response.e]));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Verifies a Schnorr signature against a Grumpkin public key.
|
|
45
|
+
* @param msg - The message hash, as a grumpkin base field element.
|
|
46
|
+
* @param pubKey - The Grumpkin public key of the signer.
|
|
47
|
+
* @param sig - The Schnorr signature.
|
|
48
|
+
* @returns True or false.
|
|
49
|
+
*/
|
|
50
|
+
public async verifySignature(msg: Fr, pubKey: Point, sig: SchnorrSignature) {
|
|
51
|
+
await BarretenbergSync.initSingleton();
|
|
52
|
+
const api = BarretenbergSync.getSingleton();
|
|
53
|
+
const response = api.schnorrVerifySignature({
|
|
54
|
+
messageField: msg.toBuffer(),
|
|
55
|
+
publicKey: { x: pubKey.x.toBuffer(), y: pubKey.y.toBuffer() },
|
|
56
|
+
s: sig.s,
|
|
57
|
+
e: sig.e,
|
|
58
|
+
});
|
|
59
|
+
return response.verified;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import { mapTuple } from '@aztec-labs/foundation/serialize';
|
|
3
|
+
|
|
4
|
+
import type { Signature } from '../signature/index.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Schnorr signature used for transactions.
|
|
8
|
+
* @see cpp/barretenberg/cpp/src/barretenberg/crypto/schnorr/schnorr.hpp
|
|
9
|
+
*/
|
|
10
|
+
export class SchnorrSignature implements Signature {
|
|
11
|
+
/**
|
|
12
|
+
* The size of the signature in bytes.
|
|
13
|
+
*/
|
|
14
|
+
public static SIZE = 64;
|
|
15
|
+
|
|
16
|
+
constructor(private buffer: Buffer) {
|
|
17
|
+
if (buffer.length !== SchnorrSignature.SIZE) {
|
|
18
|
+
throw new Error(`Invalid signature buffer of length ${buffer.length}.`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Returns the 's' component of the signature.
|
|
24
|
+
* @returns A buffer containing the signature's 's' component.
|
|
25
|
+
*/
|
|
26
|
+
get s() {
|
|
27
|
+
return this.buffer.subarray(0, 32);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns the 'e' component of the signature.
|
|
32
|
+
* @returns A buffer containing the signature's 'e' component.
|
|
33
|
+
*/
|
|
34
|
+
get e() {
|
|
35
|
+
return this.buffer.subarray(32);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the full signature as a buffer.
|
|
40
|
+
* @returns A buffer containing the signature.
|
|
41
|
+
*/
|
|
42
|
+
toBuffer() {
|
|
43
|
+
return this.buffer;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns the full signature as a hex string.
|
|
48
|
+
* @returns A string containing the signature in hex format.
|
|
49
|
+
*/
|
|
50
|
+
toString() {
|
|
51
|
+
return `0x${this.buffer.toString('hex')}`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Converts the signature to an array of three fields.
|
|
56
|
+
* @returns The signature components as an array of three fields
|
|
57
|
+
*/
|
|
58
|
+
toFields(): Fr[] {
|
|
59
|
+
const sig = this.toBuffer();
|
|
60
|
+
|
|
61
|
+
const buf1 = Buffer.alloc(32);
|
|
62
|
+
const buf2 = Buffer.alloc(32);
|
|
63
|
+
const buf3 = Buffer.alloc(32);
|
|
64
|
+
|
|
65
|
+
sig.copy(buf1, 1, 0, 31);
|
|
66
|
+
sig.copy(buf2, 1, 31, 62);
|
|
67
|
+
sig.copy(buf3, 1, 62, 64);
|
|
68
|
+
|
|
69
|
+
return mapTuple([buf1, buf2, buf3], Fr.fromBuffer);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Splits the signature into the four 128-bit limbs that Noir's `EmbeddedCurveScalar` consumes:
|
|
74
|
+
* `[s.lo, s.hi, e.lo, e.hi]`, where each component scalar is encoded as `lo + hi * 2^128`.
|
|
75
|
+
*
|
|
76
|
+
* Each 32-byte big-endian component is sliced into its top 16 bytes (`hi`) and bottom 16 bytes
|
|
77
|
+
* (`lo`); each half is zero-padded into a 32-byte buffer and decoded as `Fr` (big-endian).
|
|
78
|
+
*/
|
|
79
|
+
toLimbFields(): [Fr, Fr, Fr, Fr] {
|
|
80
|
+
const limb = (start: number) => {
|
|
81
|
+
const buf = Buffer.alloc(32);
|
|
82
|
+
this.buffer.copy(buf, 16, start, start + 16);
|
|
83
|
+
return Fr.fromBuffer(buf);
|
|
84
|
+
};
|
|
85
|
+
return [limb(16), limb(0), limb(48), limb(32)];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Secp256k1 elliptic curve operations.
|
|
5
|
+
*/
|
|
6
|
+
export class Secp256k1 {
|
|
7
|
+
// prettier-ignore
|
|
8
|
+
static generator = Buffer.from([
|
|
9
|
+
0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07,
|
|
10
|
+
0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98,
|
|
11
|
+
0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8,
|
|
12
|
+
0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
|
|
13
|
+
]);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Point generator
|
|
17
|
+
* @returns The generator for the curve.
|
|
18
|
+
*/
|
|
19
|
+
public generator(): Buffer {
|
|
20
|
+
return Secp256k1.generator;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Multiplies a point by a scalar (adds the point `scalar` amount of time).
|
|
25
|
+
* @param point - Point to multiply.
|
|
26
|
+
* @param scalar - Scalar to multiply by.
|
|
27
|
+
* @returns Result of the multiplication.
|
|
28
|
+
*/
|
|
29
|
+
public async mul(point: Uint8Array, scalar: Uint8Array) {
|
|
30
|
+
await BarretenbergSync.initSingleton();
|
|
31
|
+
const api = BarretenbergSync.getSingleton();
|
|
32
|
+
const response = api.secp256k1Mul({
|
|
33
|
+
point: { x: point.subarray(0, 32), y: point.subarray(32, 64) },
|
|
34
|
+
scalar,
|
|
35
|
+
});
|
|
36
|
+
return Buffer.concat([Buffer.from(response.point.x), Buffer.from(response.point.y)]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Gets a random field element.
|
|
41
|
+
* @returns Random field element.
|
|
42
|
+
*/
|
|
43
|
+
public async getRandomFr() {
|
|
44
|
+
await BarretenbergSync.initSingleton();
|
|
45
|
+
const api = BarretenbergSync.getSingleton();
|
|
46
|
+
const response = api.secp256k1GetRandomFr({ dummy: 0 });
|
|
47
|
+
return Buffer.from(response.value);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Converts a 512 bits long buffer to a field.
|
|
52
|
+
* @param uint512Buf - The buffer to convert.
|
|
53
|
+
* @returns Buffer representation of the field element.
|
|
54
|
+
*/
|
|
55
|
+
public async reduce512BufferToFr(uint512Buf: Buffer) {
|
|
56
|
+
await BarretenbergSync.initSingleton();
|
|
57
|
+
const api = BarretenbergSync.getSingleton();
|
|
58
|
+
const response = api.secp256k1Reduce512({ input: uint512Buf });
|
|
59
|
+
return Buffer.from(response.value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Buffer32 } from '@aztec-labs/foundation/buffer';
|
|
2
|
+
import type { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
3
|
+
import type { Signature } from '@aztec-labs/foundation/eth-signature';
|
|
4
|
+
|
|
5
|
+
import { addressFromPrivateKey, makeEthSignDigest, signMessage } from './utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Secp256k1Signer
|
|
9
|
+
*
|
|
10
|
+
* A class for signing messages using a secp256k1 private key.
|
|
11
|
+
* - This is a slim drop in replacement for an Ethereum signer, so it can be used in the same way.
|
|
12
|
+
* - See `utils.ts` for functions that enable recovering addresses and public keys from signatures.
|
|
13
|
+
*/
|
|
14
|
+
export class Secp256k1Signer {
|
|
15
|
+
public readonly address: EthAddress;
|
|
16
|
+
|
|
17
|
+
constructor(private privateKey: Buffer32) {
|
|
18
|
+
this.address = addressFromPrivateKey(privateKey.buffer);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
sign(message: Buffer32): Signature {
|
|
22
|
+
return signMessage(message, this.privateKey.buffer);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Sign a message using the same method as eth_sign
|
|
27
|
+
* @param message - The message to sign.
|
|
28
|
+
* @returns The signature.
|
|
29
|
+
*/
|
|
30
|
+
signMessage(message: Buffer32): Signature {
|
|
31
|
+
const digest = makeEthSignDigest(message);
|
|
32
|
+
return this.sign(digest);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static random(): Secp256k1Signer {
|
|
36
|
+
return new Secp256k1Signer(Buffer32.random());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
2
|
+
|
|
3
|
+
import { Buffer32 } from '../../buffer/buffer32.js';
|
|
4
|
+
import { EthAddress } from '../../eth-address/index.js';
|
|
5
|
+
import { Signature } from '../../eth-signature/eth_signature.js';
|
|
6
|
+
import { keccak256 } from '../keccak/index.js';
|
|
7
|
+
|
|
8
|
+
const ETH_SIGN_PREFIX = '\x19Ethereum Signed Message:\n32';
|
|
9
|
+
|
|
10
|
+
/** Signature recovery options */
|
|
11
|
+
type RecoveryOpts = {
|
|
12
|
+
/**
|
|
13
|
+
* Whether to allow s-values in the high half of the curve (s >= CURVE.n/2).
|
|
14
|
+
* These are discouraged by EIP2 to prevent signature malleability, and outright
|
|
15
|
+
* rejected in OpenZeppelin's ECDSA recover, which we use in our Rollup contract.
|
|
16
|
+
*/
|
|
17
|
+
allowMalleable?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether to allow an y-parity 0-1 bit instead of the standard v value 27-28.
|
|
20
|
+
*/
|
|
21
|
+
allowYParityAsV?: boolean;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export class Secp256k1Error extends Error {
|
|
25
|
+
constructor(message: string, opts?: { cause: unknown }) {
|
|
26
|
+
super(message, opts);
|
|
27
|
+
this.name = 'Secp256k1Error';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// We just hash the message to make it easier to work with in the smart contract.
|
|
32
|
+
export function makeEthSignDigest(message: Buffer32): Buffer32 {
|
|
33
|
+
const prefix = Buffer.from(ETH_SIGN_PREFIX);
|
|
34
|
+
return Buffer32.fromBuffer(keccak256(Buffer.concat([prefix, message.buffer])));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Converts a public key to an address.
|
|
39
|
+
* @param publicKey - The public key to convert.
|
|
40
|
+
* @returns The address.
|
|
41
|
+
*/
|
|
42
|
+
function publicKeyToAddress(publicKey: Buffer): EthAddress {
|
|
43
|
+
const hash = keccak256(publicKey.subarray(1));
|
|
44
|
+
return new EthAddress(hash.subarray(12));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Converts a private key to a public key.
|
|
49
|
+
* @param privateKey - The private key to convert.
|
|
50
|
+
* @returns The public key.
|
|
51
|
+
*/
|
|
52
|
+
export function publicKeyFromPrivateKey(privateKey: Buffer): Buffer {
|
|
53
|
+
return Buffer.from(secp256k1.getPublicKey(privateKey, false));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Converts a private key to an address.
|
|
58
|
+
* @param privateKey - The private key to convert.
|
|
59
|
+
* @returns The address.
|
|
60
|
+
*/
|
|
61
|
+
export function addressFromPrivateKey(privateKey: Buffer): EthAddress {
|
|
62
|
+
const publicKey = publicKeyFromPrivateKey(privateKey);
|
|
63
|
+
return publicKeyToAddress(publicKey);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Recovers an address from a hash and a signature.
|
|
68
|
+
* @param hash - The hash to recover the address from.
|
|
69
|
+
* @param signature - The signature to recover the address from.
|
|
70
|
+
* @param opts - Recovery options.
|
|
71
|
+
* @returns The address.
|
|
72
|
+
* @throws Error if signature recovery fails or if signature is malleable and allowMalleable is false.
|
|
73
|
+
*/
|
|
74
|
+
export function recoverAddress(hash: Buffer32, signature: Signature, opts?: RecoveryOpts): EthAddress {
|
|
75
|
+
try {
|
|
76
|
+
const publicKey = recoverPublicKey(hash, signature, opts);
|
|
77
|
+
return publicKeyToAddress(publicKey);
|
|
78
|
+
} catch (err: unknown) {
|
|
79
|
+
throw new Secp256k1Error(
|
|
80
|
+
`Error recovering Ethereum address from hash ${hash.toString()} and signature ${signature.toString()}`,
|
|
81
|
+
{ cause: err },
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Safely attempts to recover an address from a hash and a signature.
|
|
88
|
+
* @param hash - The hash to recover the address from.
|
|
89
|
+
* @param signature - The signature to recover the address from.
|
|
90
|
+
* @param opts - Recovery options.
|
|
91
|
+
* @returns The address if recovery succeeds, undefined otherwise.
|
|
92
|
+
*/
|
|
93
|
+
export function tryRecoverAddress(hash: Buffer32, signature: Signature, opts?: RecoveryOpts): EthAddress | undefined {
|
|
94
|
+
try {
|
|
95
|
+
const publicKey = recoverPublicKey(hash, signature, opts);
|
|
96
|
+
return publicKeyToAddress(publicKey);
|
|
97
|
+
} catch {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @attribution - viem
|
|
104
|
+
* Converts a yParityOrV value to a recovery bit.
|
|
105
|
+
* @param yParityOrV - The yParityOrV value to convert.
|
|
106
|
+
* @returns The recovery bit.
|
|
107
|
+
*/
|
|
108
|
+
export function toRecoveryBit(yParityOrV: number) {
|
|
109
|
+
if (yParityOrV === 0 || yParityOrV === 1) {
|
|
110
|
+
return yParityOrV;
|
|
111
|
+
}
|
|
112
|
+
if (yParityOrV === 27) {
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
if (yParityOrV === 28) {
|
|
116
|
+
return 1;
|
|
117
|
+
}
|
|
118
|
+
throw new Secp256k1Error(`Invalid yParityOrV value ${yParityOrV}`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Signs a message using ecdsa over the secp256k1 curve.
|
|
123
|
+
* @param message - The message to sign.
|
|
124
|
+
* @param privateKey - The private key to sign the message with.
|
|
125
|
+
* @returns The signature.
|
|
126
|
+
*/
|
|
127
|
+
export function signMessage(message: Buffer32, privateKey: Buffer) {
|
|
128
|
+
const { r, s, recovery } = secp256k1.sign(message.buffer, privateKey);
|
|
129
|
+
return new Signature(Buffer32.fromBigInt(r), Buffer32.fromBigInt(s), recovery ? 28 : 27);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Flips an ECDSA signature.
|
|
134
|
+
* If the signature has a low s-value (s < CURVE.n/2), it flips it to high s-value (CURVE.n - s) and vice versa.
|
|
135
|
+
* Also flips the v value accordingly (27 <-> 28, or 0 <-> 1).
|
|
136
|
+
* This is useful for testing signature malleability handling.
|
|
137
|
+
* @param signature - The signature to flip.
|
|
138
|
+
* @returns A new signature with flipped s-value and v-value.
|
|
139
|
+
*/
|
|
140
|
+
export function flipSignature(signature: Signature): Signature {
|
|
141
|
+
const { r, s, v } = signature;
|
|
142
|
+
const sig = new secp256k1.Signature(r.toBigInt(), s.toBigInt());
|
|
143
|
+
const flippedS = secp256k1.CURVE.n - sig.s;
|
|
144
|
+
|
|
145
|
+
return new Signature(r, Buffer32.fromBigInt(flippedS), flipV(v));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Normalizes an ECDSA signature.
|
|
150
|
+
* If the signature has a high s-value (s >= CURVE.n/2), it flips it to low s-value (CURVE.n - s), and flips v accordingly.
|
|
151
|
+
* If the signature uses a recovery bit of 0/1, it is converted to a v-value 27/28 for ecrecover.
|
|
152
|
+
* @remarks This does not handle post EIP155 tx signatures which embed the chain id in v. Use it only for feeding into ECRECOVER precompiles.
|
|
153
|
+
* @param signature - The signature to normalize.
|
|
154
|
+
*/
|
|
155
|
+
export function normalizeSignature(signature: Signature): Signature {
|
|
156
|
+
const { r, s, v } = signature;
|
|
157
|
+
const sig = new secp256k1.Signature(r.toBigInt(), s.toBigInt());
|
|
158
|
+
if (sig.hasHighS()) {
|
|
159
|
+
const newV = flipV(v);
|
|
160
|
+
const newS = sig.normalizeS().s;
|
|
161
|
+
return new Signature(r, Buffer32.fromBigInt(newS), toVFromYParityOrV(newV));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return new Signature(r, s, toVFromYParityOrV(v));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** Converts a yParityOrV value to a pre-EIP155 v-value 27-28. */
|
|
168
|
+
function toVFromYParityOrV(yParityOrV: number): number {
|
|
169
|
+
if (yParityOrV === 0 || yParityOrV === 1) {
|
|
170
|
+
return yParityOrV + 27;
|
|
171
|
+
} else if (yParityOrV === 27 || yParityOrV === 28) {
|
|
172
|
+
return yParityOrV;
|
|
173
|
+
} else {
|
|
174
|
+
throw new Secp256k1Error(`Invalid yParityOrV value ${yParityOrV}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Flips the recovery bit or v-value */
|
|
179
|
+
function flipV(v: number): number {
|
|
180
|
+
switch (v) {
|
|
181
|
+
case 27:
|
|
182
|
+
return 28;
|
|
183
|
+
case 28:
|
|
184
|
+
return 27;
|
|
185
|
+
case 0:
|
|
186
|
+
return 1;
|
|
187
|
+
case 1:
|
|
188
|
+
return 0;
|
|
189
|
+
default:
|
|
190
|
+
throw new Secp256k1Error(`Invalid v value ${v}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Recovers a public key from a hash and a signature.
|
|
196
|
+
* @param hash - The hash to recover the public key from.
|
|
197
|
+
* @param signature - The signature to recover the public key from.
|
|
198
|
+
* @returns The public key.
|
|
199
|
+
*/
|
|
200
|
+
export function recoverPublicKey(hash: Buffer32, signature: Signature, opts: RecoveryOpts = {}): Buffer {
|
|
201
|
+
const { r, s, v } = signature;
|
|
202
|
+
if (!opts.allowYParityAsV && v !== 27 && v !== 28) {
|
|
203
|
+
throw new Secp256k1Error(`Invalid v value ${v} (expected 27 or 28)`);
|
|
204
|
+
}
|
|
205
|
+
const recoveryBit = toRecoveryBit(v);
|
|
206
|
+
const sig = new secp256k1.Signature(r.toBigInt(), s.toBigInt()).addRecoveryBit(recoveryBit);
|
|
207
|
+
if (!opts.allowMalleable && sig.hasHighS()) {
|
|
208
|
+
throw new Secp256k1Error('Signature has high s-value (malleable signature)');
|
|
209
|
+
}
|
|
210
|
+
const publicKey = sig.recoverPublicKey(hash.buffer).toHex(false);
|
|
211
|
+
return Buffer.from(publicKey, 'hex');
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** Arbitrary hash used for testing signature recoverability. */
|
|
215
|
+
const PROBE_HASH = Buffer32.fromBuffer(keccak256(Buffer.from('signature-recoverability-probe')));
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Generates a random valid ECDSA signature that is recoverable to some address.
|
|
219
|
+
* Since Signature.random() produces real signatures via secp256k1 signing, the result is always
|
|
220
|
+
* recoverable, but we verify defensively by checking tryRecoverAddress.
|
|
221
|
+
*/
|
|
222
|
+
export function generateRecoverableSignature(): Signature {
|
|
223
|
+
for (let i = 0; i < 100; i++) {
|
|
224
|
+
const sig = Signature.random();
|
|
225
|
+
if (tryRecoverAddress(PROBE_HASH, sig) !== undefined) {
|
|
226
|
+
return sig;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
throw new Secp256k1Error('Failed to generate a recoverable signature after 100 attempts');
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Generates a random signature where ECDSA address recovery fails.
|
|
234
|
+
* Uses random r/s values (not from real signing) so that r is unlikely to be a valid secp256k1 x-coordinate.
|
|
235
|
+
*/
|
|
236
|
+
export function generateUnrecoverableSignature(): Signature {
|
|
237
|
+
for (let i = 0; i < 100; i++) {
|
|
238
|
+
const sig = new Signature(Buffer32.random(), Buffer32.random(), 27);
|
|
239
|
+
if (tryRecoverAddress(PROBE_HASH, sig) === undefined) {
|
|
240
|
+
return sig;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
throw new Secp256k1Error('Failed to generate an unrecoverable signature after 100 attempts');
|
|
244
|
+
}
|