wowok 2.1.40 → 2.1.41
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/dist/cjs/bcs/bcs.js +1 -253
- package/dist/cjs/bcs/effects.js +1 -199
- package/dist/cjs/bcs/index.js +1 -51
- package/dist/cjs/bcs/pure.js +1 -36
- package/dist/cjs/bcs/type-tag-serializer.js +1 -104
- package/dist/cjs/bcs/types.js +1 -3
- package/dist/cjs/client/index.js +1 -4
- package/dist/cjs/client/network.js +1 -15
- package/dist/cjs/cryptography/index.js +1 -6
- package/dist/cjs/cryptography/intent.js +1 -14
- package/dist/cjs/cryptography/keypair.js +1 -74
- package/dist/cjs/cryptography/mnemonics.js +1 -20
- package/dist/cjs/cryptography/publickey.js +1 -80
- package/dist/cjs/cryptography/signature-scheme.js +1 -22
- package/dist/cjs/cryptography/signature.js +1 -41
- package/dist/cjs/experimental/cache.js +1 -58
- package/dist/cjs/experimental/client.js +1 -19
- package/dist/cjs/experimental/core.js +1 -80
- package/dist/cjs/experimental/errors.js +1 -24
- package/dist/cjs/experimental/index.js +1 -5
- package/dist/cjs/experimental/persistent-storage.js +1 -220
- package/dist/cjs/experimental/persistent-storage.test.js +1 -144
- package/dist/cjs/experimental/transports/utils.js +1 -96
- package/dist/cjs/experimental/types.js +1 -1
- package/dist/cjs/faucet/faucet.js +1 -99
- package/dist/cjs/faucet/index.js +1 -1
- package/dist/cjs/grpc/client.js +1 -42
- package/dist/cjs/grpc/core.js +1 -587
- package/dist/cjs/grpc/index.js +1 -2
- package/dist/cjs/grpc/proto/google/protobuf/any.js +1 -106
- package/dist/cjs/grpc/proto/google/protobuf/duration.js +1 -58
- package/dist/cjs/grpc/proto/google/protobuf/empty.js +1 -7
- package/dist/cjs/grpc/proto/google/protobuf/field_mask.js +1 -47
- package/dist/cjs/grpc/proto/google/protobuf/struct.js +1 -191
- package/dist/cjs/grpc/proto/google/protobuf/timestamp.js +1 -91
- package/dist/cjs/grpc/proto/google/rpc/error_details.js +1 -265
- package/dist/cjs/grpc/proto/google/rpc/status.js +1 -23
- package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js +1 -46
- package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js +1 -29
- package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js +1 -22
- package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js +1 -54
- package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -60
- package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -144
- package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js +1 -271
- package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js +1 -64
- package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js +1 -6
- package/dist/cjs/grpc/proto/sui/rpc/v2/event.js +1 -62
- package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -64
- package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js +1 -481
- package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -40
- package/dist/cjs/grpc/proto/sui/rpc/v2/input.js +1 -61
- package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js +1 -57
- package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -39
- package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js +1 -329
- package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js +1 -447
- package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -27
- package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js +1 -206
- package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js +1 -19
- package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js +1 -109
- package/dist/cjs/grpc/proto/sui/rpc/v2/object.js +1 -90
- package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js +1 -30
- package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js +1 -39
- package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js +1 -30
- package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js +1 -501
- package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -10
- package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -15
- package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -62
- package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js +1 -31
- package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js +1 -504
- package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -15
- package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js +1 -37
- package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js +1 -709
- package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js +1 -950
- package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -19
- package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -144
- package/dist/cjs/index.js +1 -22
- package/dist/cjs/jsonRpc/client.js +1 -516
- package/dist/cjs/jsonRpc/core.js +1 -587
- package/dist/cjs/jsonRpc/errors.js +1 -38
- package/dist/cjs/jsonRpc/http-transport.js +1 -70
- package/dist/cjs/jsonRpc/index.js +1 -3
- package/dist/cjs/jsonRpc/json-rpc-resolver.js +1 -296
- package/dist/cjs/jsonRpc/rpc-websocket-client.js +1 -155
- package/dist/cjs/jsonRpc/types/chain.js +1 -1
- package/dist/cjs/jsonRpc/types/changes.js +1 -1
- package/dist/cjs/jsonRpc/types/coins.js +1 -1
- package/dist/cjs/jsonRpc/types/common.js +1 -1
- package/dist/cjs/jsonRpc/types/generated.js +1 -1
- package/dist/cjs/jsonRpc/types/index.js +1 -1
- package/dist/cjs/jsonRpc/types/params.js +1 -1
- package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +1 -58
- package/dist/cjs/keypairs/ed25519/index.js +1 -2
- package/dist/cjs/keypairs/ed25519/keypair.js +1 -90
- package/dist/cjs/keypairs/ed25519/publickey.js +1 -50
- package/dist/cjs/keypairs/index.js +1 -4
- package/dist/cjs/keypairs/passkey/index.js +1 -2
- package/dist/cjs/keypairs/passkey/keypair.js +1 -155
- package/dist/cjs/keypairs/passkey/publickey.js +1 -117
- package/dist/cjs/keypairs/passkey/types.js +1 -1
- package/dist/cjs/keypairs/secp256k1/index.js +1 -2
- package/dist/cjs/keypairs/secp256k1/keypair.js +1 -82
- package/dist/cjs/keypairs/secp256k1/publickey.js +1 -51
- package/dist/cjs/keypairs/secp256r1/index.js +1 -2
- package/dist/cjs/keypairs/secp256r1/keypair.js +1 -78
- package/dist/cjs/keypairs/secp256r1/publickey.js +1 -52
- package/dist/cjs/multisig/index.js +1 -2
- package/dist/cjs/multisig/publickey.js +1 -201
- package/dist/cjs/multisig/signer.js +1 -58
- package/dist/cjs/transactions/Arguments.js +1 -9
- package/dist/cjs/transactions/Commands.js +1 -102
- package/dist/cjs/transactions/Inputs.js +1 -52
- package/dist/cjs/transactions/ObjectCache.js +1 -205
- package/dist/cjs/transactions/Transaction.js +1 -574
- package/dist/cjs/transactions/TransactionData.js +1 -409
- package/dist/cjs/transactions/__tests__/Transaction.test.js +1 -160
- package/dist/cjs/transactions/__tests__/bcs.test.js +1 -182
- package/dist/cjs/transactions/data/internal.js +1 -169
- package/dist/cjs/transactions/data/v1.js +1 -469
- package/dist/cjs/transactions/data/v2.js +1 -97
- package/dist/cjs/transactions/executor/caching.js +1 -65
- package/dist/cjs/transactions/executor/parallel.js +1 -347
- package/dist/cjs/transactions/executor/queue.js +1 -59
- package/dist/cjs/transactions/executor/serial.js +1 -99
- package/dist/cjs/transactions/hash.js +1 -8
- package/dist/cjs/transactions/index.js +1 -12
- package/dist/cjs/transactions/intents/CoinWithBalance.js +1 -145
- package/dist/cjs/transactions/object.js +1 -87
- package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js +1 -11
- package/dist/cjs/transactions/pure.js +1 -36
- package/dist/cjs/transactions/resolve.js +1 -69
- package/dist/cjs/transactions/serializer.js +1 -167
- package/dist/cjs/transactions/utils.js +1 -121
- package/dist/cjs/utils/constants.js +1 -18
- package/dist/cjs/utils/derived-objects.js +1 -8
- package/dist/cjs/utils/dynamic-fields.js +1 -17
- package/dist/cjs/utils/format.js +1 -11
- package/dist/cjs/utils/index.js +1 -8
- package/dist/cjs/utils/move-registry.js +1 -24
- package/dist/cjs/utils/sui-types.js +1 -66
- package/dist/cjs/utils/suins.js +1 -33
- package/dist/cjs/verify/index.js +1 -1
- package/dist/cjs/verify/verify.js +1 -87
- package/dist/cjs/version.js +1 -2
- package/dist/cjs/w/call/allocation.js +1 -345
- package/dist/cjs/w/call/arb.js +1 -103
- package/dist/cjs/w/call/arbitration.js +1 -1192
- package/dist/cjs/w/call/base.js +1 -293
- package/dist/cjs/w/call/contact.js +1 -345
- package/dist/cjs/w/call/demand.js +1 -681
- package/dist/cjs/w/call/entity.js +1 -173
- package/dist/cjs/w/call/guard-ins.js +1 -4449
- package/dist/cjs/w/call/guard.d.ts +111 -0
- package/dist/cjs/w/call/guard.js +1 -1048
- package/dist/cjs/w/call/index.js +1 -22
- package/dist/cjs/w/call/machine.js +1 -1127
- package/dist/cjs/w/call/order.js +1 -337
- package/dist/cjs/w/call/passport.js +1 -220
- package/dist/cjs/w/call/payment.js +1 -178
- package/dist/cjs/w/call/permission.js +1 -1162
- package/dist/cjs/w/call/personal.js +1 -139
- package/dist/cjs/w/call/progress.js +1 -678
- package/dist/cjs/w/call/proof.js +1 -66
- package/dist/cjs/w/call/repository.js +1 -1024
- package/dist/cjs/w/call/resource.js +1 -108
- package/dist/cjs/w/call/reward.js +1 -675
- package/dist/cjs/w/call/service.js +1 -1960
- package/dist/cjs/w/call/treasury.js +1 -873
- package/dist/cjs/w/call/util.d.ts +1 -0
- package/dist/cjs/w/call/util.js +1 -566
- package/dist/cjs/w/common.js +1 -571
- package/dist/cjs/w/exception.js +1 -618
- package/dist/cjs/w/index.js +1 -8
- package/dist/cjs/w/local/account.js +1 -656
- package/dist/cjs/w/local/cache.js +1 -161
- package/dist/cjs/w/local/config.js +1 -43
- package/dist/cjs/w/local/index.js +1 -228
- package/dist/cjs/w/local/local.js +1 -574
- package/dist/cjs/w/local/storage.js +1 -185
- package/dist/cjs/w/local/token.js +1 -131
- package/dist/cjs/w/local/util.js +1 -26
- package/dist/cjs/w/local/wip.js +1 -864
- package/dist/cjs/w/messenger/crypto.js +1 -380
- package/dist/cjs/w/messenger/index.js +1 -4
- package/dist/cjs/w/messenger/messenger-api.js +1 -1154
- package/dist/cjs/w/messenger/messenger-manager.js +1 -1003
- package/dist/cjs/w/messenger/messenger.js +1 -1093
- package/dist/cjs/w/messenger/server.js +1 -343
- package/dist/cjs/w/messenger/session.js +1 -628
- package/dist/cjs/w/messenger/storage.js +1 -1023
- package/dist/cjs/w/messenger/templates/wts-html-template.js +1 -371
- package/dist/cjs/w/messenger/types.js +1 -76
- package/dist/cjs/w/messenger/utils.js +1 -12
- package/dist/cjs/w/query/bult-in.js +1 -95
- package/dist/cjs/w/query/event.js +1 -137
- package/dist/cjs/w/query/index.js +1 -5
- package/dist/cjs/w/query/object.js +1 -1550
- package/dist/cjs/w/query/received.js +1 -62
- package/dist/cjs/w/query/util.js +1 -49
- package/dist/cjs/w/util.js +1 -587
- package/dist/esm/bcs/bcs.js +1 -253
- package/dist/esm/bcs/effects.js +1 -199
- package/dist/esm/bcs/index.js +1 -51
- package/dist/esm/bcs/pure.js +1 -36
- package/dist/esm/bcs/type-tag-serializer.js +1 -104
- package/dist/esm/bcs/types.js +1 -3
- package/dist/esm/client/index.js +1 -4
- package/dist/esm/client/network.js +1 -15
- package/dist/esm/cryptography/index.js +1 -6
- package/dist/esm/cryptography/intent.js +1 -14
- package/dist/esm/cryptography/keypair.js +1 -74
- package/dist/esm/cryptography/mnemonics.js +1 -20
- package/dist/esm/cryptography/publickey.js +1 -80
- package/dist/esm/cryptography/signature-scheme.js +1 -22
- package/dist/esm/cryptography/signature.js +1 -41
- package/dist/esm/experimental/cache.js +1 -58
- package/dist/esm/experimental/client.js +1 -19
- package/dist/esm/experimental/core.js +1 -80
- package/dist/esm/experimental/errors.js +1 -24
- package/dist/esm/experimental/index.js +1 -5
- package/dist/esm/experimental/persistent-storage.js +1 -220
- package/dist/esm/experimental/persistent-storage.test.js +1 -144
- package/dist/esm/experimental/transports/utils.js +1 -96
- package/dist/esm/experimental/types.js +1 -1
- package/dist/esm/faucet/faucet.js +1 -99
- package/dist/esm/faucet/index.js +1 -1
- package/dist/esm/grpc/client.js +1 -42
- package/dist/esm/grpc/core.js +1 -587
- package/dist/esm/grpc/index.js +1 -2
- package/dist/esm/grpc/proto/google/protobuf/any.js +1 -106
- package/dist/esm/grpc/proto/google/protobuf/duration.js +1 -58
- package/dist/esm/grpc/proto/google/protobuf/empty.js +1 -7
- package/dist/esm/grpc/proto/google/protobuf/field_mask.js +1 -47
- package/dist/esm/grpc/proto/google/protobuf/struct.js +1 -191
- package/dist/esm/grpc/proto/google/protobuf/timestamp.js +1 -91
- package/dist/esm/grpc/proto/google/rpc/error_details.js +1 -265
- package/dist/esm/grpc/proto/google/rpc/status.js +1 -23
- package/dist/esm/grpc/proto/sui/rpc/v2/argument.js +1 -46
- package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js +1 -29
- package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js +1 -22
- package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js +1 -54
- package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -60
- package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -144
- package/dist/esm/grpc/proto/sui/rpc/v2/effects.js +1 -271
- package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js +1 -64
- package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js +1 -6
- package/dist/esm/grpc/proto/sui/rpc/v2/event.js +1 -62
- package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -64
- package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js +1 -481
- package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -40
- package/dist/esm/grpc/proto/sui/rpc/v2/input.js +1 -61
- package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js +1 -57
- package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -39
- package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js +1 -329
- package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js +1 -447
- package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -27
- package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js +1 -206
- package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js +1 -19
- package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js +1 -109
- package/dist/esm/grpc/proto/sui/rpc/v2/object.js +1 -90
- package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js +1 -30
- package/dist/esm/grpc/proto/sui/rpc/v2/owner.js +1 -39
- package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js +1 -30
- package/dist/esm/grpc/proto/sui/rpc/v2/signature.js +1 -501
- package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -10
- package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -15
- package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -62
- package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js +1 -31
- package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js +1 -504
- package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -15
- package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js +1 -37
- package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js +1 -709
- package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js +1 -950
- package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -19
- package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -144
- package/dist/esm/index.js +1 -22
- package/dist/esm/jsonRpc/client.js +1 -516
- package/dist/esm/jsonRpc/core.js +1 -587
- package/dist/esm/jsonRpc/errors.js +1 -38
- package/dist/esm/jsonRpc/http-transport.js +1 -70
- package/dist/esm/jsonRpc/index.js +1 -3
- package/dist/esm/jsonRpc/json-rpc-resolver.js +1 -296
- package/dist/esm/jsonRpc/rpc-websocket-client.js +1 -155
- package/dist/esm/jsonRpc/types/chain.js +1 -1
- package/dist/esm/jsonRpc/types/changes.js +1 -1
- package/dist/esm/jsonRpc/types/coins.js +1 -1
- package/dist/esm/jsonRpc/types/common.js +1 -1
- package/dist/esm/jsonRpc/types/generated.js +1 -1
- package/dist/esm/jsonRpc/types/index.js +1 -1
- package/dist/esm/jsonRpc/types/params.js +1 -1
- package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +1 -58
- package/dist/esm/keypairs/ed25519/index.js +1 -2
- package/dist/esm/keypairs/ed25519/keypair.js +1 -90
- package/dist/esm/keypairs/ed25519/publickey.js +1 -50
- package/dist/esm/keypairs/index.js +1 -4
- package/dist/esm/keypairs/passkey/index.js +1 -2
- package/dist/esm/keypairs/passkey/keypair.js +1 -155
- package/dist/esm/keypairs/passkey/publickey.js +1 -117
- package/dist/esm/keypairs/passkey/types.js +1 -1
- package/dist/esm/keypairs/secp256k1/index.js +1 -2
- package/dist/esm/keypairs/secp256k1/keypair.js +1 -82
- package/dist/esm/keypairs/secp256k1/publickey.js +1 -51
- package/dist/esm/keypairs/secp256r1/index.js +1 -2
- package/dist/esm/keypairs/secp256r1/keypair.js +1 -78
- package/dist/esm/keypairs/secp256r1/publickey.js +1 -52
- package/dist/esm/multisig/index.js +1 -2
- package/dist/esm/multisig/publickey.js +1 -201
- package/dist/esm/multisig/signer.js +1 -58
- package/dist/esm/transactions/Arguments.js +1 -9
- package/dist/esm/transactions/Commands.js +1 -102
- package/dist/esm/transactions/Inputs.js +1 -52
- package/dist/esm/transactions/ObjectCache.js +1 -205
- package/dist/esm/transactions/Transaction.js +1 -574
- package/dist/esm/transactions/TransactionData.js +1 -409
- package/dist/esm/transactions/__tests__/Transaction.test.js +1 -160
- package/dist/esm/transactions/__tests__/bcs.test.js +1 -182
- package/dist/esm/transactions/data/internal.js +1 -169
- package/dist/esm/transactions/data/v1.js +1 -469
- package/dist/esm/transactions/data/v2.js +1 -97
- package/dist/esm/transactions/executor/caching.js +1 -65
- package/dist/esm/transactions/executor/parallel.js +1 -347
- package/dist/esm/transactions/executor/queue.js +1 -59
- package/dist/esm/transactions/executor/serial.js +1 -99
- package/dist/esm/transactions/hash.js +1 -8
- package/dist/esm/transactions/index.js +1 -12
- package/dist/esm/transactions/intents/CoinWithBalance.js +1 -145
- package/dist/esm/transactions/object.js +1 -87
- package/dist/esm/transactions/plugins/NamedPackagesPlugin.js +1 -11
- package/dist/esm/transactions/pure.js +1 -36
- package/dist/esm/transactions/resolve.js +1 -69
- package/dist/esm/transactions/serializer.js +1 -167
- package/dist/esm/transactions/utils.js +1 -121
- package/dist/esm/utils/constants.js +1 -18
- package/dist/esm/utils/derived-objects.js +1 -8
- package/dist/esm/utils/dynamic-fields.js +1 -17
- package/dist/esm/utils/format.js +1 -11
- package/dist/esm/utils/index.js +1 -8
- package/dist/esm/utils/move-registry.js +1 -24
- package/dist/esm/utils/sui-types.js +1 -66
- package/dist/esm/utils/suins.js +1 -33
- package/dist/esm/verify/index.js +1 -1
- package/dist/esm/verify/verify.js +1 -87
- package/dist/esm/version.js +1 -2
- package/dist/esm/w/call/allocation.js +1 -345
- package/dist/esm/w/call/arb.js +1 -103
- package/dist/esm/w/call/arbitration.js +1 -1192
- package/dist/esm/w/call/base.js +1 -293
- package/dist/esm/w/call/contact.js +1 -345
- package/dist/esm/w/call/demand.js +1 -681
- package/dist/esm/w/call/entity.js +1 -173
- package/dist/esm/w/call/guard-ins.js +1 -4449
- package/dist/esm/w/call/guard.d.ts +111 -0
- package/dist/esm/w/call/guard.js +1 -1048
- package/dist/esm/w/call/index.js +1 -22
- package/dist/esm/w/call/machine.js +1 -1127
- package/dist/esm/w/call/order.js +1 -337
- package/dist/esm/w/call/passport.js +1 -220
- package/dist/esm/w/call/payment.js +1 -178
- package/dist/esm/w/call/permission.js +1 -1162
- package/dist/esm/w/call/personal.js +1 -139
- package/dist/esm/w/call/progress.js +1 -678
- package/dist/esm/w/call/proof.js +1 -66
- package/dist/esm/w/call/repository.js +1 -1024
- package/dist/esm/w/call/resource.js +1 -108
- package/dist/esm/w/call/reward.js +1 -675
- package/dist/esm/w/call/service.js +1 -1960
- package/dist/esm/w/call/treasury.js +1 -873
- package/dist/esm/w/call/util.d.ts +1 -0
- package/dist/esm/w/call/util.js +1 -566
- package/dist/esm/w/common.js +1 -571
- package/dist/esm/w/exception.js +1 -618
- package/dist/esm/w/index.js +1 -8
- package/dist/esm/w/local/account.js +1 -656
- package/dist/esm/w/local/cache.js +1 -161
- package/dist/esm/w/local/config.js +1 -43
- package/dist/esm/w/local/index.js +1 -228
- package/dist/esm/w/local/local.js +1 -574
- package/dist/esm/w/local/storage.js +1 -185
- package/dist/esm/w/local/token.js +1 -131
- package/dist/esm/w/local/util.js +1 -26
- package/dist/esm/w/local/wip.js +1 -864
- package/dist/esm/w/messenger/crypto.js +1 -380
- package/dist/esm/w/messenger/index.js +1 -4
- package/dist/esm/w/messenger/messenger-api.js +1 -1154
- package/dist/esm/w/messenger/messenger-manager.js +1 -1003
- package/dist/esm/w/messenger/messenger.js +1 -1093
- package/dist/esm/w/messenger/server.js +1 -343
- package/dist/esm/w/messenger/session.js +1 -628
- package/dist/esm/w/messenger/storage.js +1 -1023
- package/dist/esm/w/messenger/templates/wts-html-template.js +1 -371
- package/dist/esm/w/messenger/types.js +1 -76
- package/dist/esm/w/messenger/utils.js +1 -12
- package/dist/esm/w/query/bult-in.js +1 -95
- package/dist/esm/w/query/event.js +1 -137
- package/dist/esm/w/query/index.js +1 -5
- package/dist/esm/w/query/object.js +1 -1550
- package/dist/esm/w/query/received.js +1 -62
- package/dist/esm/w/query/util.js +1 -49
- package/dist/esm/w/util.js +1 -587
- package/package.json +5 -2
|
@@ -1,90 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { decodeWowPrivateKey, encodeWowPrivateKey, Keypair, PRIVATE_KEY_SIZE, } from "../../cryptography/keypair.js";
|
|
3
|
-
import { isValidHardenedPath, mnemonicToSeedHex, } from "../../cryptography/mnemonics.js";
|
|
4
|
-
import { derivePath } from "./ed25519-hd-key.js";
|
|
5
|
-
import { Ed25519PublicKey } from "./publickey.js";
|
|
6
|
-
export const DEFAULT_ED25519_DERIVATION_PATH = "m/44'/784'/0'/0'/0'";
|
|
7
|
-
export class Ed25519Keypair extends Keypair {
|
|
8
|
-
keypair;
|
|
9
|
-
constructor(keypair) {
|
|
10
|
-
super();
|
|
11
|
-
if (keypair) {
|
|
12
|
-
this.keypair = {
|
|
13
|
-
publicKey: keypair.publicKey,
|
|
14
|
-
secretKey: keypair.secretKey.slice(0, 32),
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
const privateKey = ed25519.utils.randomPrivateKey();
|
|
19
|
-
this.keypair = {
|
|
20
|
-
publicKey: ed25519.getPublicKey(privateKey),
|
|
21
|
-
secretKey: privateKey,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
getKeyScheme() {
|
|
26
|
-
return "ED25519";
|
|
27
|
-
}
|
|
28
|
-
static generate() {
|
|
29
|
-
const secretKey = ed25519.utils.randomPrivateKey();
|
|
30
|
-
return new Ed25519Keypair({
|
|
31
|
-
publicKey: ed25519.getPublicKey(secretKey),
|
|
32
|
-
secretKey,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
static fromSecretKey(secretKey, options) {
|
|
36
|
-
if (typeof secretKey === "string") {
|
|
37
|
-
const decoded = decodeWowPrivateKey(secretKey);
|
|
38
|
-
if (decoded.scheme !== "ED25519") {
|
|
39
|
-
throw new Error(`Expected a ED25519 keypair, got ${decoded.scheme}`);
|
|
40
|
-
}
|
|
41
|
-
return this.fromSecretKey(decoded.secretKey, options);
|
|
42
|
-
}
|
|
43
|
-
const secretKeyLength = secretKey.length;
|
|
44
|
-
if (secretKeyLength !== PRIVATE_KEY_SIZE) {
|
|
45
|
-
throw new Error(`Wrong secretKey size. Expected ${PRIVATE_KEY_SIZE} bytes, got ${secretKeyLength}.`);
|
|
46
|
-
}
|
|
47
|
-
const keypair = {
|
|
48
|
-
publicKey: ed25519.getPublicKey(secretKey),
|
|
49
|
-
secretKey,
|
|
50
|
-
};
|
|
51
|
-
if (!options || !options.skipValidation) {
|
|
52
|
-
const encoder = new TextEncoder();
|
|
53
|
-
const signData = encoder.encode("sui validation");
|
|
54
|
-
const signature = ed25519.sign(signData, secretKey);
|
|
55
|
-
if (!ed25519.verify(signature, signData, keypair.publicKey)) {
|
|
56
|
-
throw new Error("provided secretKey is invalid");
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return new Ed25519Keypair(keypair);
|
|
60
|
-
}
|
|
61
|
-
getPublicKey() {
|
|
62
|
-
return new Ed25519PublicKey(this.keypair.publicKey);
|
|
63
|
-
}
|
|
64
|
-
getSecretKey() {
|
|
65
|
-
return encodeWowPrivateKey(this.keypair.secretKey.slice(0, PRIVATE_KEY_SIZE), this.getKeyScheme());
|
|
66
|
-
}
|
|
67
|
-
async sign(data) {
|
|
68
|
-
return ed25519.sign(data, this.keypair.secretKey);
|
|
69
|
-
}
|
|
70
|
-
static deriveKeypair(mnemonics, path) {
|
|
71
|
-
if (path == null) {
|
|
72
|
-
path = DEFAULT_ED25519_DERIVATION_PATH;
|
|
73
|
-
}
|
|
74
|
-
if (!isValidHardenedPath(path)) {
|
|
75
|
-
throw new Error("Invalid derivation path");
|
|
76
|
-
}
|
|
77
|
-
const { key } = derivePath(path, mnemonicToSeedHex(mnemonics));
|
|
78
|
-
return Ed25519Keypair.fromSecretKey(key);
|
|
79
|
-
}
|
|
80
|
-
static deriveKeypairFromSeed(seedHex, path) {
|
|
81
|
-
if (path == null) {
|
|
82
|
-
path = DEFAULT_ED25519_DERIVATION_PATH;
|
|
83
|
-
}
|
|
84
|
-
if (!isValidHardenedPath(path)) {
|
|
85
|
-
throw new Error("Invalid derivation path");
|
|
86
|
-
}
|
|
87
|
-
const { key } = derivePath(path, seedHex);
|
|
88
|
-
return Ed25519Keypair.fromSecretKey(key);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
1
|
+
import{ed25519}from'@noble/curves/ed25519';import{decodeWowPrivateKey,encodeWowPrivateKey,Keypair,PRIVATE_KEY_SIZE}from'../../cryptography/keypair.js';import{isValidHardenedPath,mnemonicToSeedHex}from'../../cryptography/mnemonics.js';import{derivePath}from'./ed25519-hd-key.js';import{Ed25519PublicKey}from'./publickey.js';export const DEFAULT_ED25519_DERIVATION_PATH='m/44\x27/784\x27/0\x27/0\x27/0\x27';export class Ed25519Keypair extends Keypair{['keypair'];constructor(a){super();if(a)this['keypair']={'publicKey':a['publicKey'],'secretKey':a['secretKey']['slice'](0x0,0x20)};else{const b=ed25519['utils']['randomPrivateKey']();this['keypair']={'publicKey':ed25519['getPublicKey'](b),'secretKey':b};}}['getKeyScheme'](){return'ED25519';}static['generate'](){const a=ed25519['utils']['randomPrivateKey']();return new Ed25519Keypair({'publicKey':ed25519['getPublicKey'](a),'secretKey':a});}static['fromSecretKey'](a,b){if(typeof a==='string'){const e=decodeWowPrivateKey(a);if(e['scheme']!=='ED25519')throw new Error('Expected\x20a\x20ED25519\x20keypair,\x20got\x20'+e['scheme']);return this['fromSecretKey'](e['secretKey'],b);}const c=a['length'];if(c!==PRIVATE_KEY_SIZE)throw new Error('Wrong\x20secretKey\x20size.\x20Expected\x20'+PRIVATE_KEY_SIZE+'\x20bytes,\x20got\x20'+c+'.');const d={'publicKey':ed25519['getPublicKey'](a),'secretKey':a};if(!b||!b['skipValidation']){const f=new TextEncoder(),g=f['encode']('sui\x20validation'),h=ed25519['sign'](g,a);if(!ed25519['verify'](h,g,d['publicKey']))throw new Error('provided\x20secretKey\x20is\x20invalid');}return new Ed25519Keypair(d);}['getPublicKey'](){return new Ed25519PublicKey(this['keypair']['publicKey']);}['getSecretKey'](){return encodeWowPrivateKey(this['keypair']['secretKey']['slice'](0x0,PRIVATE_KEY_SIZE),this['getKeyScheme']());}async['sign'](a){return ed25519['sign'](a,this['keypair']['secretKey']);}static['deriveKeypair'](a,b){b==null&&(b=DEFAULT_ED25519_DERIVATION_PATH);if(!isValidHardenedPath(b))throw new Error('Invalid\x20derivation\x20path');const {key:c}=derivePath(b,mnemonicToSeedHex(a));return Ed25519Keypair['fromSecretKey'](c);}static['deriveKeypairFromSeed'](a,b){b==null&&(b=DEFAULT_ED25519_DERIVATION_PATH);if(!isValidHardenedPath(b))throw new Error('Invalid\x20derivation\x20path');const {key:c}=derivePath(b,a);return Ed25519Keypair['fromSecretKey'](c);}}
|
|
@@ -1,50 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ed25519 } from "@noble/curves/ed25519";
|
|
3
|
-
import { bytesEqual, parseSerializedKeypairSignature, PublicKey, } from "../../cryptography/publickey.js";
|
|
4
|
-
import { SIGNATURE_SCHEME_TO_FLAG } from "../../cryptography/signature-scheme.js";
|
|
5
|
-
const PUBLIC_KEY_SIZE = 32;
|
|
6
|
-
export class Ed25519PublicKey extends PublicKey {
|
|
7
|
-
static SIZE = PUBLIC_KEY_SIZE;
|
|
8
|
-
data;
|
|
9
|
-
constructor(value) {
|
|
10
|
-
super();
|
|
11
|
-
if (typeof value === "string") {
|
|
12
|
-
this.data = fromBase64(value);
|
|
13
|
-
}
|
|
14
|
-
else if (value instanceof Uint8Array) {
|
|
15
|
-
this.data = value;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
this.data = Uint8Array.from(value);
|
|
19
|
-
}
|
|
20
|
-
if (this.data.length !== PUBLIC_KEY_SIZE) {
|
|
21
|
-
throw new Error(`Invalid public key input. Expected ${PUBLIC_KEY_SIZE} bytes, got ${this.data.length}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
equals(publicKey) {
|
|
25
|
-
return super.equals(publicKey);
|
|
26
|
-
}
|
|
27
|
-
toRawBytes() {
|
|
28
|
-
return this.data;
|
|
29
|
-
}
|
|
30
|
-
flag() {
|
|
31
|
-
return SIGNATURE_SCHEME_TO_FLAG["ED25519"];
|
|
32
|
-
}
|
|
33
|
-
async verify(message, signature) {
|
|
34
|
-
let bytes;
|
|
35
|
-
if (typeof signature === "string") {
|
|
36
|
-
const parsed = parseSerializedKeypairSignature(signature);
|
|
37
|
-
if (parsed.signatureScheme !== "ED25519") {
|
|
38
|
-
throw new Error("Invalid signature scheme");
|
|
39
|
-
}
|
|
40
|
-
if (!bytesEqual(this.toRawBytes(), parsed.publicKey)) {
|
|
41
|
-
throw new Error("Signature does not match public key");
|
|
42
|
-
}
|
|
43
|
-
bytes = parsed.signature;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
bytes = signature;
|
|
47
|
-
}
|
|
48
|
-
return ed25519.verify(bytes, message, this.toRawBytes());
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
import{fromBase64}from'@mysten/bcs';import{ed25519}from'@noble/curves/ed25519';import{bytesEqual,parseSerializedKeypairSignature,PublicKey}from'../../cryptography/publickey.js';import{SIGNATURE_SCHEME_TO_FLAG}from'../../cryptography/signature-scheme.js';const PUBLIC_KEY_SIZE=0x20;export class Ed25519PublicKey extends PublicKey{static ['SIZE']=PUBLIC_KEY_SIZE;['data'];constructor(a){super();if(typeof a==='string')this['data']=fromBase64(a);else a instanceof Uint8Array?this['data']=a:this['data']=Uint8Array['from'](a);if(this['data']['length']!==PUBLIC_KEY_SIZE)throw new Error('Invalid\x20public\x20key\x20input.\x20Expected\x20'+PUBLIC_KEY_SIZE+'\x20bytes,\x20got\x20'+this['data']['length']);}['equals'](a){return super['equals'](a);}['toRawBytes'](){return this['data'];}['flag'](){return SIGNATURE_SCHEME_TO_FLAG['ED25519'];}async['verify'](a,b){let c;if(typeof b==='string'){const d=parseSerializedKeypairSignature(b);if(d['signatureScheme']!=='ED25519')throw new Error('Invalid\x20signature\x20scheme');if(!bytesEqual(this['toRawBytes'](),d['publicKey']))throw new Error('Signature\x20does\x20not\x20match\x20public\x20key');c=d['signature'];}else c=b;return ed25519['verify'](c,a,this['toRawBytes']());}}
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from "./passkey/index.js";
|
|
3
|
-
export * from "./secp256k1/index.js";
|
|
4
|
-
export * from "./secp256r1/index.js";
|
|
1
|
+
export*from'./ed25519/index.js';export*from'./passkey/index.js';export*from'./secp256k1/index.js';export*from'./secp256r1/index.js';
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { PasskeyPublicKey } from "./publickey.js";
|
|
1
|
+
export{PasskeyKeypair,BrowserPasskeyProvider,findCommonPublicKey}from'./keypair.js';export{PasskeyPublicKey}from'./publickey.js';
|
|
@@ -1,155 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { secp256r1 } from "@noble/curves/p256";
|
|
3
|
-
import { blake2b } from "@noble/hashes/blake2b";
|
|
4
|
-
import { sha256 } from "@noble/hashes/sha256";
|
|
5
|
-
import { randomBytes } from "@noble/hashes/utils";
|
|
6
|
-
import { PasskeyAuthenticator } from "../../bcs/bcs.js";
|
|
7
|
-
import { messageWithIntent, SIGNATURE_SCHEME_TO_FLAG, Signer, } from "../../cryptography/index.js";
|
|
8
|
-
import { parseDerSPKI, PASSKEY_PUBLIC_KEY_SIZE, PASSKEY_SIGNATURE_SIZE, PasskeyPublicKey, } from "./publickey.js";
|
|
9
|
-
export class BrowserPasskeyProvider {
|
|
10
|
-
#name;
|
|
11
|
-
#options;
|
|
12
|
-
constructor(name, options) {
|
|
13
|
-
this.#name = name;
|
|
14
|
-
this.#options = options;
|
|
15
|
-
}
|
|
16
|
-
async create() {
|
|
17
|
-
return (await navigator.credentials.create({
|
|
18
|
-
publicKey: {
|
|
19
|
-
timeout: this.#options.timeout ?? 60000,
|
|
20
|
-
...this.#options,
|
|
21
|
-
rp: {
|
|
22
|
-
name: this.#name,
|
|
23
|
-
...this.#options.rp,
|
|
24
|
-
},
|
|
25
|
-
user: {
|
|
26
|
-
name: this.#name,
|
|
27
|
-
displayName: this.#name,
|
|
28
|
-
...this.#options.user,
|
|
29
|
-
id: randomBytes(10),
|
|
30
|
-
},
|
|
31
|
-
challenge: new TextEncoder().encode("Create passkey wallet on Sui"),
|
|
32
|
-
pubKeyCredParams: [{ alg: -7, type: "public-key" }],
|
|
33
|
-
authenticatorSelection: {
|
|
34
|
-
authenticatorAttachment: "cross-platform",
|
|
35
|
-
residentKey: "required",
|
|
36
|
-
requireResidentKey: true,
|
|
37
|
-
userVerification: "required",
|
|
38
|
-
...this.#options.authenticatorSelection,
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
}));
|
|
42
|
-
}
|
|
43
|
-
async get(challenge) {
|
|
44
|
-
return (await navigator.credentials.get({
|
|
45
|
-
publicKey: {
|
|
46
|
-
challenge: challenge,
|
|
47
|
-
userVerification: this.#options.authenticatorSelection?.userVerification ||
|
|
48
|
-
"required",
|
|
49
|
-
timeout: this.#options.timeout ?? 60000,
|
|
50
|
-
},
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export class PasskeyKeypair extends Signer {
|
|
55
|
-
publicKey;
|
|
56
|
-
provider;
|
|
57
|
-
getKeyScheme() {
|
|
58
|
-
return "Passkey";
|
|
59
|
-
}
|
|
60
|
-
constructor(publicKey, provider) {
|
|
61
|
-
super();
|
|
62
|
-
this.publicKey = publicKey;
|
|
63
|
-
this.provider = provider;
|
|
64
|
-
}
|
|
65
|
-
static async getPasskeyInstance(provider) {
|
|
66
|
-
const credential = await provider.create();
|
|
67
|
-
if (!credential.response.getPublicKey()) {
|
|
68
|
-
throw new Error("Invalid credential create response");
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
const derSPKI = credential.response.getPublicKey();
|
|
72
|
-
const pubkeyUncompressed = parseDerSPKI(new Uint8Array(derSPKI));
|
|
73
|
-
const pubkey = secp256r1.ProjectivePoint.fromHex(pubkeyUncompressed);
|
|
74
|
-
const pubkeyCompressed = pubkey.toRawBytes(true);
|
|
75
|
-
return new PasskeyKeypair(pubkeyCompressed, provider);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
getPublicKey() {
|
|
79
|
-
return new PasskeyPublicKey(this.publicKey);
|
|
80
|
-
}
|
|
81
|
-
async sign(data) {
|
|
82
|
-
const credential = await this.provider.get(data);
|
|
83
|
-
const authenticatorData = new Uint8Array(credential.response.authenticatorData);
|
|
84
|
-
const clientDataJSON = new Uint8Array(credential.response.clientDataJSON);
|
|
85
|
-
const decoder = new TextDecoder();
|
|
86
|
-
const clientDataJSONString = decoder.decode(clientDataJSON);
|
|
87
|
-
const sig = secp256r1.Signature.fromDER(new Uint8Array(credential.response.signature));
|
|
88
|
-
const normalized = sig.normalizeS().toCompactRawBytes();
|
|
89
|
-
if (normalized.length !== PASSKEY_SIGNATURE_SIZE ||
|
|
90
|
-
this.publicKey.length !== PASSKEY_PUBLIC_KEY_SIZE) {
|
|
91
|
-
throw new Error("Invalid signature or public key length");
|
|
92
|
-
}
|
|
93
|
-
const arr = new Uint8Array(1 + normalized.length + this.publicKey.length);
|
|
94
|
-
arr.set([SIGNATURE_SCHEME_TO_FLAG["Secp256r1"]]);
|
|
95
|
-
arr.set(normalized, 1);
|
|
96
|
-
arr.set(this.publicKey, 1 + normalized.length);
|
|
97
|
-
return PasskeyAuthenticator.serialize({
|
|
98
|
-
authenticatorData: authenticatorData,
|
|
99
|
-
clientDataJson: clientDataJSONString,
|
|
100
|
-
userSignature: arr,
|
|
101
|
-
}).toBytes();
|
|
102
|
-
}
|
|
103
|
-
async signWithIntent(bytes, intent) {
|
|
104
|
-
const intentMessage = messageWithIntent(intent, bytes);
|
|
105
|
-
const digest = blake2b(intentMessage, { dkLen: 32 });
|
|
106
|
-
const signature = await this.sign(digest);
|
|
107
|
-
const serializedSignature = new Uint8Array(1 + signature.length);
|
|
108
|
-
serializedSignature.set([
|
|
109
|
-
SIGNATURE_SCHEME_TO_FLAG[this.getKeyScheme()],
|
|
110
|
-
]);
|
|
111
|
-
serializedSignature.set(signature, 1);
|
|
112
|
-
return {
|
|
113
|
-
signature: toBase64(serializedSignature),
|
|
114
|
-
bytes: toBase64(bytes),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
static async signAndRecover(provider, message) {
|
|
118
|
-
const credential = await provider.get(message);
|
|
119
|
-
const fullMessage = messageFromAssertionResponse(credential.response);
|
|
120
|
-
const sig = secp256r1.Signature.fromDER(new Uint8Array(credential.response.signature));
|
|
121
|
-
const res = [];
|
|
122
|
-
for (let i = 0; i < 4; i++) {
|
|
123
|
-
const s = sig.addRecoveryBit(i);
|
|
124
|
-
try {
|
|
125
|
-
const pubkey = s.recoverPublicKey(sha256(fullMessage));
|
|
126
|
-
const pk = new PasskeyPublicKey(pubkey.toRawBytes(true));
|
|
127
|
-
res.push(pk);
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return res;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
export function findCommonPublicKey(arr1, arr2) {
|
|
137
|
-
const matchingPubkeys = [];
|
|
138
|
-
for (const pubkey1 of arr1) {
|
|
139
|
-
for (const pubkey2 of arr2) {
|
|
140
|
-
if (pubkey1.equals(pubkey2)) {
|
|
141
|
-
matchingPubkeys.push(pubkey1);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (matchingPubkeys.length !== 1) {
|
|
146
|
-
throw new Error("No unique public key found");
|
|
147
|
-
}
|
|
148
|
-
return matchingPubkeys[0];
|
|
149
|
-
}
|
|
150
|
-
function messageFromAssertionResponse(response) {
|
|
151
|
-
const authenticatorData = new Uint8Array(response.authenticatorData);
|
|
152
|
-
const clientDataJSON = new Uint8Array(response.clientDataJSON);
|
|
153
|
-
const clientDataJSONDigest = sha256(clientDataJSON);
|
|
154
|
-
return new Uint8Array([...authenticatorData, ...clientDataJSONDigest]);
|
|
155
|
-
}
|
|
1
|
+
import{toBase64}from'@mysten/bcs';import{secp256r1}from'@noble/curves/p256';import{blake2b}from'@noble/hashes/blake2b';import{sha256}from'@noble/hashes/sha256';import{randomBytes}from'@noble/hashes/utils';import{PasskeyAuthenticator}from'../../bcs/bcs.js';import{messageWithIntent,SIGNATURE_SCHEME_TO_FLAG,Signer}from'../../cryptography/index.js';import{parseDerSPKI,PASSKEY_PUBLIC_KEY_SIZE,PASSKEY_SIGNATURE_SIZE,PasskeyPublicKey}from'./publickey.js';export class BrowserPasskeyProvider{#name;#options;constructor(a,b){this.#name=a,this.#options=b;}async['create'](){return await navigator['credentials']['create']({'publicKey':{'timeout':this.#options['timeout']??0xea60,...this.#options,'rp':{'name':this.#name,...this.#options['rp']},'user':{'name':this.#name,'displayName':this.#name,...this.#options['user'],'id':randomBytes(0xa)},'challenge':new TextEncoder()['encode']('Create\x20passkey\x20wallet\x20on\x20Sui'),'pubKeyCredParams':[{'alg':-0x7,'type':'public-key'}],'authenticatorSelection':{'authenticatorAttachment':'cross-platform','residentKey':'required','requireResidentKey':!![],'userVerification':'required',...this.#options['authenticatorSelection']}}});}async['get'](a){return await navigator['credentials']['get']({'publicKey':{'challenge':a,'userVerification':this.#options['authenticatorSelection']?.['userVerification']||'required','timeout':this.#options['timeout']??0xea60}});}}export class PasskeyKeypair extends Signer{['publicKey'];['provider'];['getKeyScheme'](){return'Passkey';}constructor(a,b){super(),this['publicKey']=a,this['provider']=b;}static async['getPasskeyInstance'](a){const b=await a['create']();if(!b['response']['getPublicKey']())throw new Error('Invalid\x20credential\x20create\x20response');else{const c=b['response']['getPublicKey'](),d=parseDerSPKI(new Uint8Array(c)),e=secp256r1['ProjectivePoint']['fromHex'](d),f=e['toRawBytes'](!![]);return new PasskeyKeypair(f,a);}}['getPublicKey'](){return new PasskeyPublicKey(this['publicKey']);}async['sign'](a){const b=await this['provider']['get'](a),c=new Uint8Array(b['response']['authenticatorData']),d=new Uint8Array(b['response']['clientDataJSON']),e=new TextDecoder(),f=e['decode'](d),g=secp256r1['Signature']['fromDER'](new Uint8Array(b['response']['signature'])),h=g['normalizeS']()['toCompactRawBytes']();if(h['length']!==PASSKEY_SIGNATURE_SIZE||this['publicKey']['length']!==PASSKEY_PUBLIC_KEY_SIZE)throw new Error('Invalid\x20signature\x20or\x20public\x20key\x20length');const i=new Uint8Array(0x1+h['length']+this['publicKey']['length']);return i['set']([SIGNATURE_SCHEME_TO_FLAG['Secp256r1']]),i['set'](h,0x1),i['set'](this['publicKey'],0x1+h['length']),PasskeyAuthenticator['serialize']({'authenticatorData':c,'clientDataJson':f,'userSignature':i})['toBytes']();}async['signWithIntent'](a,b){const c=messageWithIntent(b,a),d=blake2b(c,{'dkLen':0x20}),e=await this['sign'](d),f=new Uint8Array(0x1+e['length']);return f['set']([SIGNATURE_SCHEME_TO_FLAG[this['getKeyScheme']()]]),f['set'](e,0x1),{'signature':toBase64(f),'bytes':toBase64(a)};}static async['signAndRecover'](a,b){const c=await a['get'](b),d=messageFromAssertionResponse(c['response']),e=secp256r1['Signature']['fromDER'](new Uint8Array(c['response']['signature'])),f=[];for(let g=0x0;g<0x4;g++){const h=e['addRecoveryBit'](g);try{const j=h['recoverPublicKey'](sha256(d)),k=new PasskeyPublicKey(j['toRawBytes'](!![]));f['push'](k);}catch{continue;}}return f;}}export function findCommonPublicKey(a,b){const c=[];for(const d of a){for(const e of b){d['equals'](e)&&c['push'](d);}}if(c['length']!==0x1)throw new Error('No\x20unique\x20public\x20key\x20found');return c[0x0];}function messageFromAssertionResponse(a){const b=new Uint8Array(a['authenticatorData']),c=new Uint8Array(a['clientDataJSON']),d=sha256(c);return new Uint8Array([...b,...d]);}
|
|
@@ -1,117 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { secp256r1 } from "@noble/curves/p256";
|
|
3
|
-
import { sha256 } from "@noble/hashes/sha256";
|
|
4
|
-
import { PasskeyAuthenticator } from "../../bcs/bcs.js";
|
|
5
|
-
import { bytesEqual, PublicKey } from "../../cryptography/publickey.js";
|
|
6
|
-
import { SIGNATURE_SCHEME_TO_FLAG } from "../../cryptography/signature-scheme.js";
|
|
7
|
-
export const PASSKEY_PUBLIC_KEY_SIZE = 33;
|
|
8
|
-
export const PASSKEY_UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;
|
|
9
|
-
export const PASSKEY_SIGNATURE_SIZE = 64;
|
|
10
|
-
export const SECP256R1_SPKI_HEADER = new Uint8Array([
|
|
11
|
-
0x30,
|
|
12
|
-
0x59,
|
|
13
|
-
0x30,
|
|
14
|
-
0x13,
|
|
15
|
-
0x06,
|
|
16
|
-
0x07,
|
|
17
|
-
0x2a,
|
|
18
|
-
0x86,
|
|
19
|
-
0x48,
|
|
20
|
-
0xce,
|
|
21
|
-
0x3d,
|
|
22
|
-
0x02,
|
|
23
|
-
0x01,
|
|
24
|
-
0x06,
|
|
25
|
-
0x08,
|
|
26
|
-
0x2a,
|
|
27
|
-
0x86,
|
|
28
|
-
0x48,
|
|
29
|
-
0xce,
|
|
30
|
-
0x3d,
|
|
31
|
-
0x03,
|
|
32
|
-
0x01,
|
|
33
|
-
0x07,
|
|
34
|
-
0x03,
|
|
35
|
-
0x42,
|
|
36
|
-
0x00,
|
|
37
|
-
]);
|
|
38
|
-
export class PasskeyPublicKey extends PublicKey {
|
|
39
|
-
static SIZE = PASSKEY_PUBLIC_KEY_SIZE;
|
|
40
|
-
data;
|
|
41
|
-
constructor(value) {
|
|
42
|
-
super();
|
|
43
|
-
if (typeof value === "string") {
|
|
44
|
-
this.data = fromBase64(value);
|
|
45
|
-
}
|
|
46
|
-
else if (value instanceof Uint8Array) {
|
|
47
|
-
this.data = value;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this.data = Uint8Array.from(value);
|
|
51
|
-
}
|
|
52
|
-
if (this.data.length !== PASSKEY_PUBLIC_KEY_SIZE) {
|
|
53
|
-
throw new Error(`Invalid public key input. Expected ${PASSKEY_PUBLIC_KEY_SIZE} bytes, got ${this.data.length}`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
equals(publicKey) {
|
|
57
|
-
return super.equals(publicKey);
|
|
58
|
-
}
|
|
59
|
-
toRawBytes() {
|
|
60
|
-
return this.data;
|
|
61
|
-
}
|
|
62
|
-
flag() {
|
|
63
|
-
return SIGNATURE_SCHEME_TO_FLAG["Passkey"];
|
|
64
|
-
}
|
|
65
|
-
async verify(message, signature) {
|
|
66
|
-
const parsed = parseSerializedPasskeySignature(signature);
|
|
67
|
-
const clientDataJSON = JSON.parse(parsed.clientDataJson);
|
|
68
|
-
if (clientDataJSON.type !== "webauthn.get") {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
const parsedChallenge = fromBase64(clientDataJSON.challenge.replace(/-/g, "+").replace(/_/g, "/"));
|
|
72
|
-
if (!bytesEqual(message, parsedChallenge)) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
const pk = parsed.userSignature.slice(1 + PASSKEY_SIGNATURE_SIZE);
|
|
76
|
-
if (!bytesEqual(this.toRawBytes(), pk)) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
const payload = new Uint8Array([
|
|
80
|
-
...parsed.authenticatorData,
|
|
81
|
-
...sha256(parsed.clientDataJson),
|
|
82
|
-
]);
|
|
83
|
-
const sig = parsed.userSignature.slice(1, PASSKEY_SIGNATURE_SIZE + 1);
|
|
84
|
-
return secp256r1.verify(sig, sha256(payload), pk);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
export function parseDerSPKI(derBytes) {
|
|
88
|
-
if (derBytes.length !==
|
|
89
|
-
SECP256R1_SPKI_HEADER.length + PASSKEY_UNCOMPRESSED_PUBLIC_KEY_SIZE) {
|
|
90
|
-
throw new Error("Invalid DER length");
|
|
91
|
-
}
|
|
92
|
-
for (let i = 0; i < SECP256R1_SPKI_HEADER.length; i++) {
|
|
93
|
-
if (derBytes[i] !== SECP256R1_SPKI_HEADER[i]) {
|
|
94
|
-
throw new Error("Invalid spki header");
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (derBytes[SECP256R1_SPKI_HEADER.length] !== 0x04) {
|
|
98
|
-
throw new Error("Invalid point marker");
|
|
99
|
-
}
|
|
100
|
-
return derBytes.slice(SECP256R1_SPKI_HEADER.length);
|
|
101
|
-
}
|
|
102
|
-
export function parseSerializedPasskeySignature(signature) {
|
|
103
|
-
const bytes = typeof signature === "string" ? fromBase64(signature) : signature;
|
|
104
|
-
if (bytes[0] !== SIGNATURE_SCHEME_TO_FLAG.Passkey) {
|
|
105
|
-
throw new Error("Invalid signature scheme");
|
|
106
|
-
}
|
|
107
|
-
const dec = PasskeyAuthenticator.parse(bytes.slice(1));
|
|
108
|
-
return {
|
|
109
|
-
signatureScheme: "Passkey",
|
|
110
|
-
serializedSignature: toBase64(bytes),
|
|
111
|
-
signature: bytes,
|
|
112
|
-
authenticatorData: dec.authenticatorData,
|
|
113
|
-
clientDataJson: dec.clientDataJson,
|
|
114
|
-
userSignature: new Uint8Array(dec.userSignature),
|
|
115
|
-
publicKey: new Uint8Array(dec.userSignature.slice(1 + PASSKEY_SIGNATURE_SIZE)),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
1
|
+
import{fromBase64,toBase64}from'@mysten/bcs';import{secp256r1}from'@noble/curves/p256';import{sha256}from'@noble/hashes/sha256';import{PasskeyAuthenticator}from'../../bcs/bcs.js';import{bytesEqual,PublicKey}from'../../cryptography/publickey.js';import{SIGNATURE_SCHEME_TO_FLAG}from'../../cryptography/signature-scheme.js';export const PASSKEY_PUBLIC_KEY_SIZE=0x21;export const PASSKEY_UNCOMPRESSED_PUBLIC_KEY_SIZE=0x41;export const PASSKEY_SIGNATURE_SIZE=0x40;export const SECP256R1_SPKI_HEADER=new Uint8Array([0x30,0x59,0x30,0x13,0x6,0x7,0x2a,0x86,0x48,0xce,0x3d,0x2,0x1,0x6,0x8,0x2a,0x86,0x48,0xce,0x3d,0x3,0x1,0x7,0x3,0x42,0x0]);export class PasskeyPublicKey extends PublicKey{static ['SIZE']=PASSKEY_PUBLIC_KEY_SIZE;['data'];constructor(a){super();if(typeof a==='string')this['data']=fromBase64(a);else a instanceof Uint8Array?this['data']=a:this['data']=Uint8Array['from'](a);if(this['data']['length']!==PASSKEY_PUBLIC_KEY_SIZE)throw new Error('Invalid\x20public\x20key\x20input.\x20Expected\x20'+PASSKEY_PUBLIC_KEY_SIZE+'\x20bytes,\x20got\x20'+this['data']['length']);}['equals'](a){return super['equals'](a);}['toRawBytes'](){return this['data'];}['flag'](){return SIGNATURE_SCHEME_TO_FLAG['Passkey'];}async['verify'](a,b){const c=parseSerializedPasskeySignature(b),d=JSON['parse'](c['clientDataJson']);if(d['type']!=='webauthn.get')return![];const e=fromBase64(d['challenge']['replace'](/-/g,'+')['replace'](/_/g,'/'));if(!bytesEqual(a,e))return![];const f=c['userSignature']['slice'](0x1+PASSKEY_SIGNATURE_SIZE);if(!bytesEqual(this['toRawBytes'](),f))return![];const g=new Uint8Array([...c['authenticatorData'],...sha256(c['clientDataJson'])]),h=c['userSignature']['slice'](0x1,PASSKEY_SIGNATURE_SIZE+0x1);return secp256r1['verify'](h,sha256(g),f);}}export function parseDerSPKI(a){if(a['length']!==SECP256R1_SPKI_HEADER['length']+PASSKEY_UNCOMPRESSED_PUBLIC_KEY_SIZE)throw new Error('Invalid\x20DER\x20length');for(let b=0x0;b<SECP256R1_SPKI_HEADER['length'];b++){if(a[b]!==SECP256R1_SPKI_HEADER[b])throw new Error('Invalid\x20spki\x20header');}if(a[SECP256R1_SPKI_HEADER['length']]!==0x4)throw new Error('Invalid\x20point\x20marker');return a['slice'](SECP256R1_SPKI_HEADER['length']);}export function parseSerializedPasskeySignature(a){const b=typeof a==='string'?fromBase64(a):a;if(b[0x0]!==SIGNATURE_SCHEME_TO_FLAG['Passkey'])throw new Error('Invalid\x20signature\x20scheme');const c=PasskeyAuthenticator['parse'](b['slice'](0x1));return{'signatureScheme':'Passkey','serializedSignature':toBase64(b),'signature':b,'authenticatorData':c['authenticatorData'],'clientDataJson':c['clientDataJson'],'userSignature':new Uint8Array(c['userSignature']),'publicKey':new Uint8Array(c['userSignature']['slice'](0x1+PASSKEY_SIGNATURE_SIZE))};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export{};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { Secp256k1PublicKey } from "./publickey.js";
|
|
1
|
+
export{DEFAULT_SECP256K1_DERIVATION_PATH,Secp256k1Keypair}from'./keypair.js';export{Secp256k1PublicKey}from'./publickey.js';
|
|
@@ -1,82 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { blake2b } from "@noble/hashes/blake2b";
|
|
3
|
-
import { sha256 } from "@noble/hashes/sha256";
|
|
4
|
-
import { bytesToHex } from "@noble/hashes/utils";
|
|
5
|
-
import { HDKey } from "@scure/bip32";
|
|
6
|
-
import { decodeWowPrivateKey, encodeWowPrivateKey, Keypair, } from "../../cryptography/keypair.js";
|
|
7
|
-
import { isValidBIP32Path, mnemonicToSeed, } from "../../cryptography/mnemonics.js";
|
|
8
|
-
import { Secp256k1PublicKey } from "./publickey.js";
|
|
9
|
-
export const DEFAULT_SECP256K1_DERIVATION_PATH = "m/54'/784'/0'/0/0";
|
|
10
|
-
export class Secp256k1Keypair extends Keypair {
|
|
11
|
-
keypair;
|
|
12
|
-
constructor(keypair) {
|
|
13
|
-
super();
|
|
14
|
-
if (keypair) {
|
|
15
|
-
this.keypair = keypair;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
const secretKey = secp256k1.utils.randomPrivateKey();
|
|
19
|
-
const publicKey = secp256k1.getPublicKey(secretKey, true);
|
|
20
|
-
this.keypair = { publicKey, secretKey };
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
getKeyScheme() {
|
|
24
|
-
return "Secp256k1";
|
|
25
|
-
}
|
|
26
|
-
static generate() {
|
|
27
|
-
return new Secp256k1Keypair();
|
|
28
|
-
}
|
|
29
|
-
static fromSecretKey(secretKey, options) {
|
|
30
|
-
if (typeof secretKey === "string") {
|
|
31
|
-
const decoded = decodeWowPrivateKey(secretKey);
|
|
32
|
-
if (decoded.scheme !== "Secp256k1") {
|
|
33
|
-
throw new Error(`Expected a Secp256k1 keypair, got ${decoded.scheme}`);
|
|
34
|
-
}
|
|
35
|
-
return this.fromSecretKey(decoded.secretKey, options);
|
|
36
|
-
}
|
|
37
|
-
const publicKey = secp256k1.getPublicKey(secretKey, true);
|
|
38
|
-
if (!options || !options.skipValidation) {
|
|
39
|
-
const encoder = new TextEncoder();
|
|
40
|
-
const signData = encoder.encode("sui validation");
|
|
41
|
-
const msgHash = bytesToHex(blake2b(signData, { dkLen: 32 }));
|
|
42
|
-
const signature = secp256k1.sign(msgHash, secretKey);
|
|
43
|
-
if (!secp256k1.verify(signature, msgHash, publicKey, { lowS: true })) {
|
|
44
|
-
throw new Error("Provided secretKey is invalid");
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return new Secp256k1Keypair({ publicKey, secretKey });
|
|
48
|
-
}
|
|
49
|
-
static fromSeed(seed) {
|
|
50
|
-
const publicKey = secp256k1.getPublicKey(seed, true);
|
|
51
|
-
return new Secp256k1Keypair({ publicKey, secretKey: seed });
|
|
52
|
-
}
|
|
53
|
-
getPublicKey() {
|
|
54
|
-
return new Secp256k1PublicKey(this.keypair.publicKey);
|
|
55
|
-
}
|
|
56
|
-
getSecretKey() {
|
|
57
|
-
return encodeWowPrivateKey(this.keypair.secretKey, this.getKeyScheme());
|
|
58
|
-
}
|
|
59
|
-
async sign(data) {
|
|
60
|
-
const msgHash = sha256(data);
|
|
61
|
-
const sig = secp256k1.sign(msgHash, this.keypair.secretKey, {
|
|
62
|
-
lowS: true,
|
|
63
|
-
});
|
|
64
|
-
return sig.toCompactRawBytes();
|
|
65
|
-
}
|
|
66
|
-
static deriveKeypair(mnemonics, path) {
|
|
67
|
-
if (path == null) {
|
|
68
|
-
path = DEFAULT_SECP256K1_DERIVATION_PATH;
|
|
69
|
-
}
|
|
70
|
-
if (!isValidBIP32Path(path)) {
|
|
71
|
-
throw new Error("Invalid derivation path");
|
|
72
|
-
}
|
|
73
|
-
const key = HDKey.fromMasterSeed(mnemonicToSeed(mnemonics)).derive(path);
|
|
74
|
-
if (key.publicKey == null || key.privateKey == null) {
|
|
75
|
-
throw new Error("Invalid key");
|
|
76
|
-
}
|
|
77
|
-
return new Secp256k1Keypair({
|
|
78
|
-
publicKey: key.publicKey,
|
|
79
|
-
secretKey: key.privateKey,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
1
|
+
import{secp256k1}from'@noble/curves/secp256k1';import{blake2b}from'@noble/hashes/blake2b';import{sha256}from'@noble/hashes/sha256';import{bytesToHex}from'@noble/hashes/utils';import{HDKey}from'@scure/bip32';import{decodeWowPrivateKey,encodeWowPrivateKey,Keypair}from'../../cryptography/keypair.js';import{isValidBIP32Path,mnemonicToSeed}from'../../cryptography/mnemonics.js';import{Secp256k1PublicKey}from'./publickey.js';export const DEFAULT_SECP256K1_DERIVATION_PATH='m/54\x27/784\x27/0\x27/0/0';export class Secp256k1Keypair extends Keypair{['keypair'];constructor(a){super();if(a)this['keypair']=a;else{const b=secp256k1['utils']['randomPrivateKey'](),c=secp256k1['getPublicKey'](b,!![]);this['keypair']={'publicKey':c,'secretKey':b};}}['getKeyScheme'](){return'Secp256k1';}static['generate'](){return new Secp256k1Keypair();}static['fromSecretKey'](a,b){if(typeof a==='string'){const d=decodeWowPrivateKey(a);if(d['scheme']!=='Secp256k1')throw new Error('Expected\x20a\x20Secp256k1\x20keypair,\x20got\x20'+d['scheme']);return this['fromSecretKey'](d['secretKey'],b);}const c=secp256k1['getPublicKey'](a,!![]);if(!b||!b['skipValidation']){const e=new TextEncoder(),f=e['encode']('sui\x20validation'),g=bytesToHex(blake2b(f,{'dkLen':0x20})),h=secp256k1['sign'](g,a);if(!secp256k1['verify'](h,g,c,{'lowS':!![]}))throw new Error('Provided\x20secretKey\x20is\x20invalid');}return new Secp256k1Keypair({'publicKey':c,'secretKey':a});}static['fromSeed'](a){const b=secp256k1['getPublicKey'](a,!![]);return new Secp256k1Keypair({'publicKey':b,'secretKey':a});}['getPublicKey'](){return new Secp256k1PublicKey(this['keypair']['publicKey']);}['getSecretKey'](){return encodeWowPrivateKey(this['keypair']['secretKey'],this['getKeyScheme']());}async['sign'](a){const b=sha256(a),c=secp256k1['sign'](b,this['keypair']['secretKey'],{'lowS':!![]});return c['toCompactRawBytes']();}static['deriveKeypair'](a,b){b==null&&(b=DEFAULT_SECP256K1_DERIVATION_PATH);if(!isValidBIP32Path(b))throw new Error('Invalid\x20derivation\x20path');const c=HDKey['fromMasterSeed'](mnemonicToSeed(a))['derive'](b);if(c['publicKey']==null||c['privateKey']==null)throw new Error('Invalid\x20key');return new Secp256k1Keypair({'publicKey':c['publicKey'],'secretKey':c['privateKey']});}}
|
|
@@ -1,51 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { secp256k1 } from "@noble/curves/secp256k1";
|
|
3
|
-
import { sha256 } from "@noble/hashes/sha256";
|
|
4
|
-
import { bytesEqual, parseSerializedKeypairSignature, PublicKey, } from "../../cryptography/publickey.js";
|
|
5
|
-
import { SIGNATURE_SCHEME_TO_FLAG } from "../../cryptography/signature-scheme.js";
|
|
6
|
-
const SECP256K1_PUBLIC_KEY_SIZE = 33;
|
|
7
|
-
export class Secp256k1PublicKey extends PublicKey {
|
|
8
|
-
static SIZE = SECP256K1_PUBLIC_KEY_SIZE;
|
|
9
|
-
data;
|
|
10
|
-
constructor(value) {
|
|
11
|
-
super();
|
|
12
|
-
if (typeof value === "string") {
|
|
13
|
-
this.data = fromBase64(value);
|
|
14
|
-
}
|
|
15
|
-
else if (value instanceof Uint8Array) {
|
|
16
|
-
this.data = value;
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
this.data = Uint8Array.from(value);
|
|
20
|
-
}
|
|
21
|
-
if (this.data.length !== SECP256K1_PUBLIC_KEY_SIZE) {
|
|
22
|
-
throw new Error(`Invalid public key input. Expected ${SECP256K1_PUBLIC_KEY_SIZE} bytes, got ${this.data.length}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
equals(publicKey) {
|
|
26
|
-
return super.equals(publicKey);
|
|
27
|
-
}
|
|
28
|
-
toRawBytes() {
|
|
29
|
-
return this.data;
|
|
30
|
-
}
|
|
31
|
-
flag() {
|
|
32
|
-
return SIGNATURE_SCHEME_TO_FLAG["Secp256k1"];
|
|
33
|
-
}
|
|
34
|
-
async verify(message, signature) {
|
|
35
|
-
let bytes;
|
|
36
|
-
if (typeof signature === "string") {
|
|
37
|
-
const parsed = parseSerializedKeypairSignature(signature);
|
|
38
|
-
if (parsed.signatureScheme !== "Secp256k1") {
|
|
39
|
-
throw new Error("Invalid signature scheme");
|
|
40
|
-
}
|
|
41
|
-
if (!bytesEqual(this.toRawBytes(), parsed.publicKey)) {
|
|
42
|
-
throw new Error("Signature does not match public key");
|
|
43
|
-
}
|
|
44
|
-
bytes = parsed.signature;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
bytes = signature;
|
|
48
|
-
}
|
|
49
|
-
return secp256k1.verify(secp256k1.Signature.fromCompact(bytes), sha256(message), this.toRawBytes());
|
|
50
|
-
}
|
|
51
|
-
}
|
|
1
|
+
import{fromBase64}from'@mysten/bcs';import{secp256k1}from'@noble/curves/secp256k1';import{sha256}from'@noble/hashes/sha256';import{bytesEqual,parseSerializedKeypairSignature,PublicKey}from'../../cryptography/publickey.js';import{SIGNATURE_SCHEME_TO_FLAG}from'../../cryptography/signature-scheme.js';const SECP256K1_PUBLIC_KEY_SIZE=0x21;export class Secp256k1PublicKey extends PublicKey{static ['SIZE']=SECP256K1_PUBLIC_KEY_SIZE;['data'];constructor(a){super();if(typeof a==='string')this['data']=fromBase64(a);else a instanceof Uint8Array?this['data']=a:this['data']=Uint8Array['from'](a);if(this['data']['length']!==SECP256K1_PUBLIC_KEY_SIZE)throw new Error('Invalid\x20public\x20key\x20input.\x20Expected\x20'+SECP256K1_PUBLIC_KEY_SIZE+'\x20bytes,\x20got\x20'+this['data']['length']);}['equals'](a){return super['equals'](a);}['toRawBytes'](){return this['data'];}['flag'](){return SIGNATURE_SCHEME_TO_FLAG['Secp256k1'];}async['verify'](a,b){let c;if(typeof b==='string'){const d=parseSerializedKeypairSignature(b);if(d['signatureScheme']!=='Secp256k1')throw new Error('Invalid\x20signature\x20scheme');if(!bytesEqual(this['toRawBytes'](),d['publicKey']))throw new Error('Signature\x20does\x20not\x20match\x20public\x20key');c=d['signature'];}else c=b;return secp256k1['verify'](secp256k1['Signature']['fromCompact'](c),sha256(a),this['toRawBytes']());}}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { Secp256r1PublicKey } from "./publickey.js";
|
|
1
|
+
export{DEFAULT_SECP256R1_DERIVATION_PATH,Secp256r1Keypair}from'./keypair.js';export{Secp256r1PublicKey}from'./publickey.js';
|