@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,276 @@
|
|
|
1
|
+
import { randomBytes } from '@aztec-labs/foundation/crypto/random';
|
|
2
|
+
import { createCipheriv, createDecipheriv, createHash, pbkdf2, pbkdf2Sync, randomUUID } from 'crypto';
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { promisify } from 'util';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* BN254 Keystore Format
|
|
9
|
+
*
|
|
10
|
+
* Implements encryption and decryption of keystores for BN254 BLS private keys
|
|
11
|
+
* using PBKDF2 and AES-128-CTR. This format is inspired by EIP-2335 but adapted
|
|
12
|
+
* for BN254 keys rather than BLS12-381.
|
|
13
|
+
*
|
|
14
|
+
* @see https://eips.ethereum.org/EIPS/eip-2335
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Zod schema for validating BN254 keystore structure
|
|
19
|
+
*/
|
|
20
|
+
const bn254KeystoreSchema = z.object({
|
|
21
|
+
crypto: z.object({
|
|
22
|
+
kdf: z.object({
|
|
23
|
+
function: z.literal('pbkdf2'),
|
|
24
|
+
params: z.object({
|
|
25
|
+
dklen: z.number(),
|
|
26
|
+
c: z.number(),
|
|
27
|
+
prf: z.string(),
|
|
28
|
+
salt: z.string(),
|
|
29
|
+
}),
|
|
30
|
+
message: z.string(),
|
|
31
|
+
}),
|
|
32
|
+
checksum: z.object({
|
|
33
|
+
function: z.literal('sha256'),
|
|
34
|
+
params: z.object({}),
|
|
35
|
+
message: z.string(),
|
|
36
|
+
}),
|
|
37
|
+
cipher: z.object({
|
|
38
|
+
function: z.literal('aes-128-ctr'),
|
|
39
|
+
params: z.object({
|
|
40
|
+
iv: z.string(),
|
|
41
|
+
}),
|
|
42
|
+
message: z.string(),
|
|
43
|
+
}),
|
|
44
|
+
}),
|
|
45
|
+
description: z.string().optional(),
|
|
46
|
+
pubkey: z.string(),
|
|
47
|
+
path: z.string(),
|
|
48
|
+
uuid: z.string(),
|
|
49
|
+
version: z.number(),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Error thrown when BN254 keystore operations fail
|
|
54
|
+
*/
|
|
55
|
+
export class Bn254KeystoreError extends Error {
|
|
56
|
+
constructor(
|
|
57
|
+
message: string,
|
|
58
|
+
public override cause?: Error,
|
|
59
|
+
) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = 'Bn254KeystoreError';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type Bn254Keystore = z.infer<typeof bn254KeystoreSchema>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The JSON structure of a BN254 keystore file.
|
|
69
|
+
* @deprecated Use the inferred type from bn254KeystoreSchema instead
|
|
70
|
+
*/
|
|
71
|
+
export interface Bn254KeystoreInterface {
|
|
72
|
+
crypto: {
|
|
73
|
+
kdf: {
|
|
74
|
+
function: 'pbkdf2';
|
|
75
|
+
params: {
|
|
76
|
+
dklen: number;
|
|
77
|
+
c: number;
|
|
78
|
+
prf: string;
|
|
79
|
+
salt: string;
|
|
80
|
+
};
|
|
81
|
+
message: string;
|
|
82
|
+
};
|
|
83
|
+
checksum: {
|
|
84
|
+
function: 'sha256';
|
|
85
|
+
params: Record<string, never>;
|
|
86
|
+
message: string;
|
|
87
|
+
};
|
|
88
|
+
cipher: {
|
|
89
|
+
function: 'aes-128-ctr';
|
|
90
|
+
params: {
|
|
91
|
+
iv: string;
|
|
92
|
+
};
|
|
93
|
+
message: string;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
description: string;
|
|
97
|
+
pubkey: string;
|
|
98
|
+
path: string;
|
|
99
|
+
uuid: string;
|
|
100
|
+
version: number;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const pbkdf2Async = promisify(pbkdf2);
|
|
104
|
+
|
|
105
|
+
function createBn254KeystoreFromDerivedKey(
|
|
106
|
+
privateKeyHex: string,
|
|
107
|
+
pubkeyHex: string,
|
|
108
|
+
derivationPath: string,
|
|
109
|
+
salt: Buffer,
|
|
110
|
+
iv: Buffer,
|
|
111
|
+
dk: Buffer,
|
|
112
|
+
): Bn254Keystore {
|
|
113
|
+
const ensureHex = (hex: string) => hex.replace(/^0x/i, '');
|
|
114
|
+
const privHex = ensureHex(privateKeyHex);
|
|
115
|
+
if (!/^[0-9a-fA-F]{64}$/.test(privHex)) {
|
|
116
|
+
throw new Error('BLS private key must be 32-byte hex');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const cipherKey = dk.subarray(0, 16);
|
|
120
|
+
const cipher = createCipheriv('aes-128-ctr', cipherKey, iv);
|
|
121
|
+
const plaintext = Buffer.from(privHex, 'hex');
|
|
122
|
+
const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
123
|
+
|
|
124
|
+
const checksum = createHash('sha256')
|
|
125
|
+
.update(Buffer.concat([dk.subarray(16, 32), ciphertext]))
|
|
126
|
+
.digest();
|
|
127
|
+
|
|
128
|
+
const uuid = randomUUID();
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
crypto: {
|
|
132
|
+
kdf: {
|
|
133
|
+
function: 'pbkdf2',
|
|
134
|
+
params: { dklen: 32, c: 262144, prf: 'hmac-sha256', salt: salt.toString('hex') },
|
|
135
|
+
message: '',
|
|
136
|
+
},
|
|
137
|
+
checksum: {
|
|
138
|
+
function: 'sha256',
|
|
139
|
+
params: {},
|
|
140
|
+
message: checksum.toString('hex'),
|
|
141
|
+
},
|
|
142
|
+
cipher: {
|
|
143
|
+
function: 'aes-128-ctr',
|
|
144
|
+
params: { iv: iv.toString('hex') },
|
|
145
|
+
message: ciphertext.toString('hex'),
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
description: ensureHex(pubkeyHex),
|
|
149
|
+
pubkey: pubkeyHex,
|
|
150
|
+
path: derivationPath ?? '',
|
|
151
|
+
uuid,
|
|
152
|
+
version: 4,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Creates a BN254 keystore object for a BN254 BLS private key.
|
|
158
|
+
*
|
|
159
|
+
* Uses PBKDF2 with SHA-256 for key derivation and AES-128-CTR for encryption,
|
|
160
|
+
* following the EIP-2335 specification format.
|
|
161
|
+
*
|
|
162
|
+
* @param password - Password for encrypting the private key
|
|
163
|
+
* @param privateKeyHex - Private key as 0x-prefixed hex string (32 bytes)
|
|
164
|
+
* @param pubkeyHex - Public key as hex string (compressed or uncompressed)
|
|
165
|
+
* @param derivationPath - BIP-44 style derivation path (e.g., "m/12381/3600/0/0/0")
|
|
166
|
+
* @returns BN254 keystore object ready to be serialized to JSON
|
|
167
|
+
* @throws Error if private key is not 32-byte hex
|
|
168
|
+
*/
|
|
169
|
+
export async function createBn254Keystore(
|
|
170
|
+
password: string,
|
|
171
|
+
privateKeyHex: string,
|
|
172
|
+
pubkeyHex: string,
|
|
173
|
+
derivationPath: string,
|
|
174
|
+
): Promise<Bn254Keystore> {
|
|
175
|
+
const salt = randomBytes(32);
|
|
176
|
+
const iv = randomBytes(16);
|
|
177
|
+
const dk = await pbkdf2Async(Buffer.from(password.normalize('NFKD'), 'utf8'), salt, 262144, 32, 'sha256');
|
|
178
|
+
return createBn254KeystoreFromDerivedKey(privateKeyHex, pubkeyHex, derivationPath, salt, iv, dk);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Loads and validates a BN254 keystore file.
|
|
183
|
+
*
|
|
184
|
+
* @param filePath - Path to the BN254 keystore JSON file
|
|
185
|
+
* @returns Validated keystore object
|
|
186
|
+
* @throws Bn254KeystoreError if file cannot be read or validated
|
|
187
|
+
*/
|
|
188
|
+
export function loadBn254Keystore(filePath: string): Bn254Keystore {
|
|
189
|
+
try {
|
|
190
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
191
|
+
const json = JSON.parse(content);
|
|
192
|
+
return bn254KeystoreSchema.parse(json);
|
|
193
|
+
} catch (error) {
|
|
194
|
+
if (error instanceof SyntaxError) {
|
|
195
|
+
throw new Bn254KeystoreError(`Invalid JSON in keystore file: ${filePath}`, error);
|
|
196
|
+
}
|
|
197
|
+
if (error && typeof error === 'object' && 'issues' in error) {
|
|
198
|
+
const issues = (error as any).issues ?? [];
|
|
199
|
+
const message = issues.map((e: any) => `${e.message} at ${e.path?.join('.') ?? 'root'}`).join('; ');
|
|
200
|
+
throw new Bn254KeystoreError(`Invalid BN254 keystore format: ${message}`);
|
|
201
|
+
}
|
|
202
|
+
throw new Bn254KeystoreError(`Failed to load keystore from ${filePath}: ${String(error)}`, error as Error);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Decrypts a BN254 BLS private key from a keystore file.
|
|
208
|
+
*
|
|
209
|
+
* @param filePath - Path to the BN254 keystore JSON file
|
|
210
|
+
* @param password - Password to decrypt the keystore
|
|
211
|
+
* @returns Decrypted private key as 0x-prefixed hex string (32 bytes)
|
|
212
|
+
* @throws Bn254KeystoreError if decryption fails or checksum is invalid
|
|
213
|
+
*/
|
|
214
|
+
export function decryptBn254Keystore(filePath: string, password: string): string {
|
|
215
|
+
const keystore = loadBn254Keystore(filePath);
|
|
216
|
+
return decryptBn254KeystoreFromObject(keystore, password);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Decrypts a BN254 BLS private key from a keystore object.
|
|
221
|
+
*
|
|
222
|
+
* @param keystore - BN254 keystore object
|
|
223
|
+
* @param password - Password to decrypt the keystore
|
|
224
|
+
* @returns Decrypted private key as 0x-prefixed hex string (32 bytes)
|
|
225
|
+
* @throws Bn254KeystoreError if decryption fails or checksum is invalid
|
|
226
|
+
*/
|
|
227
|
+
export function decryptBn254KeystoreFromObject(keystore: Bn254Keystore, password: string): string {
|
|
228
|
+
try {
|
|
229
|
+
const { crypto } = keystore;
|
|
230
|
+
|
|
231
|
+
// Only support PBKDF2 + AES-128-CTR (as per our implementation)
|
|
232
|
+
if (crypto.kdf.function !== 'pbkdf2') {
|
|
233
|
+
throw new Bn254KeystoreError(`Unsupported KDF function: ${crypto.kdf.function}`);
|
|
234
|
+
}
|
|
235
|
+
if (crypto.cipher.function !== 'aes-128-ctr') {
|
|
236
|
+
throw new Bn254KeystoreError(`Unsupported cipher function: ${crypto.cipher.function}`);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Derive decryption key using PBKDF2
|
|
240
|
+
const salt = Buffer.from(crypto.kdf.params.salt, 'hex');
|
|
241
|
+
const dk = pbkdf2Sync(
|
|
242
|
+
Buffer.from(password.normalize('NFKD'), 'utf8'),
|
|
243
|
+
salt,
|
|
244
|
+
crypto.kdf.params.c,
|
|
245
|
+
crypto.kdf.params.dklen,
|
|
246
|
+
'sha256',
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
const cipherKey = dk.subarray(0, 16);
|
|
250
|
+
const checksumKey = dk.subarray(16, 32);
|
|
251
|
+
|
|
252
|
+
// Decrypt the ciphertext
|
|
253
|
+
const iv = Buffer.from(crypto.cipher.params.iv, 'hex');
|
|
254
|
+
const ciphertext = Buffer.from(crypto.cipher.message, 'hex');
|
|
255
|
+
const decipher = createDecipheriv('aes-128-ctr', cipherKey, iv);
|
|
256
|
+
const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
257
|
+
|
|
258
|
+
// Verify checksum
|
|
259
|
+
const computedChecksum = createHash('sha256')
|
|
260
|
+
.update(Buffer.concat([checksumKey, ciphertext]))
|
|
261
|
+
.digest();
|
|
262
|
+
const expectedChecksum = Buffer.from(crypto.checksum.message, 'hex');
|
|
263
|
+
|
|
264
|
+
if (!computedChecksum.equals(expectedChecksum)) {
|
|
265
|
+
throw new Bn254KeystoreError('Checksum verification failed - incorrect password or corrupted keystore');
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Return as 0x-prefixed hex
|
|
269
|
+
return '0x' + decrypted.toString('hex');
|
|
270
|
+
} catch (error) {
|
|
271
|
+
if (error instanceof Bn254KeystoreError) {
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
throw new Bn254KeystoreError(`Failed to decrypt keystore: ${String(error)}`, error as Error);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import type { Hex } from '@aztec-labs/foundation/string';
|
|
3
|
+
import { mod } from '@noble/curves/abstract/modular';
|
|
4
|
+
import { bytesToNumberBE } from '@noble/curves/abstract/utils';
|
|
5
|
+
import { hmac } from '@noble/hashes/hmac';
|
|
6
|
+
import { sha512 } from '@noble/hashes/sha2';
|
|
7
|
+
import { mnemonicToSeedSync } from '@scure/bip39';
|
|
8
|
+
|
|
9
|
+
export function deriveBlsPrivateKey(mnemonic: string | undefined, ikm: string | undefined, path: string): Hex<32> {
|
|
10
|
+
if (ikm) {
|
|
11
|
+
return deriveBlsKeyFromEntropy(ikm, path) as Hex<32>;
|
|
12
|
+
}
|
|
13
|
+
if (!mnemonic) {
|
|
14
|
+
throw new Error('Either mnemonic or ikm must be provided for BLS derivation');
|
|
15
|
+
}
|
|
16
|
+
return deriveBlsKeyFromMnemonic(mnemonic, path) as Hex<32>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Deterministically derive a BN254 BLS private key from mnemonic and derivation path.
|
|
21
|
+
* Returns a 0x-prefixed 32-byte hex string representing an Fr in [1, r-1].
|
|
22
|
+
*/
|
|
23
|
+
export function deriveBlsKeyFromMnemonic(mnemonic: string, derivationPath: string, passphrase = ''): string {
|
|
24
|
+
const seed = Buffer.from(mnemonicToSeedSync(mnemonic, passphrase)); // 64 bytes
|
|
25
|
+
const data = Buffer.concat([Buffer.from([0x00]), seed, Buffer.from(derivationPath, 'utf8')]);
|
|
26
|
+
const sk = deriveBn254ScalarFromData(data);
|
|
27
|
+
return `0x${toFixed32(sk).toString('hex')}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Deterministically derive a BN254 BLS private key from input keying material (IKM) and derivation path.
|
|
32
|
+
* Returns a 0x-prefixed 32-byte hex string representing an Fr in [1, r-1].
|
|
33
|
+
*/
|
|
34
|
+
export function deriveBlsKeyFromEntropy(ikm: string, derivationPath: string): string {
|
|
35
|
+
const ikmBytes = parseIkm(ikm);
|
|
36
|
+
const data = Buffer.concat([Buffer.from([0x01]), ikmBytes, Buffer.from(derivationPath, 'utf8')]);
|
|
37
|
+
const sk = deriveBn254ScalarFromData(data);
|
|
38
|
+
return `0x${toFixed32(sk).toString('hex')}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function deriveBn254ScalarFromData(data: Buffer): bigint {
|
|
42
|
+
// Domain-separated HMAC-SHA512, then map to BN254 Fr using noble modular math. Retry on zero.
|
|
43
|
+
const domainKey = Buffer.from('Aztec bn254 key', 'utf8');
|
|
44
|
+
for (let counter = 0; ; counter = (counter + 1) & 0xff) {
|
|
45
|
+
const msg = counter === 0 ? data : Buffer.concat([data, Buffer.from([counter])]);
|
|
46
|
+
const digest = hmac(sha512, domainKey, msg); // 64 bytes
|
|
47
|
+
const x = bytesToNumberBE(digest);
|
|
48
|
+
const sk = mod(x, Fr.MODULUS);
|
|
49
|
+
if (sk !== 0n) {
|
|
50
|
+
return sk;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function parseIkm(ikm: string): Buffer {
|
|
56
|
+
const hexMatch = ikm.replace(/^0x/i, '');
|
|
57
|
+
if (/^[0-9a-fA-F]+$/.test(hexMatch) && hexMatch.length >= 2) {
|
|
58
|
+
const normalized = hexMatch.length % 2 === 1 ? `0${hexMatch}` : hexMatch;
|
|
59
|
+
return Buffer.from(normalized, 'hex');
|
|
60
|
+
}
|
|
61
|
+
return Buffer.from(ikm, 'utf8');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function toFixed32(x: bigint): Buffer {
|
|
65
|
+
const hex = x.toString(16);
|
|
66
|
+
const padded = hex.length % 2 === 1 ? `0${hex}` : hex;
|
|
67
|
+
const buf = Buffer.from(padded, 'hex');
|
|
68
|
+
if (buf.length === 32) {
|
|
69
|
+
return buf;
|
|
70
|
+
}
|
|
71
|
+
if (buf.length < 32) {
|
|
72
|
+
return Buffer.concat([Buffer.alloc(32 - buf.length, 0), buf]);
|
|
73
|
+
}
|
|
74
|
+
// Should never happen since x < bn254.Fr.ORDER < 2^256, but guard anyway
|
|
75
|
+
return buf.subarray(buf.length - 32);
|
|
76
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Fr } from '../../curves/bn254/field.js';
|
|
2
|
+
import { Bn254G1Point, Bn254G2Point } from '../../curves/bn254/point.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* BN254 utility functions for point operations.
|
|
6
|
+
* Provides compression, decompression, and public key generation for the BN254 curve.
|
|
7
|
+
* Uses the bb.js Barretenberg backend for point operations.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generate a compressed BN254 G1 public key from a private key.
|
|
12
|
+
*
|
|
13
|
+
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
14
|
+
* @returns Compressed G1 point (32 bytes with sign bit in MSB)
|
|
15
|
+
*/
|
|
16
|
+
export async function computeBn254G1PublicKeyCompressed(privateKeyHex: string): Promise<string> {
|
|
17
|
+
const sk = BigInt(privateKeyHex);
|
|
18
|
+
const skReduced = sk % Fr.MODULUS;
|
|
19
|
+
|
|
20
|
+
// Generate G1 point on BN254 curve using bb.js
|
|
21
|
+
const scalar = Fr.fromString(skReduced.toString());
|
|
22
|
+
const pk1 = await Bn254G1Point.generator(scalar);
|
|
23
|
+
|
|
24
|
+
// Compress the point using the primitive method
|
|
25
|
+
return '0x' + pk1.compress().toString('hex');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Generate uncompressed BN254 G1 public key from a private key.
|
|
30
|
+
*
|
|
31
|
+
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
32
|
+
* @returns G1 point in affine coordinates
|
|
33
|
+
*/
|
|
34
|
+
export async function computeBn254G1PublicKey(privateKeyHex: string): Promise<{ x: bigint; y: bigint }> {
|
|
35
|
+
const sk = BigInt(privateKeyHex);
|
|
36
|
+
const skReduced = sk % Fr.MODULUS;
|
|
37
|
+
|
|
38
|
+
const scalar = Fr.fromString(skReduced.toString());
|
|
39
|
+
const pk1 = await Bn254G1Point.generator(scalar);
|
|
40
|
+
|
|
41
|
+
return { x: pk1.x.toBigInt(), y: pk1.y.toBigInt() };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Generate BN254 G2 public key from a private key.
|
|
46
|
+
*
|
|
47
|
+
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
48
|
+
* @returns G2 point in affine coordinates
|
|
49
|
+
*/
|
|
50
|
+
export async function computeBn254G2PublicKey(privateKeyHex: string): Promise<{
|
|
51
|
+
x: { c0: bigint; c1: bigint };
|
|
52
|
+
y: { c0: bigint; c1: bigint };
|
|
53
|
+
}> {
|
|
54
|
+
const sk = BigInt(privateKeyHex);
|
|
55
|
+
const skReduced = sk % Fr.MODULUS;
|
|
56
|
+
|
|
57
|
+
const scalar = Fr.fromString(skReduced.toString());
|
|
58
|
+
const pk2 = await Bn254G2Point.generator(scalar);
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
x: { c0: pk2.x[0].toBigInt(), c1: pk2.x[1].toBigInt() },
|
|
62
|
+
y: { c0: pk2.y[0].toBigInt(), c1: pk2.y[1].toBigInt() },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
2
|
+
|
|
3
|
+
import { EcdsaSignature } from './signature.js';
|
|
4
|
+
|
|
5
|
+
export * from './signature.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ECDSA signature construction and helper operations.
|
|
9
|
+
* TODO: Replace with codegen api on bb.js.
|
|
10
|
+
*/
|
|
11
|
+
export class Ecdsa {
|
|
12
|
+
constructor(private curve: 'secp256k1' | 'secp256r1' = 'secp256k1') {}
|
|
13
|
+
/**
|
|
14
|
+
* Computes a secp256k1 public key from a private key.
|
|
15
|
+
* @param privateKey - Secp256k1 private key.
|
|
16
|
+
* @returns A secp256k1 public key.
|
|
17
|
+
*/
|
|
18
|
+
public async computePublicKey(privateKey: Buffer): Promise<Buffer> {
|
|
19
|
+
await BarretenbergSync.initSingleton();
|
|
20
|
+
const api = BarretenbergSync.getSingleton();
|
|
21
|
+
const response =
|
|
22
|
+
this.curve === 'secp256r1'
|
|
23
|
+
? api.ecdsaSecp256r1ComputePublicKey({ privateKey })
|
|
24
|
+
: api.ecdsaSecp256k1ComputePublicKey({ privateKey });
|
|
25
|
+
return Buffer.concat([Buffer.from(response.publicKey.x), Buffer.from(response.publicKey.y)]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Constructs an ECDSA signature given a msg and a private key.
|
|
30
|
+
* @param msg - Message over which the signature is constructed.
|
|
31
|
+
* @param privateKey - The secp256k1 private key of the signer.
|
|
32
|
+
* @returns An ECDSA signature of the form (r, s, v).
|
|
33
|
+
*/
|
|
34
|
+
public async constructSignature(msg: Uint8Array, privateKey: Buffer) {
|
|
35
|
+
await BarretenbergSync.initSingleton();
|
|
36
|
+
const api = BarretenbergSync.getSingleton();
|
|
37
|
+
const response =
|
|
38
|
+
this.curve === 'secp256r1'
|
|
39
|
+
? api.ecdsaSecp256r1ConstructSignature({ message: msg, privateKey })
|
|
40
|
+
: api.ecdsaSecp256k1ConstructSignature({ message: msg, privateKey });
|
|
41
|
+
return new EcdsaSignature(Buffer.from(response.r), Buffer.from(response.s), Buffer.from([response.v]));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Recovers a secp256k1 public key from an ECDSA signature (similar to ecrecover).
|
|
46
|
+
* @param msg - Message over which the signature was constructed.
|
|
47
|
+
* @param sig - The ECDSA signature.
|
|
48
|
+
* @returns The secp256k1 public key of the signer.
|
|
49
|
+
*/
|
|
50
|
+
public async recoverPublicKey(msg: Uint8Array, sig: EcdsaSignature): Promise<Buffer> {
|
|
51
|
+
await BarretenbergSync.initSingleton();
|
|
52
|
+
const api = BarretenbergSync.getSingleton();
|
|
53
|
+
const response =
|
|
54
|
+
this.curve === 'secp256r1'
|
|
55
|
+
? api.ecdsaSecp256r1RecoverPublicKey({ message: msg, r: sig.r, s: sig.s, v: sig.v[0] })
|
|
56
|
+
: api.ecdsaSecp256k1RecoverPublicKey({ message: msg, r: sig.r, s: sig.s, v: sig.v[0] });
|
|
57
|
+
return Buffer.concat([Buffer.from(response.publicKey.x), Buffer.from(response.publicKey.y)]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Verifies and ECDSA signature given a secp256k1 public key.
|
|
62
|
+
* @param msg - Message over which the signature was constructed.
|
|
63
|
+
* @param pubKey - The secp256k1 public key of the signer.
|
|
64
|
+
* @param sig - The ECDSA signature.
|
|
65
|
+
* @returns True or false.
|
|
66
|
+
*/
|
|
67
|
+
public async verifySignature(msg: Uint8Array, pubKey: Buffer, sig: EcdsaSignature) {
|
|
68
|
+
await BarretenbergSync.initSingleton();
|
|
69
|
+
const api = BarretenbergSync.getSingleton();
|
|
70
|
+
const response =
|
|
71
|
+
this.curve === 'secp256r1'
|
|
72
|
+
? api.ecdsaSecp256r1VerifySignature({
|
|
73
|
+
message: msg,
|
|
74
|
+
publicKey: { x: pubKey.subarray(0, 32), y: pubKey.subarray(32, 64) },
|
|
75
|
+
r: sig.r,
|
|
76
|
+
s: sig.s,
|
|
77
|
+
v: sig.v[0],
|
|
78
|
+
})
|
|
79
|
+
: api.ecdsaSecp256k1VerifySignature({
|
|
80
|
+
message: msg,
|
|
81
|
+
publicKey: { x: pubKey.subarray(0, 32), y: pubKey.subarray(32, 64) },
|
|
82
|
+
r: sig.r,
|
|
83
|
+
s: sig.s,
|
|
84
|
+
v: sig.v[0],
|
|
85
|
+
});
|
|
86
|
+
return response.verified;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { toBufferBE } from '@aztec-labs/foundation/bigint-buffer';
|
|
2
|
+
import { randomBytes } from '@aztec-labs/foundation/crypto/random';
|
|
3
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
4
|
+
import { mapTuple } from '@aztec-labs/foundation/serialize';
|
|
5
|
+
|
|
6
|
+
import type { Signature } from '../signature/index.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* ECDSA signature used for transactions.
|
|
10
|
+
* @see cpp/barretenberg/cpp/src/barretenberg/crypto/ecdsa/ecdsa.hpp
|
|
11
|
+
*/
|
|
12
|
+
export class EcdsaSignature implements Signature {
|
|
13
|
+
constructor(
|
|
14
|
+
/**
|
|
15
|
+
* The r byte-array (32 bytes) in an ECDSA signature.
|
|
16
|
+
*/
|
|
17
|
+
public r: Buffer,
|
|
18
|
+
/**
|
|
19
|
+
* The s byte-array (32 bytes) in an ECDSA signature.
|
|
20
|
+
*/
|
|
21
|
+
public s: Buffer,
|
|
22
|
+
/**
|
|
23
|
+
* The recovery id (1 byte) in an ECDSA signature.
|
|
24
|
+
*/
|
|
25
|
+
public v: Buffer,
|
|
26
|
+
) {
|
|
27
|
+
if (r.length != 32) {
|
|
28
|
+
throw new Error(`Invalid length of 'r' in ECDSA signature. Expected 32, got ${s.length}`);
|
|
29
|
+
}
|
|
30
|
+
if (s.length != 32) {
|
|
31
|
+
throw new Error(`Invalid length of 's' in ECDSA signature. Expected 32, got ${r.length}`);
|
|
32
|
+
}
|
|
33
|
+
if (v.length != 1) {
|
|
34
|
+
throw new Error(`Invalid length of 'v' in ECDSA signature. Expected 1, got ${v.length}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Converts an ECDSA signature to a buffer.
|
|
40
|
+
* @returns A buffer.
|
|
41
|
+
*/
|
|
42
|
+
toBuffer() {
|
|
43
|
+
return Buffer.concat([this.r, this.s, this.v]);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Deserializes the signature from a buffer.
|
|
48
|
+
* @param buffer - The buffer from which to deserialize the signature.
|
|
49
|
+
* @returns The ECDSA signature
|
|
50
|
+
*/
|
|
51
|
+
public static fromBuffer(buffer: Buffer) {
|
|
52
|
+
return new EcdsaSignature(buffer.subarray(0, 32), buffer.subarray(32, 64), buffer.subarray(64, 65));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new instance from bigint r and s values.
|
|
57
|
+
* @param r - r.
|
|
58
|
+
* @param s - s.
|
|
59
|
+
* @param v - v.
|
|
60
|
+
* @returns The resulting signature.
|
|
61
|
+
*/
|
|
62
|
+
public static fromBigInts(r: bigint, s: bigint, v: number) {
|
|
63
|
+
return new EcdsaSignature(toBufferBE(r, 32), toBufferBE(s, 32), Buffer.from([v]));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Generate a random ECDSA signature for testing.
|
|
68
|
+
* @returns A randomly generated ECDSA signature (not a valid one).
|
|
69
|
+
*/
|
|
70
|
+
public static random() {
|
|
71
|
+
return new EcdsaSignature(randomBytes(32), randomBytes(32), Buffer.from([27]));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Convert an ECDSA signature to a buffer.
|
|
76
|
+
* @returns A 65-character string of the form 0x<r><s><v>.
|
|
77
|
+
*/
|
|
78
|
+
toString() {
|
|
79
|
+
return `0x${this.toBuffer().toString('hex')}`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Converts the signature to an array of fields.
|
|
84
|
+
* @param includeV - Determines whether the 'v' term is included
|
|
85
|
+
* @returns The signature components as an array of fields
|
|
86
|
+
*/
|
|
87
|
+
toFields(includeV = false): Fr[] {
|
|
88
|
+
const sig = this.toBuffer();
|
|
89
|
+
|
|
90
|
+
const buf1 = Buffer.alloc(32);
|
|
91
|
+
const buf2 = Buffer.alloc(32);
|
|
92
|
+
const buf3 = Buffer.alloc(32);
|
|
93
|
+
|
|
94
|
+
sig.copy(buf1, 1, 0, 31);
|
|
95
|
+
sig.copy(buf2, 1, 31, 62);
|
|
96
|
+
sig.copy(buf3, 1, 62, includeV ? 65 : 64);
|
|
97
|
+
|
|
98
|
+
return mapTuple([buf1, buf2, buf3], Fr.fromBuffer);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
2
|
+
|
|
3
|
+
import { 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
|
+
/**
|
|
8
|
+
* Grumpkin elliptic curve operations.
|
|
9
|
+
*/
|
|
10
|
+
export class Grumpkin {
|
|
11
|
+
// prettier-ignore
|
|
12
|
+
static readonly generator = Point.fromBuffer(Buffer.from([
|
|
13
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
14
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
|
15
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0x13, 0x5e, 0x75, 0x06, 0xa4, 0x5d, 0x63,
|
|
16
|
+
0x2d, 0x27, 0x0d, 0x45, 0xf1, 0x18, 0x12, 0x94, 0x83, 0x3f, 0xc4, 0x8d, 0x82, 0x3f, 0x27, 0x2c,
|
|
17
|
+
]));
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Multiplies a point by a scalar (adds the point `scalar` amount of times).
|
|
21
|
+
* @param point - Point to multiply.
|
|
22
|
+
* @param scalar - Scalar to multiply by.
|
|
23
|
+
* @returns Result of the multiplication.
|
|
24
|
+
*/
|
|
25
|
+
public static async mul(point: Point, scalar: GrumpkinScalar): Promise<Point> {
|
|
26
|
+
await BarretenbergSync.initSingleton();
|
|
27
|
+
const api = BarretenbergSync.getSingleton();
|
|
28
|
+
const response = api.grumpkinMul({
|
|
29
|
+
point: { x: point.x.toBuffer(), y: point.y.toBuffer() },
|
|
30
|
+
scalar: scalar.toBuffer(),
|
|
31
|
+
});
|
|
32
|
+
return Point.fromBuffer(Buffer.concat([Buffer.from(response.point.x), Buffer.from(response.point.y)]));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Add two points.
|
|
37
|
+
* @param a - Point a in the addition
|
|
38
|
+
* @param b - Point b to add to a
|
|
39
|
+
* @returns Result of the addition.
|
|
40
|
+
*/
|
|
41
|
+
public static async add(a: Point, b: Point): Promise<Point> {
|
|
42
|
+
await BarretenbergSync.initSingleton();
|
|
43
|
+
const api = BarretenbergSync.getSingleton();
|
|
44
|
+
const response = api.grumpkinAdd({
|
|
45
|
+
pointA: { x: a.x.toBuffer(), y: a.y.toBuffer() },
|
|
46
|
+
pointB: { x: b.x.toBuffer(), y: b.y.toBuffer() },
|
|
47
|
+
});
|
|
48
|
+
return Point.fromBuffer(Buffer.concat([Buffer.from(response.point.x), Buffer.from(response.point.y)]));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Multiplies a set of points by a scalar.
|
|
53
|
+
* @param points - Points to multiply.
|
|
54
|
+
* @param scalar - Scalar to multiply by.
|
|
55
|
+
* @returns Points multiplied by the scalar.
|
|
56
|
+
*/
|
|
57
|
+
public static async batchMul(points: Point[], scalar: GrumpkinScalar) {
|
|
58
|
+
await BarretenbergSync.initSingleton();
|
|
59
|
+
const api = BarretenbergSync.getSingleton();
|
|
60
|
+
const response = api.grumpkinBatchMul({
|
|
61
|
+
points: points.map(p => ({ x: p.x.toBuffer(), y: p.y.toBuffer() })),
|
|
62
|
+
scalar: scalar.toBuffer(),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return response.points.map(p => Point.fromBuffer(Buffer.concat([Buffer.from(p.x), Buffer.from(p.y)])));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Gets a random field element.
|
|
70
|
+
* @returns Random field element.
|
|
71
|
+
*/
|
|
72
|
+
public static async getRandomFr(): Promise<Fr> {
|
|
73
|
+
await BarretenbergSync.initSingleton();
|
|
74
|
+
const api = BarretenbergSync.getSingleton();
|
|
75
|
+
const response = api.grumpkinGetRandomFr({ dummy: 0 });
|
|
76
|
+
return Fr.fromBuffer(Buffer.from(response.value));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Converts a 512 bits long buffer to a field.
|
|
81
|
+
* @param uint512Buf - The buffer to convert.
|
|
82
|
+
* @returns Buffer representation of the field element.
|
|
83
|
+
*/
|
|
84
|
+
public static async reduce512BufferToFr(uint512Buf: Buffer): Promise<Fr> {
|
|
85
|
+
await BarretenbergSync.initSingleton();
|
|
86
|
+
const api = BarretenbergSync.getSingleton();
|
|
87
|
+
const response = api.grumpkinReduce512({ input: uint512Buf });
|
|
88
|
+
return Fr.fromBuffer(Buffer.from(response.value));
|
|
89
|
+
}
|
|
90
|
+
}
|