@aptos-labs/ts-sdk 3.0.0 → 3.1.0
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/common/{account-CEmLe1wW.d.ts → account-Bb5REyaT.d.ts} +60 -11
- package/dist/common/chunk-6MMUUJHX.js +4 -0
- package/dist/common/chunk-6MMUUJHX.js.map +1 -0
- package/dist/common/cli/index.d.ts +1 -1
- package/dist/common/cli/index.js +1 -1
- package/dist/common/cli/index.js.map +1 -1
- package/dist/common/index.d.ts +121 -9
- package/dist/common/index.js +53 -32
- package/dist/common/index.js.map +1 -1
- package/dist/esm/{Ed25519Account-Ccxj1zdx.d.mts → Ed25519Account-ndmdpFe9.d.mts} +1 -1
- package/dist/esm/account/AbstractKeylessAccount.d.mts +3 -3
- package/dist/esm/account/AbstractKeylessAccount.mjs +1 -1
- package/dist/esm/account/AbstractedAccount.d.mts +2 -2
- package/dist/esm/account/AbstractedAccount.mjs +1 -1
- package/dist/esm/account/Account.d.mts +2 -2
- package/dist/esm/account/Account.mjs +1 -1
- package/dist/esm/account/AccountUtils.d.mts +3 -3
- package/dist/esm/account/AccountUtils.mjs +1 -1
- package/dist/esm/account/DerivableAbstractedAccount.d.mts +2 -2
- package/dist/esm/account/DerivableAbstractedAccount.mjs +1 -1
- package/dist/esm/account/Ed25519Account.d.mts +2 -2
- package/dist/esm/account/Ed25519Account.mjs +1 -1
- package/dist/esm/account/EphemeralKeyPair.d.mts +1 -1
- package/dist/esm/account/EphemeralKeyPair.mjs +1 -1
- package/dist/esm/account/FederatedKeylessAccount.d.mts +4 -3
- package/dist/esm/account/FederatedKeylessAccount.mjs +1 -1
- package/dist/esm/account/KeylessAccount.d.mts +4 -3
- package/dist/esm/account/KeylessAccount.mjs +1 -1
- package/dist/esm/account/MultiEd25519Account.d.mts +2 -2
- package/dist/esm/account/MultiEd25519Account.mjs +1 -1
- package/dist/esm/account/MultiKeyAccount.d.mts +3 -3
- package/dist/esm/account/MultiKeyAccount.mjs +1 -1
- package/dist/esm/account/SingleKeyAccount.d.mts +2 -2
- package/dist/esm/account/SingleKeyAccount.mjs +1 -1
- package/dist/esm/account/index.d.mts +3 -3
- package/dist/esm/account/index.mjs +1 -1
- package/dist/esm/account/utils.d.mts +1 -1
- package/dist/esm/account/utils.mjs +1 -1
- package/dist/esm/{account-9G6tix5T.d.mts → account--Q9z_xMN.d.mts} +37 -3
- package/dist/esm/api/account/abstraction.d.mts +1 -1
- package/dist/esm/api/account/abstraction.mjs +1 -1
- package/dist/esm/api/account.d.mts +94 -3
- package/dist/esm/api/account.mjs +1 -1
- package/dist/esm/api/ans.d.mts +2 -2
- package/dist/esm/api/ans.mjs +1 -1
- package/dist/esm/api/aptos.d.mts +6 -4
- package/dist/esm/api/aptos.mjs +1 -1
- package/dist/esm/api/aptosConfig.d.mts +1 -1
- package/dist/esm/api/aptosConfig.mjs +1 -1
- package/dist/esm/api/coin.d.mts +1 -1
- package/dist/esm/api/coin.mjs +1 -1
- package/dist/esm/api/digitalAsset.d.mts +2 -2
- package/dist/esm/api/digitalAsset.mjs +1 -1
- package/dist/esm/api/event.d.mts +1 -1
- package/dist/esm/api/event.mjs +1 -1
- package/dist/esm/api/faucet.d.mts +1 -1
- package/dist/esm/api/faucet.mjs +1 -1
- package/dist/esm/api/fungibleAsset.d.mts +2 -2
- package/dist/esm/api/fungibleAsset.mjs +1 -1
- package/dist/esm/api/general.d.mts +1 -1
- package/dist/esm/api/general.mjs +1 -1
- package/dist/esm/api/index.d.mts +6 -4
- package/dist/esm/api/index.mjs +1 -1
- package/dist/esm/api/keyless.d.mts +3 -3
- package/dist/esm/api/keyless.mjs +1 -1
- package/dist/esm/api/object.d.mts +1 -1
- package/dist/esm/api/object.mjs +1 -1
- package/dist/esm/api/staking.d.mts +1 -1
- package/dist/esm/api/staking.mjs +1 -1
- package/dist/esm/api/table.d.mts +1 -1
- package/dist/esm/api/table.mjs +1 -1
- package/dist/esm/api/transaction.d.mts +3 -2
- package/dist/esm/api/transaction.mjs +1 -1
- package/dist/esm/api/transactionSubmission/build.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/build.mjs +1 -1
- package/dist/esm/api/transactionSubmission/management.d.mts +2 -2
- package/dist/esm/api/transactionSubmission/management.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.d.mts +2 -2
- package/dist/esm/api/transactionSubmission/sign.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.mjs.map +1 -1
- package/dist/esm/api/transactionSubmission/simulate.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/simulate.mjs +1 -1
- package/dist/esm/api/transactionSubmission/submit.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/submit.mjs +1 -1
- package/dist/esm/api/utils.d.mts +1 -1
- package/dist/esm/api/utils.mjs +1 -1
- package/dist/esm/bcs/consts.d.mts +1 -1
- package/dist/esm/bcs/deserializer.d.mts +1 -1
- package/dist/esm/bcs/index.d.mts +1 -1
- package/dist/esm/bcs/index.mjs +1 -1
- package/dist/esm/bcs/serializable/entryFunctionBytes.d.mts +1 -1
- package/dist/esm/bcs/serializable/fixedBytes.d.mts +1 -1
- package/dist/esm/bcs/serializable/movePrimitives.d.mts +1 -1
- package/dist/esm/bcs/serializable/movePrimitives.mjs +1 -1
- package/dist/esm/bcs/serializable/moveStructs.d.mts +1 -1
- package/dist/esm/bcs/serializable/moveStructs.mjs +1 -1
- package/dist/esm/bcs/serializer.d.mts +1 -1
- package/dist/esm/{chunk-Q4W3WJ2U.mjs → chunk-2BOHKN33.mjs} +2 -2
- package/dist/esm/{chunk-SAMHWS73.mjs → chunk-4COLMDT3.mjs} +2 -2
- package/dist/esm/chunk-5HXLZHDW.mjs +1 -0
- package/dist/esm/chunk-5HXLZHDW.mjs.map +1 -0
- package/dist/esm/{chunk-5ZRPV4YI.mjs → chunk-5URUYE6H.mjs} +2 -2
- package/dist/esm/chunk-ACNHLCQQ.mjs +6 -0
- package/dist/esm/chunk-ACNHLCQQ.mjs.map +1 -0
- package/dist/esm/{chunk-2XQKGWHQ.mjs → chunk-FYYEPFML.mjs} +2 -2
- package/dist/esm/chunk-HUWKPKPQ.mjs +2 -0
- package/dist/esm/{chunk-HMUIOIBG.mjs.map → chunk-HUWKPKPQ.mjs.map} +1 -1
- package/dist/esm/chunk-IJE2LVZG.mjs +2 -0
- package/dist/esm/chunk-IJE2LVZG.mjs.map +1 -0
- package/dist/esm/chunk-JCFTAG5Z.mjs +2 -0
- package/dist/esm/{chunk-RJ7F4JDV.mjs.map → chunk-JCFTAG5Z.mjs.map} +1 -1
- package/dist/esm/{chunk-YHGGNYYL.mjs → chunk-MML57K5H.mjs} +2 -2
- package/dist/esm/{chunk-PFXXFUBL.mjs → chunk-MNDTFHDB.mjs} +2 -2
- package/dist/esm/{chunk-FSP4QM2T.mjs → chunk-SLWIGOQL.mjs} +2 -2
- package/dist/esm/{chunk-7T62PEFI.mjs → chunk-TYYVB2A6.mjs} +2 -2
- package/dist/esm/{chunk-WOTQ7227.mjs → chunk-U3GMNXO4.mjs} +2 -2
- package/dist/esm/{chunk-VHNX2NUR.mjs → chunk-UL777LTI.mjs} +47 -26
- package/dist/esm/chunk-UL777LTI.mjs.map +1 -0
- package/dist/esm/{chunk-IDHVW7HS.mjs → chunk-XZ75T7Q7.mjs} +2 -2
- package/dist/esm/{chunk-UIVX6WSC.mjs → chunk-Y7ZQTLH4.mjs} +2 -2
- package/dist/esm/{chunk-R7NQJWDG.mjs → chunk-Z5URUE4U.mjs} +2 -2
- package/dist/esm/cli/index.d.mts +1 -1
- package/dist/esm/cli/index.mjs +1 -1
- package/dist/esm/cli/localNode.mjs +1 -1
- package/dist/esm/cli/move.d.mts +1 -1
- package/dist/esm/client/core.d.mts +1 -1
- package/dist/esm/client/core.mjs +1 -1
- package/dist/esm/client/get.d.mts +1 -1
- package/dist/esm/client/get.mjs +1 -1
- package/dist/esm/client/index.d.mts +1 -1
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/client/post.d.mts +1 -1
- package/dist/esm/client/post.mjs +1 -1
- package/dist/esm/core/account/index.d.mts +1 -1
- package/dist/esm/core/account/index.mjs +1 -1
- package/dist/esm/core/account/utils/address.d.mts +1 -1
- package/dist/esm/core/account/utils/address.mjs +1 -1
- package/dist/esm/core/account/utils/index.d.mts +1 -1
- package/dist/esm/core/account/utils/index.mjs +1 -1
- package/dist/esm/core/accountAddress.d.mts +1 -1
- package/dist/esm/core/accountAddress.mjs +1 -1
- package/dist/esm/core/authenticationKey.d.mts +1 -1
- package/dist/esm/core/authenticationKey.mjs +1 -1
- package/dist/esm/core/crypto/abstraction.d.mts +1 -1
- package/dist/esm/core/crypto/abstraction.mjs +1 -1
- package/dist/esm/core/crypto/deserializationUtils.d.mts +1 -1
- package/dist/esm/core/crypto/deserializationUtils.mjs +1 -1
- package/dist/esm/core/crypto/ed25519.d.mts +1 -1
- package/dist/esm/core/crypto/ed25519.mjs +1 -1
- package/dist/esm/core/crypto/ephemeral.d.mts +1 -1
- package/dist/esm/core/crypto/ephemeral.mjs +1 -1
- package/dist/esm/core/crypto/federatedKeyless.d.mts +2 -2
- package/dist/esm/core/crypto/federatedKeyless.mjs +1 -1
- package/dist/esm/core/crypto/index.d.mts +3 -2
- package/dist/esm/core/crypto/index.mjs +1 -1
- package/dist/esm/core/crypto/keyless.d.mts +2 -2
- package/dist/esm/core/crypto/keyless.mjs +1 -1
- package/dist/esm/core/crypto/multiEd25519.d.mts +1 -1
- package/dist/esm/core/crypto/multiEd25519.mjs +1 -1
- package/dist/esm/core/crypto/multiKey.d.mts +1 -1
- package/dist/esm/core/crypto/multiKey.mjs +1 -1
- package/dist/esm/core/crypto/privateKey.d.mts +1 -1
- package/dist/esm/core/crypto/privateKey.mjs +1 -1
- package/dist/esm/core/crypto/proof.d.mts +1 -1
- package/dist/esm/core/crypto/proof.mjs +1 -1
- package/dist/esm/core/crypto/publicKey.d.mts +1 -1
- package/dist/esm/core/crypto/publicKey.mjs +1 -1
- package/dist/esm/core/crypto/secp256k1.d.mts +1 -1
- package/dist/esm/core/crypto/secp256k1.mjs +1 -1
- package/dist/esm/core/crypto/signature.d.mts +1 -1
- package/dist/esm/core/crypto/signature.mjs +1 -1
- package/dist/esm/core/crypto/singleKey.d.mts +1 -1
- package/dist/esm/core/crypto/singleKey.mjs +1 -1
- package/dist/esm/core/crypto/types.d.mts +11 -0
- package/dist/esm/core/crypto/types.mjs +2 -0
- package/dist/esm/core/crypto/types.mjs.map +1 -0
- package/dist/esm/core/crypto/utils.d.mts +1 -1
- package/dist/esm/core/hex.d.mts +1 -1
- package/dist/esm/core/index.d.mts +3 -2
- package/dist/esm/core/index.mjs +1 -1
- package/dist/esm/errors/index.d.mts +1 -1
- package/dist/esm/errors/index.mjs +1 -1
- package/dist/esm/{federatedKeyless-CVKW5pnz.d.mts → federatedKeyless-CiyplsOB.d.mts} +1 -1
- package/dist/esm/index.d.mts +6 -4
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internal/abstraction.d.mts +1 -1
- package/dist/esm/internal/abstraction.mjs +1 -1
- package/dist/esm/internal/account.d.mts +38 -8
- package/dist/esm/internal/account.mjs +1 -1
- package/dist/esm/internal/ans.d.mts +2 -2
- package/dist/esm/internal/ans.mjs +1 -1
- package/dist/esm/internal/coin.d.mts +1 -1
- package/dist/esm/internal/coin.mjs +1 -1
- package/dist/esm/internal/digitalAsset.d.mts +2 -2
- package/dist/esm/internal/digitalAsset.mjs +1 -1
- package/dist/esm/internal/event.d.mts +1 -1
- package/dist/esm/internal/event.mjs +1 -1
- package/dist/esm/internal/faucet.d.mts +1 -1
- package/dist/esm/internal/faucet.mjs +1 -1
- package/dist/esm/internal/fungibleAsset.d.mts +2 -2
- package/dist/esm/internal/fungibleAsset.mjs +1 -1
- package/dist/esm/internal/general.d.mts +1 -1
- package/dist/esm/internal/general.mjs +1 -1
- package/dist/esm/internal/keyless.d.mts +12 -3
- package/dist/esm/internal/keyless.mjs +1 -1
- package/dist/esm/internal/object.d.mts +1 -1
- package/dist/esm/internal/object.mjs +1 -1
- package/dist/esm/internal/staking.d.mts +1 -1
- package/dist/esm/internal/staking.mjs +1 -1
- package/dist/esm/internal/table.d.mts +1 -1
- package/dist/esm/internal/table.mjs +1 -1
- package/dist/esm/internal/transaction.d.mts +1 -1
- package/dist/esm/internal/transaction.mjs +1 -1
- package/dist/esm/internal/transactionSubmission.d.mts +2 -2
- package/dist/esm/internal/transactionSubmission.mjs +1 -1
- package/dist/esm/internal/utils/index.d.mts +1 -1
- package/dist/esm/internal/utils/index.mjs +1 -1
- package/dist/esm/internal/utils/utils.d.mts +1 -1
- package/dist/esm/internal/utils/utils.mjs +1 -1
- package/dist/esm/internal/view.d.mts +1 -1
- package/dist/esm/internal/view.mjs +1 -1
- package/dist/esm/transactions/authenticator/account.d.mts +1 -1
- package/dist/esm/transactions/authenticator/account.mjs +1 -1
- package/dist/esm/transactions/authenticator/index.d.mts +1 -1
- package/dist/esm/transactions/authenticator/index.mjs +1 -1
- package/dist/esm/transactions/authenticator/transaction.d.mts +1 -1
- package/dist/esm/transactions/authenticator/transaction.mjs +1 -1
- package/dist/esm/transactions/index.d.mts +1 -1
- package/dist/esm/transactions/index.mjs +1 -1
- package/dist/esm/transactions/instances/chainId.d.mts +1 -1
- package/dist/esm/transactions/instances/identifier.d.mts +1 -1
- package/dist/esm/transactions/instances/index.d.mts +1 -1
- package/dist/esm/transactions/instances/index.mjs +1 -1
- package/dist/esm/transactions/instances/moduleId.d.mts +1 -1
- package/dist/esm/transactions/instances/moduleId.mjs +1 -1
- package/dist/esm/transactions/instances/multiAgentTransaction.d.mts +1 -1
- package/dist/esm/transactions/instances/multiAgentTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rawTransaction.d.mts +1 -1
- package/dist/esm/transactions/instances/rawTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.d.mts +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.mjs +1 -1
- package/dist/esm/transactions/instances/signedTransaction.d.mts +1 -1
- package/dist/esm/transactions/instances/signedTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/simpleTransaction.d.mts +1 -1
- package/dist/esm/transactions/instances/simpleTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/transactionArgument.d.mts +1 -1
- package/dist/esm/transactions/instances/transactionPayload.d.mts +1 -1
- package/dist/esm/transactions/instances/transactionPayload.mjs +1 -1
- package/dist/esm/transactions/management/accountSequenceNumber.d.mts +2 -2
- package/dist/esm/transactions/management/accountSequenceNumber.mjs +1 -1
- package/dist/esm/transactions/management/index.d.mts +2 -2
- package/dist/esm/transactions/management/index.mjs +1 -1
- package/dist/esm/transactions/management/transactionWorker.d.mts +2 -2
- package/dist/esm/transactions/management/transactionWorker.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/index.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/index.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/remoteAbi.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/remoteAbi.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/signingMessage.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/signingMessage.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.mjs +1 -1
- package/dist/esm/transactions/typeTag/index.d.mts +1 -1
- package/dist/esm/transactions/typeTag/index.mjs +1 -1
- package/dist/esm/transactions/typeTag/parser.d.mts +1 -1
- package/dist/esm/transactions/typeTag/parser.mjs +1 -1
- package/dist/esm/transactions/types.d.mts +1 -1
- package/dist/esm/types/generated/operations.d.mts +37 -10
- package/dist/esm/types/generated/queries.d.mts +6 -2
- package/dist/esm/types/generated/queries.mjs +1 -1
- package/dist/esm/types/generated/types.d.mts +584 -1172
- package/dist/esm/types/generated/types.mjs +1 -1
- package/dist/esm/types/generated/types.mjs.map +1 -1
- package/dist/esm/types/index.d.mts +2 -2
- package/dist/esm/types/index.mjs +1 -1
- package/dist/esm/types/indexer.d.mts +8 -2
- package/dist/esm/types/types.d.mts +1 -1
- package/dist/esm/types/types.mjs +1 -1
- package/dist/esm/utils/const.d.mts +1 -0
- package/dist/esm/utils/const.mjs +1 -1
- package/dist/esm/utils/helpers.d.mts +1 -1
- package/dist/esm/utils/helpers.mjs +1 -1
- package/dist/esm/utils/index.d.mts +1 -1
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils/normalizeBundle.d.mts +1 -1
- package/dist/esm/utils/normalizeBundle.mjs +1 -1
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/package.json +19 -18
- package/src/account/FederatedKeylessAccount.ts +7 -1
- package/src/account/KeylessAccount.ts +17 -2
- package/src/api/account.ts +135 -2
- package/src/api/transaction.ts +1 -0
- package/src/core/crypto/index.ts +1 -0
- package/src/core/crypto/multiEd25519.ts +26 -0
- package/src/core/crypto/multiKey.ts +6 -0
- package/src/core/crypto/types.ts +9 -0
- package/src/internal/account.ts +526 -59
- package/src/internal/keyless.ts +10 -0
- package/src/internal/move/jwks/build/jwk/BuildInfo.yaml +56 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/block.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_id.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_status.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/code.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/config_buffer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/consensus_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/create_signer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dkg.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/event.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/execution_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/function_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/genesis.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/guid.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwks.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/keyless_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/managed_coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/multisig_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/resource_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/stake.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_contract.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/state_storage.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/storage_gas.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/system_addresses.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/timestamp.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_context.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/util.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/version.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/vesting.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/voting.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/any.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/big_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/capability.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/comparator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/debug.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ed25519.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math128.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/simple_map.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_table.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/string_utils.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/type_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/acl.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bcs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/error.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/features.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/hash.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/option.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/signer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/string.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_scripts/main.mv +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_governance.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/block.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_id.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_status.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/code.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/config_buffer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/consensus_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/create_signer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/delegation_pool.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dkg.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/event.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/execution_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/function_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/fungible_asset.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/gas_schedule.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/genesis.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/governance_proposal.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/guid.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwks.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/keyless_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/managed_coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/multisig_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/resource_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/stake.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_contract.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_proxy.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/state_storage.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/storage_gas.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/system_addresses.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/timestamp.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_context.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_fee.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_validation.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/util.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/version.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/vesting.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/voting.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/any.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/big_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/capability.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/comparator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/copyable_any.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/debug.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ed25519.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/from_bcs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math128.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/secp256k1.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/simple_map.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_table.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/string_utils.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table_with_length.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/type_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/acl.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bcs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bit_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/error.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/features.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/hash.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/option.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/signer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/string.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/main.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/account.move +1533 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator.move +48 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_factory.move +66 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_v2.move +280 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_account.move +443 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_coin.move +204 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_governance.move +1387 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/block.move +394 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_id.move +41 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_status.move +48 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/code.move +367 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/coin.move +2214 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/config_buffer.move +101 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/consensus_config.move +77 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/create_signer.move +21 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/delegation_pool.move +5568 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move +228 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dkg.move +121 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/event.move +92 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/execution_config.move +66 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/function_info.move +100 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/fungible_asset.move +1566 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/gas_schedule.move +176 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/genesis.move +550 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/governance_proposal.move +23 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/guid.move +68 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwk_consensus_config.move +148 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwks.move +817 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/keyless_account.move +312 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/managed_coin.move +205 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/multisig_account.move +2477 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object.move +1073 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object_code_deployment.move +147 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/optional_aggregator.move +295 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/primary_fungible_store.move +405 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness.move +574 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_api_v0_config.move +57 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config.move +153 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config_seqnum.move +49 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration.move +237 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_state.move +132 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move +69 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/resource_account.move +267 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/stake.move +3286 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_config.move +686 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_contract.move +1618 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_proxy.move +228 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/state_storage.move +90 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/storage_gas.move +622 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/system_addresses.move +82 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/timestamp.move +88 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_context.move +262 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_fee.move +457 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_validation.move +501 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/util.move +16 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/validator_consensus_info.move +42 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/version.move +115 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/vesting.move +2183 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/voting.move +1279 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/any.move +57 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/aptos_hash.move +253 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/big_vector.move +469 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381.move +985 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381_algebra.move +802 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bn254_algebra.move +855 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/capability.move +193 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/comparator.move +173 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/copyable_any.move +45 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/crypto_algebra.move +351 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/debug.move +278 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ed25519.move +262 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/fixed_point64.move +447 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/from_bcs.move +91 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math128.move +381 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math64.move +336 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed.move +139 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed64.move +142 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/multi_ed25519.move +482 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64.move +571 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64_unbound.move +270 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255.move +1310 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move +253 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_elgamal.move +234 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_pedersen.move +158 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/secp256k1.move +114 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/simple_map.move +319 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_table.move +769 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_vector.move +766 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/string_utils.move +148 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table.move +152 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table_with_length.move +141 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/type_info.move +351 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/acl.move +46 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bcs.move +27 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bit_vector.move +239 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/error.move +88 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/features.move +780 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/fixed_point32.move +295 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/hash.move +8 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/option.move +356 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/signer.move +21 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/string.move +93 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/vector.move +669 -0
- package/src/internal/move/jwks/build/jwk/sources/main.move +20 -0
- package/src/internal/queries/getAccountAddressesForAuthKey.graphql +8 -0
- package/src/internal/queries/getAuthKeysForPublicKey.graphql +11 -0
- package/src/types/codegen.yaml +1 -1
- package/src/types/generated/operations.ts +39 -8
- package/src/types/generated/queries.ts +53 -0
- package/src/types/generated/types.ts +620 -1239
- package/src/types/indexer.ts +8 -0
- package/src/types/types.ts +40 -3
- package/src/utils/const.ts +1 -0
- package/src/version.ts +1 -1
- package/dist/common/chunk-5JIJXVJ5.js +0 -4
- package/dist/common/chunk-5JIJXVJ5.js.map +0 -1
- package/dist/esm/chunk-4H2RMR7D.mjs +0 -2
- package/dist/esm/chunk-4H2RMR7D.mjs.map +0 -1
- package/dist/esm/chunk-GMDBBVDH.mjs +0 -6
- package/dist/esm/chunk-GMDBBVDH.mjs.map +0 -1
- package/dist/esm/chunk-HMUIOIBG.mjs +0 -2
- package/dist/esm/chunk-RJ7F4JDV.mjs +0 -2
- package/dist/esm/chunk-VHNX2NUR.mjs.map +0 -1
- /package/dist/esm/{chunk-Q4W3WJ2U.mjs.map → chunk-2BOHKN33.mjs.map} +0 -0
- /package/dist/esm/{chunk-SAMHWS73.mjs.map → chunk-4COLMDT3.mjs.map} +0 -0
- /package/dist/esm/{chunk-5ZRPV4YI.mjs.map → chunk-5URUYE6H.mjs.map} +0 -0
- /package/dist/esm/{chunk-2XQKGWHQ.mjs.map → chunk-FYYEPFML.mjs.map} +0 -0
- /package/dist/esm/{chunk-YHGGNYYL.mjs.map → chunk-MML57K5H.mjs.map} +0 -0
- /package/dist/esm/{chunk-PFXXFUBL.mjs.map → chunk-MNDTFHDB.mjs.map} +0 -0
- /package/dist/esm/{chunk-FSP4QM2T.mjs.map → chunk-SLWIGOQL.mjs.map} +0 -0
- /package/dist/esm/{chunk-7T62PEFI.mjs.map → chunk-TYYVB2A6.mjs.map} +0 -0
- /package/dist/esm/{chunk-WOTQ7227.mjs.map → chunk-U3GMNXO4.mjs.map} +0 -0
- /package/dist/esm/{chunk-IDHVW7HS.mjs.map → chunk-XZ75T7Q7.mjs.map} +0 -0
- /package/dist/esm/{chunk-UIVX6WSC.mjs.map → chunk-Y7ZQTLH4.mjs.map} +0 -0
- /package/dist/esm/{chunk-R7NQJWDG.mjs.map → chunk-Z5URUE4U.mjs.map} +0 -0
|
@@ -0,0 +1,985 @@
|
|
|
1
|
+
/// Contains functions for:
|
|
2
|
+
///
|
|
3
|
+
/// The minimum-pubkey-size variant of [Boneh-Lynn-Shacham (BLS) signatures](https://en.wikipedia.org/wiki/BLS_digital_signature),
|
|
4
|
+
/// where public keys are BLS12-381 elliptic-curve points in $\mathbb{G}_1$ and signatures are in $\mathbb{G}_2$,
|
|
5
|
+
/// as per the [IETF BLS draft standard](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature#section-2.1).
|
|
6
|
+
|
|
7
|
+
module aptos_std::bls12381 {
|
|
8
|
+
use std::option::{Self, Option};
|
|
9
|
+
#[test_only]
|
|
10
|
+
use std::error::invalid_argument;
|
|
11
|
+
|
|
12
|
+
/// The signature size, in bytes
|
|
13
|
+
const SIGNATURE_SIZE: u64 = 96;
|
|
14
|
+
|
|
15
|
+
/// The public key size, in bytes
|
|
16
|
+
const PUBLIC_KEY_NUM_BYTES: u64 = 48;
|
|
17
|
+
|
|
18
|
+
/// The caller was supposed to input one or more public keys.
|
|
19
|
+
const EZERO_PUBKEYS: u64 = 1;
|
|
20
|
+
|
|
21
|
+
/// One of the given inputs has the wrong size.s
|
|
22
|
+
const EWRONG_SIZE: u64 = 2;
|
|
23
|
+
|
|
24
|
+
/// The number of signers does not match the number of messages to be signed.
|
|
25
|
+
const E_NUM_SIGNERS_MUST_EQ_NUM_MESSAGES: u64 = 3;
|
|
26
|
+
|
|
27
|
+
// TODO: Performance would increase if structs in this module are implemented natively via handles (similar to Table and
|
|
28
|
+
// RistrettoPoint). This will avoid unnecessary (de)serialization. We would need to allow storage of these structs too.
|
|
29
|
+
|
|
30
|
+
#[test_only]
|
|
31
|
+
struct SecretKey has copy, drop {
|
|
32
|
+
bytes: vector<u8>,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// A *validated* public key that:
|
|
36
|
+
/// (1) is a point in the prime-order subgroup of the BLS12-381 elliptic curve, and
|
|
37
|
+
/// (2) is not the identity point
|
|
38
|
+
///
|
|
39
|
+
/// This struct can be used to verify a normal (non-aggregated) signature.
|
|
40
|
+
///
|
|
41
|
+
/// This struct can be combined with a ProofOfPossession struct in order to create a PublicKeyWithPop struct, which
|
|
42
|
+
/// can be used to verify a multisignature.
|
|
43
|
+
struct PublicKey has copy, drop, store {
|
|
44
|
+
bytes: vector<u8>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// A proof-of-possession (PoP).
|
|
48
|
+
/// Given such a struct and a PublicKey struct, one can construct a PublicKeyWithPoP (see below).
|
|
49
|
+
struct ProofOfPossession has copy, drop, store {
|
|
50
|
+
bytes: vector<u8>
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// A *validated* public key that had a successfully-verified proof-of-possession (PoP).
|
|
54
|
+
///
|
|
55
|
+
/// A vector of these structs can be either:
|
|
56
|
+
/// (1) used to verify an aggregate signature
|
|
57
|
+
/// (2) aggregated with other PublicKeyWithPoP structs into an AggrPublicKeysWithPoP, which in turn can be used
|
|
58
|
+
/// to verify a multisignature
|
|
59
|
+
struct PublicKeyWithPoP has copy, drop, store {
|
|
60
|
+
bytes: vector<u8>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// An aggregation of public keys with verified PoPs, which can be used to verify multisignatures.
|
|
64
|
+
struct AggrPublicKeysWithPoP has copy, drop, store {
|
|
65
|
+
bytes: vector<u8>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// A BLS signature. This can be either a:
|
|
69
|
+
/// (1) normal (non-aggregated) signature
|
|
70
|
+
/// (2) signature share (for a multisignature or aggregate signature)
|
|
71
|
+
struct Signature has copy, drop, store {
|
|
72
|
+
bytes: vector<u8>
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// An aggregation of BLS signatures. This can be either a:
|
|
76
|
+
/// (4) aggregated signature (i.e., an aggregation of signatures s_i, each on a message m_i)
|
|
77
|
+
/// (3) multisignature (i.e., an aggregation of signatures s_i, each on the same message m)
|
|
78
|
+
///
|
|
79
|
+
/// We distinguish between a Signature type and a AggrOrMultiSignature type to prevent developers from interchangeably
|
|
80
|
+
/// calling `verify_multisignature` and `verify_signature_share` to verify both multisignatures and signature shares,
|
|
81
|
+
/// which could create problems down the line.
|
|
82
|
+
struct AggrOrMultiSignature has copy, drop, store {
|
|
83
|
+
bytes: vector<u8>
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// Creates a new public key from a sequence of bytes.
|
|
87
|
+
public fun public_key_from_bytes(bytes: vector<u8>): Option<PublicKey> {
|
|
88
|
+
if (validate_pubkey_internal(bytes)) {
|
|
89
|
+
option::some(PublicKey {
|
|
90
|
+
bytes
|
|
91
|
+
})
|
|
92
|
+
} else {
|
|
93
|
+
option::none<PublicKey>()
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// Serializes a public key into 48 bytes.
|
|
98
|
+
public fun public_key_to_bytes(pk: &PublicKey): vector<u8> {
|
|
99
|
+
pk.bytes
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Creates a new proof-of-possession (PoP) which can be later used to create a PublicKeyWithPoP struct,
|
|
103
|
+
public fun proof_of_possession_from_bytes(bytes: vector<u8>): ProofOfPossession {
|
|
104
|
+
ProofOfPossession {
|
|
105
|
+
bytes
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// Serializes the signature into 96 bytes.
|
|
110
|
+
public fun proof_of_possession_to_bytes(pop: &ProofOfPossession): vector<u8> {
|
|
111
|
+
pop.bytes
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/// Creates a PoP'd public key from a normal public key and a corresponding proof-of-possession.
|
|
115
|
+
public fun public_key_from_bytes_with_pop(pk_bytes: vector<u8>, pop: &ProofOfPossession): Option<PublicKeyWithPoP> {
|
|
116
|
+
if (verify_proof_of_possession_internal(pk_bytes, pop.bytes)) {
|
|
117
|
+
option::some(PublicKeyWithPoP {
|
|
118
|
+
bytes: pk_bytes
|
|
119
|
+
})
|
|
120
|
+
} else {
|
|
121
|
+
option::none<PublicKeyWithPoP>()
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Creates a normal public key from a PoP'd public key.
|
|
126
|
+
public fun public_key_with_pop_to_normal(pkpop: &PublicKeyWithPoP): PublicKey {
|
|
127
|
+
PublicKey {
|
|
128
|
+
bytes: pkpop.bytes
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// Serializes a PoP'd public key into 48 bytes.
|
|
133
|
+
public fun public_key_with_pop_to_bytes(pk: &PublicKeyWithPoP): vector<u8> {
|
|
134
|
+
pk.bytes
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// Creates a new signature from a sequence of bytes. Does not check the signature for prime-order subgroup
|
|
138
|
+
/// membership since that is done implicitly during verification.
|
|
139
|
+
public fun signature_from_bytes(bytes: vector<u8>): Signature {
|
|
140
|
+
Signature {
|
|
141
|
+
bytes
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// Serializes the signature into 96 bytes.
|
|
146
|
+
public fun signature_to_bytes(sig: &Signature): vector<u8> {
|
|
147
|
+
sig.bytes
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// Checks that the group element that defines a signature is in the prime-order subgroup.
|
|
151
|
+
/// This check is implicitly performed when verifying any signature via this module, but we expose this functionality
|
|
152
|
+
/// in case it might be useful for applications to easily dismiss invalid signatures early on.
|
|
153
|
+
public fun signature_subgroup_check(signature: &Signature): bool {
|
|
154
|
+
signature_subgroup_check_internal(signature.bytes)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/// Given a vector of public keys with verified PoPs, combines them into an *aggregated* public key which can be used
|
|
158
|
+
/// to verify multisignatures using `verify_multisignature` and aggregate signatures using `verify_aggregate_signature`.
|
|
159
|
+
/// Aborts if no public keys are given as input.
|
|
160
|
+
public fun aggregate_pubkeys(public_keys: vector<PublicKeyWithPoP>): AggrPublicKeysWithPoP {
|
|
161
|
+
let (bytes, success) = aggregate_pubkeys_internal(public_keys);
|
|
162
|
+
assert!(success, std::error::invalid_argument(EZERO_PUBKEYS));
|
|
163
|
+
|
|
164
|
+
AggrPublicKeysWithPoP {
|
|
165
|
+
bytes
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/// Serializes an aggregate public key into 48 bytes.
|
|
170
|
+
public fun aggregate_pubkey_to_bytes(apk: &AggrPublicKeysWithPoP): vector<u8> {
|
|
171
|
+
apk.bytes
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/// Aggregates the input signatures into an aggregate-or-multi-signature structure, which can be later verified via
|
|
175
|
+
/// `verify_aggregate_signature` or `verify_multisignature`. Returns `None` if zero signatures are given as input
|
|
176
|
+
/// or if some of the signatures are not valid group elements.
|
|
177
|
+
public fun aggregate_signatures(signatures: vector<Signature>): Option<AggrOrMultiSignature> {
|
|
178
|
+
let (bytes, success) = aggregate_signatures_internal(signatures);
|
|
179
|
+
if (success) {
|
|
180
|
+
option::some(
|
|
181
|
+
AggrOrMultiSignature {
|
|
182
|
+
bytes
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
} else {
|
|
186
|
+
option::none<AggrOrMultiSignature>()
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/// Serializes an aggregate-or-multi-signature into 96 bytes.
|
|
191
|
+
public fun aggr_or_multi_signature_to_bytes(sig: &AggrOrMultiSignature): vector<u8> {
|
|
192
|
+
sig.bytes
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/// Deserializes an aggregate-or-multi-signature from 96 bytes.
|
|
196
|
+
public fun aggr_or_multi_signature_from_bytes(bytes: vector<u8>): AggrOrMultiSignature {
|
|
197
|
+
assert!(std::vector::length(&bytes) == SIGNATURE_SIZE, std::error::invalid_argument(EWRONG_SIZE));
|
|
198
|
+
|
|
199
|
+
AggrOrMultiSignature {
|
|
200
|
+
bytes
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
/// Checks that the group element that defines an aggregate-or-multi-signature is in the prime-order subgroup.
|
|
206
|
+
public fun aggr_or_multi_signature_subgroup_check(signature: &AggrOrMultiSignature): bool {
|
|
207
|
+
signature_subgroup_check_internal(signature.bytes)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/// Verifies an aggregate signature, an aggregation of many signatures `s_i`, each on a different message `m_i`.
|
|
211
|
+
public fun verify_aggregate_signature(
|
|
212
|
+
aggr_sig: &AggrOrMultiSignature,
|
|
213
|
+
public_keys: vector<PublicKeyWithPoP>,
|
|
214
|
+
messages: vector<vector<u8>>,
|
|
215
|
+
): bool {
|
|
216
|
+
verify_aggregate_signature_internal(aggr_sig.bytes, public_keys, messages)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/// Verifies a multisignature: an aggregation of many signatures, each on the same message `m`.
|
|
220
|
+
public fun verify_multisignature(
|
|
221
|
+
multisig: &AggrOrMultiSignature,
|
|
222
|
+
aggr_public_key: &AggrPublicKeysWithPoP,
|
|
223
|
+
message: vector<u8>
|
|
224
|
+
): bool {
|
|
225
|
+
verify_multisignature_internal(multisig.bytes, aggr_public_key.bytes, message)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/// Verifies a normal, non-aggregated signature.
|
|
229
|
+
public fun verify_normal_signature(
|
|
230
|
+
signature: &Signature,
|
|
231
|
+
public_key: &PublicKey,
|
|
232
|
+
message: vector<u8>
|
|
233
|
+
): bool {
|
|
234
|
+
verify_normal_signature_internal(signature.bytes, public_key.bytes, message)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/// Verifies a signature share in the multisignature share or an aggregate signature share.
|
|
238
|
+
public fun verify_signature_share(
|
|
239
|
+
signature_share: &Signature,
|
|
240
|
+
public_key: &PublicKeyWithPoP,
|
|
241
|
+
message: vector<u8>
|
|
242
|
+
): bool {
|
|
243
|
+
verify_signature_share_internal(signature_share.bytes, public_key.bytes, message)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
#[test_only]
|
|
247
|
+
/// Generates a BLS key-pair: a secret key with its corresponding public key.
|
|
248
|
+
public fun generate_keys(): (SecretKey, PublicKeyWithPoP) {
|
|
249
|
+
let (sk_bytes, pk_bytes) = generate_keys_internal();
|
|
250
|
+
let sk = SecretKey {
|
|
251
|
+
bytes: sk_bytes
|
|
252
|
+
};
|
|
253
|
+
let pkpop = PublicKeyWithPoP {
|
|
254
|
+
bytes: pk_bytes
|
|
255
|
+
};
|
|
256
|
+
(sk, pkpop)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
#[test_only]
|
|
260
|
+
/// Generates a BLS signature for a message with a signing key.
|
|
261
|
+
public fun sign_arbitrary_bytes(signing_key: &SecretKey, message: vector<u8>): Signature {
|
|
262
|
+
Signature {
|
|
263
|
+
bytes: sign_internal(signing_key.bytes, message)
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
#[test_only]
|
|
268
|
+
/// Generates a multi-signature for a message with multiple signing keys.
|
|
269
|
+
public fun multi_sign_arbitrary_bytes(signing_keys: &vector<SecretKey>, message: vector<u8>): AggrOrMultiSignature {
|
|
270
|
+
let n = std::vector::length(signing_keys);
|
|
271
|
+
let sigs = vector[];
|
|
272
|
+
let i: u64 = 0;
|
|
273
|
+
while (i < n) {
|
|
274
|
+
let sig = sign_arbitrary_bytes(std::vector::borrow(signing_keys, i), message);
|
|
275
|
+
std::vector::push_back(&mut sigs, sig);
|
|
276
|
+
i = i + 1;
|
|
277
|
+
};
|
|
278
|
+
let multisig = aggregate_signatures(sigs);
|
|
279
|
+
option::extract(&mut multisig)
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
#[test_only]
|
|
283
|
+
/// Generates an aggregated signature over all messages in messages, where signing_keys[i] signs messages[i].
|
|
284
|
+
public fun aggr_sign_arbitrary_bytes(signing_keys: &vector<SecretKey>, messages: &vector<vector<u8>>): AggrOrMultiSignature {
|
|
285
|
+
let signing_key_count = std::vector::length(signing_keys);
|
|
286
|
+
let message_count = std::vector::length(messages);
|
|
287
|
+
assert!(signing_key_count == message_count, invalid_argument(E_NUM_SIGNERS_MUST_EQ_NUM_MESSAGES));
|
|
288
|
+
let sigs = vector[];
|
|
289
|
+
let i: u64 = 0;
|
|
290
|
+
while (i < signing_key_count) {
|
|
291
|
+
let sig = sign_arbitrary_bytes(std::vector::borrow(signing_keys, i), *std::vector::borrow(messages, i));
|
|
292
|
+
std::vector::push_back(&mut sigs, sig);
|
|
293
|
+
i = i + 1;
|
|
294
|
+
};
|
|
295
|
+
let aggr_sig = aggregate_signatures(sigs);
|
|
296
|
+
option::extract(&mut aggr_sig)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
#[test_only]
|
|
300
|
+
/// Returns a mauled copy of a byte array.
|
|
301
|
+
public fun maul_bytes(bytes: &vector<u8>): vector<u8> {
|
|
302
|
+
let new_bytes = *bytes;
|
|
303
|
+
let first_byte = std::vector::borrow_mut(&mut new_bytes, 0);
|
|
304
|
+
*first_byte = *first_byte ^ 0xff;
|
|
305
|
+
new_bytes
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
#[test_only]
|
|
309
|
+
/// Returns a mauled copy of a normal signature.
|
|
310
|
+
public fun maul_signature(sig: &Signature): Signature {
|
|
311
|
+
Signature {
|
|
312
|
+
bytes: maul_bytes(&signature_to_bytes(sig))
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
#[test_only]
|
|
317
|
+
/// Returns a mauled copy of an aggregated signature or a multi-signature.
|
|
318
|
+
public fun maul_aggr_or_multi_signature(sig: &AggrOrMultiSignature): AggrOrMultiSignature {
|
|
319
|
+
AggrOrMultiSignature {
|
|
320
|
+
bytes: maul_bytes(&aggr_or_multi_signature_to_bytes(sig))
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
#[test_only]
|
|
325
|
+
/// Returns a mauled copy of a normal public key.
|
|
326
|
+
public fun maul_public_key(pk: &PublicKey): PublicKey {
|
|
327
|
+
PublicKey {
|
|
328
|
+
bytes: maul_bytes(&public_key_to_bytes(pk))
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
#[test_only]
|
|
333
|
+
/// Returns a mauled copy of a PoP'd public key.
|
|
334
|
+
public fun maul_public_key_with_pop(pk: &PublicKeyWithPoP): PublicKeyWithPoP {
|
|
335
|
+
PublicKeyWithPoP {
|
|
336
|
+
bytes: maul_bytes(&public_key_with_pop_to_bytes(pk))
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
#[test_only]
|
|
341
|
+
/// Returns a mauled copy of an aggregated public key.
|
|
342
|
+
public fun maul_aggregated_public_key(pk: &AggrPublicKeysWithPoP): AggrPublicKeysWithPoP {
|
|
343
|
+
AggrPublicKeysWithPoP {
|
|
344
|
+
bytes: maul_bytes(&aggregate_pubkey_to_bytes(pk))
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
#[test_only]
|
|
349
|
+
/// Returns a mauled copy of a proof-of-possession.
|
|
350
|
+
public fun maul_proof_of_possession(pop: &ProofOfPossession): ProofOfPossession {
|
|
351
|
+
ProofOfPossession {
|
|
352
|
+
bytes: maul_bytes(&proof_of_possession_to_bytes(pop))
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
#[test_only]
|
|
358
|
+
/// Generates a proof-of-possession (PoP) for the public key associated with the secret key `sk`.
|
|
359
|
+
public fun generate_proof_of_possession(sk: &SecretKey): ProofOfPossession {
|
|
360
|
+
ProofOfPossession {
|
|
361
|
+
bytes: generate_proof_of_possession_internal(sk.bytes)
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
//
|
|
366
|
+
// Native functions
|
|
367
|
+
//
|
|
368
|
+
|
|
369
|
+
/// CRYPTOGRAPHY WARNING: This function assumes that the caller verified all public keys have a valid
|
|
370
|
+
/// proof-of-possesion (PoP) using `verify_proof_of_possession`.
|
|
371
|
+
///
|
|
372
|
+
/// Given a vector of serialized public keys, combines them into an aggregated public key, returning `(bytes, true)`,
|
|
373
|
+
/// where `bytes` store the serialized public key.
|
|
374
|
+
/// Aborts if no public keys are given as input.
|
|
375
|
+
native fun aggregate_pubkeys_internal(public_keys: vector<PublicKeyWithPoP>): (vector<u8>, bool);
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
/// CRYPTOGRAPHY WARNING: This function can be safely called without verifying that the input signatures are elements
|
|
379
|
+
/// of the prime-order subgroup of the BLS12-381 curve.
|
|
380
|
+
///
|
|
381
|
+
/// Given a vector of serialized signatures, combines them into an aggregate signature, returning `(bytes, true)`,
|
|
382
|
+
/// where `bytes` store the serialized signature.
|
|
383
|
+
/// Does not check the input signatures nor the final aggregated signatures for prime-order subgroup membership.
|
|
384
|
+
/// Returns `(_, false)` if no signatures are given as input.
|
|
385
|
+
/// Does not abort.
|
|
386
|
+
native fun aggregate_signatures_internal(signatures: vector<Signature>): (vector<u8>, bool);
|
|
387
|
+
|
|
388
|
+
/// Return `true` if the bytes in `public_key` are a valid BLS12-381 public key:
|
|
389
|
+
/// (1) it is NOT the identity point, and
|
|
390
|
+
/// (2) it is a BLS12-381 elliptic curve point, and
|
|
391
|
+
/// (3) it is a prime-order point
|
|
392
|
+
/// Return `false` otherwise.
|
|
393
|
+
/// Does not abort.
|
|
394
|
+
native fun validate_pubkey_internal(public_key: vector<u8>): bool;
|
|
395
|
+
|
|
396
|
+
/// Return `true` if the elliptic curve point serialized in `signature`:
|
|
397
|
+
/// (1) is NOT the identity point, and
|
|
398
|
+
/// (2) is a BLS12-381 elliptic curve point, and
|
|
399
|
+
/// (3) is a prime-order point
|
|
400
|
+
/// Return `false` otherwise.
|
|
401
|
+
/// Does not abort.
|
|
402
|
+
native fun signature_subgroup_check_internal(signature: vector<u8>): bool;
|
|
403
|
+
|
|
404
|
+
/// CRYPTOGRAPHY WARNING: First, this function assumes all public keys have a valid proof-of-possesion (PoP).
|
|
405
|
+
/// This prevents both small-subgroup attacks and rogue-key attacks. Second, this function can be safely called
|
|
406
|
+
/// without verifying that the aggregate signature is in the prime-order subgroup of the BLS12-381 curve.
|
|
407
|
+
///
|
|
408
|
+
/// Returns `true` if the aggregate signature `aggsig` on `messages` under `public_keys` verifies (where `messages[i]`
|
|
409
|
+
/// should be signed by `public_keys[i]`).
|
|
410
|
+
///
|
|
411
|
+
/// Returns `false` if either:
|
|
412
|
+
/// - no public keys or messages are given as input,
|
|
413
|
+
/// - number of messages does not equal number of public keys
|
|
414
|
+
/// - `aggsig` (1) is the identity point, or (2) is NOT a BLS12-381 elliptic curve point, or (3) is NOT a
|
|
415
|
+
/// prime-order point
|
|
416
|
+
/// Does not abort.
|
|
417
|
+
native fun verify_aggregate_signature_internal(
|
|
418
|
+
aggsig: vector<u8>,
|
|
419
|
+
public_keys: vector<PublicKeyWithPoP>,
|
|
420
|
+
messages: vector<vector<u8>>,
|
|
421
|
+
): bool;
|
|
422
|
+
|
|
423
|
+
/// CRYPTOGRAPHY WARNING: This function assumes verified proofs-of-possesion (PoP) for the public keys used in
|
|
424
|
+
/// computing the aggregate public key. This prevents small-subgroup attacks and rogue-key attacks.
|
|
425
|
+
///
|
|
426
|
+
/// Return `true` if the BLS `multisignature` on `message` verifies against the BLS aggregate public key `agg_public_key`.
|
|
427
|
+
/// Returns `false` otherwise.
|
|
428
|
+
/// Does not abort.
|
|
429
|
+
native fun verify_multisignature_internal(
|
|
430
|
+
multisignature: vector<u8>,
|
|
431
|
+
agg_public_key: vector<u8>,
|
|
432
|
+
message: vector<u8>
|
|
433
|
+
): bool;
|
|
434
|
+
|
|
435
|
+
/// CRYPTOGRAPHY WARNING: This function WILL check that the public key is a prime-order point, in order to prevent
|
|
436
|
+
/// library users from misusing the library by forgetting to validate public keys before giving them as arguments to
|
|
437
|
+
/// this function.
|
|
438
|
+
///
|
|
439
|
+
/// Returns `true` if the `signature` on `message` verifies under `public key`.
|
|
440
|
+
/// Returns `false` otherwise.
|
|
441
|
+
/// Does not abort.
|
|
442
|
+
native fun verify_normal_signature_internal(
|
|
443
|
+
signature: vector<u8>,
|
|
444
|
+
public_key: vector<u8>,
|
|
445
|
+
message: vector<u8>
|
|
446
|
+
): bool;
|
|
447
|
+
|
|
448
|
+
/// Return `true` if the bytes in `public_key` are a valid bls12381 public key (as per `validate_pubkey`)
|
|
449
|
+
/// *and* this public key has a valid proof-of-possesion (PoP).
|
|
450
|
+
/// Return `false` otherwise.
|
|
451
|
+
/// Does not abort.
|
|
452
|
+
native fun verify_proof_of_possession_internal(
|
|
453
|
+
public_key: vector<u8>,
|
|
454
|
+
proof_of_possesion: vector<u8>
|
|
455
|
+
): bool;
|
|
456
|
+
|
|
457
|
+
/// CRYPTOGRAPHY WARNING: Assumes the public key has a valid proof-of-possesion (PoP). This prevents rogue-key
|
|
458
|
+
/// attacks later on during signature aggregation.
|
|
459
|
+
///
|
|
460
|
+
/// Returns `true` if the `signature_share` on `message` verifies under `public key`.
|
|
461
|
+
/// Returns `false` otherwise, similar to `verify_multisignature`.
|
|
462
|
+
/// Does not abort.
|
|
463
|
+
native fun verify_signature_share_internal(
|
|
464
|
+
signature_share: vector<u8>,
|
|
465
|
+
public_key: vector<u8>,
|
|
466
|
+
message: vector<u8>
|
|
467
|
+
): bool;
|
|
468
|
+
|
|
469
|
+
#[test_only]
|
|
470
|
+
native fun generate_keys_internal(): (vector<u8>, vector<u8>);
|
|
471
|
+
|
|
472
|
+
#[test_only]
|
|
473
|
+
native fun sign_internal(sk: vector<u8>, msg: vector<u8>): vector<u8>;
|
|
474
|
+
|
|
475
|
+
#[test_only]
|
|
476
|
+
native fun generate_proof_of_possession_internal(sk: vector<u8>): vector<u8>;
|
|
477
|
+
|
|
478
|
+
//
|
|
479
|
+
// Constants and helpers for tests
|
|
480
|
+
//
|
|
481
|
+
|
|
482
|
+
/// Random signature generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in `crates/aptos-crypto`.
|
|
483
|
+
/// The message signed is "Hello Aptos!" and the associated SK is 07416693b6b32c84abe45578728e2379f525729e5b94762435a31e65ecc728da.
|
|
484
|
+
const RANDOM_SIGNATURE: vector<u8> = x"a01a65854f987d3434149b7f08f70730e30b241984e8712bc2aca885d632aafced4c3f661209debb6b1c8601326623cc16ca2f6c9edc53b7b88b7435fb6b05ddece418d2c34dc6aca2f5a11a79e67774582c14084a01dcb7820e4cb4bad0ea8d";
|
|
485
|
+
|
|
486
|
+
/// Random signature generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in `crates/aptos-crypto`.
|
|
487
|
+
/// The associated SK is 07416693b6b32c84abe45578728e2379f525729e5b94762435a31e65ecc728da.
|
|
488
|
+
const RANDOM_PK: vector<u8> = x"8a53e7ae5270e3e765cd8a4032c2e77c6f7e87a44ebb85bf28a4d7865565698f975346714262f9e47c6f3e0d5d951660";
|
|
489
|
+
|
|
490
|
+
//
|
|
491
|
+
// Tests
|
|
492
|
+
//
|
|
493
|
+
|
|
494
|
+
#[test_only]
|
|
495
|
+
fun get_random_aggsig(): AggrOrMultiSignature {
|
|
496
|
+
assert!(signature_subgroup_check_internal(RANDOM_SIGNATURE), 1);
|
|
497
|
+
|
|
498
|
+
AggrOrMultiSignature { bytes: RANDOM_SIGNATURE }
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
#[test_only]
|
|
502
|
+
fun get_random_pk_with_pop(): PublicKeyWithPoP {
|
|
503
|
+
assert!(validate_pubkey_internal(RANDOM_PK), 1);
|
|
504
|
+
|
|
505
|
+
PublicKeyWithPoP {
|
|
506
|
+
bytes: RANDOM_PK
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
#[test]
|
|
511
|
+
fun test_pubkey_validation() {
|
|
512
|
+
// test low order points (in group for PK)
|
|
513
|
+
assert!(option::is_none(&public_key_from_bytes(x"ae3cd9403b69c20a0d455fd860e977fe6ee7140a7f091f26c860f2caccd3e0a7a7365798ac10df776675b3a67db8faa0")), 1);
|
|
514
|
+
assert!(option::is_none(&public_key_from_bytes(x"928d4862a40439a67fd76a9c7560e2ff159e770dcf688ff7b2dd165792541c88ee76c82eb77dd6e9e72c89cbf1a56a68")), 1);
|
|
515
|
+
assert!(option::is_some(&public_key_from_bytes(x"b3e4921277221e01ed71284be5e3045292b26c7f465a6fcdba53ee47edd39ec5160da3b229a73c75671024dcb36de091")), 1);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
#[test]
|
|
519
|
+
#[expected_failure(abort_code = 65537, location = Self)]
|
|
520
|
+
fun test_empty_pubkey_aggregation() {
|
|
521
|
+
// First, make sure if no inputs are given, the function returns None
|
|
522
|
+
// assert!(aggregate_pop_verified_pubkeys(vector::empty()) == option::none(), 1);
|
|
523
|
+
aggregate_pubkeys(std::vector::empty());
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
#[test]
|
|
527
|
+
fun test_pubkey_aggregation() {
|
|
528
|
+
// Second, try some test-cases generated by running the following command in `crates/aptos-crypto`:
|
|
529
|
+
// $ cargo test -- sample_aggregate_pk_and_multisig --nocapture --include-ignored
|
|
530
|
+
let pks = vector[
|
|
531
|
+
PublicKeyWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" },
|
|
532
|
+
PublicKeyWithPoP { bytes: x"ab9df801c6f96ade1c0490c938c87d5bcc2e52ccb8768e1b5d14197c5e8bfa562783b96711b702dda411a1a9f08ebbfa" },
|
|
533
|
+
PublicKeyWithPoP { bytes: x"b698c932cf7097d99c17bd6e9c9dc4eeba84278c621700a8f80ec726b1daa11e3ab55fc045b4dbadefbeef05c4182494" },
|
|
534
|
+
PublicKeyWithPoP { bytes: x"934706a8b876d47a996d427e1526ce52c952d5ec0858d49cd262efb785b62b1972d06270b0a7adda1addc98433ad1843" },
|
|
535
|
+
PublicKeyWithPoP { bytes: x"a4cd352daad3a0651c1998dfbaa7a748e08d248a54347544bfedd51a197e016bb6008e9b8e45a744e1a030cc3b27d2da" },
|
|
536
|
+
];
|
|
537
|
+
|
|
538
|
+
// agg_pks[i] = \sum_{j <= i} pk[j]
|
|
539
|
+
let agg_pks = vector[
|
|
540
|
+
AggrPublicKeysWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" },
|
|
541
|
+
AggrPublicKeysWithPoP { bytes: x"b79ad47abb441d7eda9b220a626df2e4e4910738c5f777947f0213398ecafae044ec0c20d552d1348347e9abfcf3eca1" },
|
|
542
|
+
AggrPublicKeysWithPoP { bytes: x"b5f5eb6153ab5388a1a76343d714e4a2dcf224c5d0722d1e8e90c6bcead05c573fffe986460bd4000645a655bf52bc60" },
|
|
543
|
+
AggrPublicKeysWithPoP { bytes: x"b922006ec14c183572a8864c31dc6632dccffa9f9c86411796f8b1b5a93a2457762c8e2f5ef0a2303506c4bca9a4e0bf" },
|
|
544
|
+
AggrPublicKeysWithPoP { bytes: x"b53df1cfee2168f59e5792e710bf22928dc0553e6531dae5c7656c0a66fc12cb82fbb04863938c953dc901a5a79cc0f3" },
|
|
545
|
+
];
|
|
546
|
+
|
|
547
|
+
let i = 0;
|
|
548
|
+
let accum_pk = std::vector::empty<PublicKeyWithPoP>();
|
|
549
|
+
while (i < std::vector::length(&pks)) {
|
|
550
|
+
std::vector::push_back(&mut accum_pk, *std::vector::borrow(&pks, i));
|
|
551
|
+
|
|
552
|
+
let apk = aggregate_pubkeys(accum_pk);
|
|
553
|
+
|
|
554
|
+
// Make sure PKs were aggregated correctly
|
|
555
|
+
assert!(apk == *std::vector::borrow(&agg_pks, i), 1);
|
|
556
|
+
assert!(validate_pubkey_internal(apk.bytes), 1);
|
|
557
|
+
|
|
558
|
+
i = i + 1;
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
#[test]
|
|
563
|
+
fun test_pubkey_validation_against_invalid_keys() {
|
|
564
|
+
let (_sk, pk) = generate_keys();
|
|
565
|
+
let pk_bytes = public_key_with_pop_to_bytes(&pk);
|
|
566
|
+
assert!(option::is_some(&public_key_from_bytes(pk_bytes)), 1);
|
|
567
|
+
assert!(option::is_none(&public_key_from_bytes(maul_bytes(&pk_bytes))), 1);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
#[test]
|
|
571
|
+
fun test_signature_aggregation() {
|
|
572
|
+
// First, test empty aggregation
|
|
573
|
+
assert!(option::is_none(&mut aggregate_signatures(vector[])), 1);
|
|
574
|
+
|
|
575
|
+
// Second, try some test-cases generated by running the following command in `crates/aptos-crypto`:
|
|
576
|
+
// $ cargo test -- sample_aggregate_sigs --nocapture --include-ignored
|
|
577
|
+
|
|
578
|
+
// Signatures of each signer i
|
|
579
|
+
let sigs = vector[
|
|
580
|
+
signature_from_bytes(x"a55ac2d64b4c1d141b15d876d3e54ad1eea07ee488e8287cce7cdf3eec551458ab5795ab196f8c112590346f7bc7c97e0053cd5be0f9bd74b93a87cd44458e98d125d6d5c6950ea5e62666beb34422ead79121f8cb0815dae41a986688d03eaf"),
|
|
581
|
+
signature_from_bytes(x"90a639a44491191c46379a843266c293de3a46197714ead2ad3886233dd5c2b608b6437fa32fbf9d218b20f1cbfa7970182663beb9c148e2e9412b148e16abf283ffa51b8a536c0e55d61b2e5c849edc49f636c0ef07cb99f125cbcf602e22bb"),
|
|
582
|
+
signature_from_bytes(x"9527d81aa15863ef3a3bf96bea6d58157d5063a93a6d0eb9d8b4f4bbda3b31142ec4586cb519da2cd7600941283d1bad061b5439703fd584295b44037a969876962ae1897dcc7cadf909d06faae213c4fef8e015dfb33ec109af02ab0c3f6833"),
|
|
583
|
+
signature_from_bytes(x"a54d264f5cab9654b1744232c4650c42b29adf2b19bd00bbdaf4a4d792ee4dfd40a1fe1b067f298bcfd8ae4fdc8250660a2848bd4a80d96585afccec5c6cfa617033dd7913c9acfdf98a72467e8a5155d4cad589a72d6665be7cb410aebc0068"),
|
|
584
|
+
signature_from_bytes(x"8d22876bdf73e6ad36ed98546018f6258cd47e45904b87c071e774a6ef4b07cac323258cb920b2fe2b07cca1f2b24bcb0a3194ec76f32edb92391ed2c39e1ada8919f8ea755c5e39873d33ff3a8f4fba21b1261c1ddb9d1688c2b40b77e355d1"),
|
|
585
|
+
];
|
|
586
|
+
|
|
587
|
+
// multisigs[i] is a signature on "Hello, Aptoverse!" from signers 1 through i (inclusive)
|
|
588
|
+
let multisigs = vector[
|
|
589
|
+
AggrOrMultiSignature { bytes: x"a55ac2d64b4c1d141b15d876d3e54ad1eea07ee488e8287cce7cdf3eec551458ab5795ab196f8c112590346f7bc7c97e0053cd5be0f9bd74b93a87cd44458e98d125d6d5c6950ea5e62666beb34422ead79121f8cb0815dae41a986688d03eaf" },
|
|
590
|
+
AggrOrMultiSignature { bytes: x"8f1949a06b95c3cb62898d861f889350c0d2cb740da513bfa195aa0ab8fa006ea2efe004a7bbbd9bb363637a279aed20132efd0846f520e7ee0e8ed847a1c6969bb986ad2239bcc9af561b6c2aa6d3016e1c722146471f1e28313de189fe7ebc" },
|
|
591
|
+
AggrOrMultiSignature { bytes: x"ab5ad42bb8f350f8a6b4ae897946a05dbe8f2b22db4f6c37eff6ff737aebd6c5d75bd1abdfc99345ac8ec38b9a449700026f98647752e1c99f69bb132340f063b8a989728e0a3d82a753740bf63e5d8f51e413ebd9a36f6acbe1407a00c4b3e7" },
|
|
592
|
+
AggrOrMultiSignature { bytes: x"ae307a0d055d3ba55ad6ec7094adef27ed821bdcf735fb509ab2c20b80952732394bc67ea1fd8c26ea963540df7448f8102509f7b8c694e4d75f30a43c455f251b6b3fd8b580b9228ffeeb9039834927aacefccd3069bef4b847180d036971cf" },
|
|
593
|
+
AggrOrMultiSignature { bytes: x"8284e4e3983f29cb45020c3e2d89066df2eae533a01cb6ca2c4d466b5e02dd22467f59640aa120db2b9cc49e931415c3097e3d54ff977fd9067b5bc6cfa1c885d9d8821aef20c028999a1d97e783ae049d8fa3d0bbac36ce4ca8e10e551d3461" },
|
|
594
|
+
];
|
|
595
|
+
|
|
596
|
+
let i = 0;
|
|
597
|
+
let accum_sigs = std::vector::empty<Signature>();
|
|
598
|
+
while (i < std::vector::length(&sigs)) {
|
|
599
|
+
std::vector::push_back(&mut accum_sigs, *std::vector::borrow(&sigs, i));
|
|
600
|
+
|
|
601
|
+
let multisig = option::extract(&mut aggregate_signatures(accum_sigs));
|
|
602
|
+
|
|
603
|
+
// Make sure sigs were aggregated correctly
|
|
604
|
+
assert!(multisig == *std::vector::borrow(&multisigs, i), 1);
|
|
605
|
+
assert!(signature_subgroup_check_internal(multisig.bytes), 1);
|
|
606
|
+
|
|
607
|
+
i = i + 1;
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
#[test]
|
|
612
|
+
fun test_empty_signature_aggregation() {
|
|
613
|
+
assert!(option::is_none(&mut aggregate_signatures(vector[])), 1);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
#[test]
|
|
617
|
+
fun test_verify_multisig() {
|
|
618
|
+
// Second, try some test-cases generated by running the following command in `crates/aptos-crypto`:
|
|
619
|
+
// $ cargo test -- sample_aggregate_pk_and_multisig --nocapture --include-ignored
|
|
620
|
+
let pks = vector[
|
|
621
|
+
PublicKeyWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" },
|
|
622
|
+
PublicKeyWithPoP { bytes: x"ab9df801c6f96ade1c0490c938c87d5bcc2e52ccb8768e1b5d14197c5e8bfa562783b96711b702dda411a1a9f08ebbfa" },
|
|
623
|
+
PublicKeyWithPoP { bytes: x"b698c932cf7097d99c17bd6e9c9dc4eeba84278c621700a8f80ec726b1daa11e3ab55fc045b4dbadefbeef05c4182494" },
|
|
624
|
+
PublicKeyWithPoP { bytes: x"934706a8b876d47a996d427e1526ce52c952d5ec0858d49cd262efb785b62b1972d06270b0a7adda1addc98433ad1843" },
|
|
625
|
+
PublicKeyWithPoP { bytes: x"a4cd352daad3a0651c1998dfbaa7a748e08d248a54347544bfedd51a197e016bb6008e9b8e45a744e1a030cc3b27d2da" },
|
|
626
|
+
];
|
|
627
|
+
|
|
628
|
+
// agg_pks[i] = \sum_{j <= i} pk[j]
|
|
629
|
+
let agg_pks = vector[
|
|
630
|
+
AggrPublicKeysWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" },
|
|
631
|
+
AggrPublicKeysWithPoP { bytes: x"b79ad47abb441d7eda9b220a626df2e4e4910738c5f777947f0213398ecafae044ec0c20d552d1348347e9abfcf3eca1" },
|
|
632
|
+
AggrPublicKeysWithPoP { bytes: x"b5f5eb6153ab5388a1a76343d714e4a2dcf224c5d0722d1e8e90c6bcead05c573fffe986460bd4000645a655bf52bc60" },
|
|
633
|
+
AggrPublicKeysWithPoP { bytes: x"b922006ec14c183572a8864c31dc6632dccffa9f9c86411796f8b1b5a93a2457762c8e2f5ef0a2303506c4bca9a4e0bf" },
|
|
634
|
+
AggrPublicKeysWithPoP { bytes: x"b53df1cfee2168f59e5792e710bf22928dc0553e6531dae5c7656c0a66fc12cb82fbb04863938c953dc901a5a79cc0f3" },
|
|
635
|
+
];
|
|
636
|
+
|
|
637
|
+
// multisigs[i] is a signature on "Hello, Aptoverse!" under agg_pks[i]
|
|
638
|
+
let multisigs = vector[
|
|
639
|
+
AggrOrMultiSignature { bytes: x"ade45c67bff09ae57e0575feb0be870f2d351ce078e8033d847615099366da1299c69497027b77badb226ff1708543cd062597030c3f1553e0aef6c17e7af5dd0de63c1e4f1f9da68c966ea6c1dcade2cdc646bd5e8bcd4773931021ec5be3fd" },
|
|
640
|
+
AggrOrMultiSignature { bytes: x"964af3d83436f6a9a382f34590c0c14e4454dc1de536af205319ce1ed417b87a2374863d5df7b7d5ed900cf91dffa7a105d3f308831d698c0d74fb2259d4813434fb86425db0ded664ae8f85d02ec1d31734910317d4155cbf69017735900d4d" },
|
|
641
|
+
AggrOrMultiSignature { bytes: x"b523a31813e771e55aa0fc99a48db716ecc1085f9899ccadb64e759ecb481a2fb1cdcc0b266f036695f941361de773081729311f6a1bca9d47393f5359c8c87dc34a91f5dae335590aacbff974076ad1f910dd81750553a72ccbcad3c8cc0f07" },
|
|
642
|
+
AggrOrMultiSignature { bytes: x"a945f61699df58617d37530a85e67bd1181349678b89293951ed29d1fb7588b5c12ebb7917dfc9d674f3f4fde4d062740b85a5f4927f5a4f0091e46e1ac6e41bbd650a74dd49e91445339d741e3b10bdeb9bc8bba46833e0011ff91fa5c77bd2" },
|
|
643
|
+
AggrOrMultiSignature { bytes: x"b627b2cfd8ae59dcf5e58cc6c230ae369985fd096e1bc3be38da5deafcbed7d939f07cccc75383539940c56c6b6453db193f563f5b6e4fe54915afd9e1baea40a297fa7eda74abbdcd4cc5c667d6db3b9bd265782f7693798894400f2beb4637" },
|
|
644
|
+
];
|
|
645
|
+
|
|
646
|
+
let i = 0;
|
|
647
|
+
let accum_pk = std::vector::empty<PublicKeyWithPoP>();
|
|
648
|
+
while (i < std::vector::length(&pks)) {
|
|
649
|
+
std::vector::push_back(&mut accum_pk, *std::vector::borrow(&pks, i));
|
|
650
|
+
|
|
651
|
+
let apk = aggregate_pubkeys(accum_pk);
|
|
652
|
+
|
|
653
|
+
assert!(apk == *std::vector::borrow(&agg_pks, i), 1);
|
|
654
|
+
|
|
655
|
+
assert!(verify_multisignature(std::vector::borrow(&multisigs, i), &apk, b"Hello, Aptoverse!"), 1);
|
|
656
|
+
|
|
657
|
+
i = i + 1;
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
#[test]
|
|
662
|
+
fun test_verify_multisignature_randomized() {
|
|
663
|
+
let signer_count = 1;
|
|
664
|
+
let max_signer_count = 5;
|
|
665
|
+
let msg = b"hello world";
|
|
666
|
+
while (signer_count <= max_signer_count) {
|
|
667
|
+
// Generate key pairs.
|
|
668
|
+
let signing_keys = vector[];
|
|
669
|
+
let public_keys = vector[];
|
|
670
|
+
let i = 0;
|
|
671
|
+
while (i < signer_count) {
|
|
672
|
+
let (sk, pk) = generate_keys();
|
|
673
|
+
std::vector::push_back(&mut signing_keys, sk);
|
|
674
|
+
std::vector::push_back(&mut public_keys, pk);
|
|
675
|
+
i = i + 1;
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
// Generate multi-signature.
|
|
679
|
+
let aggr_pk = aggregate_pubkeys(public_keys);
|
|
680
|
+
let multisig = multi_sign_arbitrary_bytes(&signing_keys, msg);
|
|
681
|
+
|
|
682
|
+
// Test signature verification.
|
|
683
|
+
assert!(verify_multisignature(&multisig, &aggr_pk, msg), 1);
|
|
684
|
+
assert!(!verify_multisignature(&maul_aggr_or_multi_signature(&multisig), &aggr_pk, msg), 1);
|
|
685
|
+
assert!(!verify_multisignature(&multisig, &maul_aggregated_public_key(&aggr_pk), msg), 1);
|
|
686
|
+
assert!(!verify_multisignature(&multisig, &aggr_pk, maul_bytes(&msg)), 1);
|
|
687
|
+
|
|
688
|
+
// Also test signature aggregation.
|
|
689
|
+
let signatures = vector[];
|
|
690
|
+
let i = 0;
|
|
691
|
+
while (i < signer_count) {
|
|
692
|
+
let sk = std::vector::borrow(&signing_keys, i);
|
|
693
|
+
let sig = sign_arbitrary_bytes(sk, msg);
|
|
694
|
+
std::vector::push_back(&mut signatures, sig);
|
|
695
|
+
i = i + 1;
|
|
696
|
+
};
|
|
697
|
+
let aggregated_signature = option::extract(&mut aggregate_signatures(signatures));
|
|
698
|
+
assert!(aggr_or_multi_signature_subgroup_check(&aggregated_signature), 1);
|
|
699
|
+
assert!(aggr_or_multi_signature_to_bytes(&aggregated_signature) == aggr_or_multi_signature_to_bytes(&multisig), 1);
|
|
700
|
+
|
|
701
|
+
signer_count = signer_count + 1;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
#[test]
|
|
706
|
+
fun test_verify_aggsig() {
|
|
707
|
+
assert!(aggr_or_multi_signature_to_bytes(&aggr_or_multi_signature_from_bytes(RANDOM_SIGNATURE)) == RANDOM_SIGNATURE, 1);
|
|
708
|
+
|
|
709
|
+
// First, make sure verification returns None when no inputs are given or |pks| != |msgs|
|
|
710
|
+
assert!(verify_aggregate_signature(&get_random_aggsig(), vector[], vector[]) == false, 1);
|
|
711
|
+
|
|
712
|
+
assert!(verify_aggregate_signature(
|
|
713
|
+
&get_random_aggsig(),
|
|
714
|
+
vector[ get_random_pk_with_pop() ],
|
|
715
|
+
vector[]) == false, 1);
|
|
716
|
+
|
|
717
|
+
assert!(verify_aggregate_signature(
|
|
718
|
+
&get_random_aggsig(),
|
|
719
|
+
vector[],
|
|
720
|
+
vector[ x"ab" ]) == false, 1);
|
|
721
|
+
|
|
722
|
+
assert!(verify_aggregate_signature(
|
|
723
|
+
&get_random_aggsig(),
|
|
724
|
+
vector[ get_random_pk_with_pop() ],
|
|
725
|
+
vector[
|
|
726
|
+
x"cd", x"ef"
|
|
727
|
+
]) == false, 1);
|
|
728
|
+
|
|
729
|
+
assert!(verify_aggregate_signature(
|
|
730
|
+
&get_random_aggsig(),
|
|
731
|
+
vector[
|
|
732
|
+
get_random_pk_with_pop(),
|
|
733
|
+
get_random_pk_with_pop(),
|
|
734
|
+
get_random_pk_with_pop(),
|
|
735
|
+
],
|
|
736
|
+
vector[
|
|
737
|
+
x"cd", x"ef"
|
|
738
|
+
]) == false, 1);
|
|
739
|
+
|
|
740
|
+
// Second, try some test-cases generated by running the following command in `crates/aptos-crypto`:
|
|
741
|
+
// $ cargo test -- bls12381_sample_aggregate_pk_and_aggsig --nocapture --ignored
|
|
742
|
+
|
|
743
|
+
// The signed messages are "Hello, Aptos <i>!", where <i> \in {1, ..., 5}
|
|
744
|
+
let msgs = vector[
|
|
745
|
+
x"48656c6c6f2c204170746f73203121",
|
|
746
|
+
x"48656c6c6f2c204170746f73203221",
|
|
747
|
+
x"48656c6c6f2c204170746f73203321",
|
|
748
|
+
x"48656c6c6f2c204170746f73203421",
|
|
749
|
+
x"48656c6c6f2c204170746f73203521",
|
|
750
|
+
];
|
|
751
|
+
|
|
752
|
+
// Public key of signer i
|
|
753
|
+
let pks = vector[
|
|
754
|
+
PublicKeyWithPoP { bytes: x"b93d6aabb2b83e52f4b8bda43c24ea920bbced87a03ffc80f8f70c814a8b3f5d69fbb4e579ca76ee008d61365747dbc6" },
|
|
755
|
+
PublicKeyWithPoP { bytes: x"b45648ceae3a983bcb816a96db599b5aef3b688c5753fa20ce36ac7a4f2c9ed792ab20af6604e85e42dab746398bb82c" },
|
|
756
|
+
PublicKeyWithPoP { bytes: x"b3e4921277221e01ed71284be5e3045292b26c7f465a6fcdba53ee47edd39ec5160da3b229a73c75671024dcb36de091" },
|
|
757
|
+
PublicKeyWithPoP { bytes: x"8463b8671c9775a7dbd98bf76d3deba90b5a90535fc87dc8c13506bb5c7bbd99be4d257e60c548140e1e30b107ff5822" },
|
|
758
|
+
PublicKeyWithPoP { bytes: x"a79e3d0e9d04587a3b27d05efe5717da05fd93485dc47978c866dc70a01695c2efd247d1dd843a011a4b6b24079d7384" },
|
|
759
|
+
];
|
|
760
|
+
|
|
761
|
+
// aggsigs[i] = \sum_{j <= i} sigs[j], where sigs[j] is a signature on msgs[j] under pks[j]
|
|
762
|
+
let aggsigs = vector[
|
|
763
|
+
AggrOrMultiSignature { bytes: x"a2bc8bdebe6215ba74b5b53c5ed2aa0c68221a4adf868989ccdcfb62bb0eecc6537def9ee686a7960169c5917d25e5220177ed1c5e95ecfd68c09694062e76efcb00759beac874e4f9a715fd144210883bf9bb272f156b0a1fa15d0e9460f01f" },
|
|
764
|
+
AggrOrMultiSignature { bytes: x"a523aa3c3f1f1074d968ffecf017c7b93ae5243006bf0abd2e45c036ddbec99302984b650ebe5ba306cda4071d281ba50a99ef0e66c3957fab94163296f9d673fc58a36de4276f82bfb1d9180b591df93b5c2804d40dd68cf0f72cd92f86442e" },
|
|
765
|
+
AggrOrMultiSignature { bytes: x"abed10f464de74769121fc09715e59a3ac96a5054a43a9d43cc890a2d4d332614c74c7fb4cceef6d25f85c65dee337330f062f89f23fec9ecf7ce3193fbba2c886630d753be6a4513a4634428904b767af2f230c5cadbcb53a451dd9c7d977f6" },
|
|
766
|
+
AggrOrMultiSignature { bytes: x"8362871631ba822742a31209fa4abce6dc94b741ac4725995459da2951324b51efbbf6bc3ab4681e547ebfbadd80e0360dc078c04188198f0acea26c12645ace9107a4a23cf8db46abc7a402637f16a0477c72569fc9966fe804ef4dc0e5e758" },
|
|
767
|
+
AggrOrMultiSignature { bytes: x"a44d967935fbe63a763ce2dd2b16981f967ecd31e20d3266eef5517530cdc233c8a18273b6d9fd7f61dd39178826e3f115df4e7b304f2de17373a95ea0c9a14293dcfd6f0ef416e06fa23f6a3c850d638e4d8f97ab4562ef55d49a96a50baa13" },
|
|
768
|
+
];
|
|
769
|
+
|
|
770
|
+
let i = 0;
|
|
771
|
+
let msg_subset = std::vector::empty<vector<u8>>();
|
|
772
|
+
let pk_subset = std::vector::empty<PublicKeyWithPoP>();
|
|
773
|
+
while (i < std::vector::length(&pks)) {
|
|
774
|
+
let aggsig = *std::vector::borrow(&aggsigs, i);
|
|
775
|
+
|
|
776
|
+
std::vector::push_back(&mut pk_subset, *std::vector::borrow(&pks, i));
|
|
777
|
+
std::vector::push_back(&mut msg_subset, *std::vector::borrow(&msgs, i));
|
|
778
|
+
|
|
779
|
+
assert!(verify_aggregate_signature(&aggsig, pk_subset, msg_subset), 1);
|
|
780
|
+
|
|
781
|
+
i = i + 1;
|
|
782
|
+
};
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
#[test]
|
|
786
|
+
fun test_verify_aggregated_signature_randomized() {
|
|
787
|
+
let signer_count = 1;
|
|
788
|
+
let max_signer_count = 5;
|
|
789
|
+
while (signer_count <= max_signer_count) {
|
|
790
|
+
// Generate key pairs and messages.
|
|
791
|
+
let signing_keys = vector[];
|
|
792
|
+
let public_keys = vector[];
|
|
793
|
+
let messages: vector<vector<u8>> = vector[];
|
|
794
|
+
let i = 0;
|
|
795
|
+
while (i < signer_count) {
|
|
796
|
+
let (sk, pk) = generate_keys();
|
|
797
|
+
std::vector::push_back(&mut signing_keys, sk);
|
|
798
|
+
std::vector::push_back(&mut public_keys, pk);
|
|
799
|
+
let msg: vector<u8> = vector[104, 101, 108, 108, 111, 32, 97, 112, 116, 111, 115, 32, 117, 115, 101, 114, 32, 48+(i as u8)]; //"hello aptos user {i}"
|
|
800
|
+
std::vector::push_back(&mut messages, msg);
|
|
801
|
+
i = i + 1;
|
|
802
|
+
};
|
|
803
|
+
|
|
804
|
+
// Maul messages and public keys.
|
|
805
|
+
let mauled_public_keys = vector[maul_public_key_with_pop(std::vector::borrow(&public_keys, 0))];
|
|
806
|
+
let mauled_messages = vector[maul_bytes(std::vector::borrow(&messages, 0))];
|
|
807
|
+
let i = 1;
|
|
808
|
+
while (i < signer_count) {
|
|
809
|
+
let pk = std::vector::borrow(&public_keys, i);
|
|
810
|
+
let msg = std::vector::borrow(&messages, i);
|
|
811
|
+
std::vector::push_back(&mut mauled_public_keys, *pk);
|
|
812
|
+
std::vector::push_back(&mut mauled_messages, *msg);
|
|
813
|
+
i = i + 1;
|
|
814
|
+
};
|
|
815
|
+
|
|
816
|
+
// Generate aggregated signature.
|
|
817
|
+
let aggrsig = aggr_sign_arbitrary_bytes(&signing_keys, &messages);
|
|
818
|
+
|
|
819
|
+
// Test signature verification.
|
|
820
|
+
assert!(verify_aggregate_signature(&aggrsig, public_keys, messages), 1);
|
|
821
|
+
assert!(!verify_aggregate_signature(&maul_aggr_or_multi_signature(&aggrsig), public_keys, messages), 1);
|
|
822
|
+
assert!(!verify_aggregate_signature(&aggrsig, mauled_public_keys, messages), 1);
|
|
823
|
+
assert!(!verify_aggregate_signature(&aggrsig, public_keys, mauled_messages), 1);
|
|
824
|
+
|
|
825
|
+
// Also test signature aggregation.
|
|
826
|
+
let signatures = vector[];
|
|
827
|
+
let i = 0;
|
|
828
|
+
while (i < signer_count) {
|
|
829
|
+
let sk = std::vector::borrow(&signing_keys, i);
|
|
830
|
+
let msg = std::vector::borrow(&messages, i);
|
|
831
|
+
let sig = sign_arbitrary_bytes(sk, *msg);
|
|
832
|
+
std::vector::push_back(&mut signatures, sig);
|
|
833
|
+
i = i + 1;
|
|
834
|
+
};
|
|
835
|
+
let aggrsig_another = option::extract(&mut aggregate_signatures(signatures));
|
|
836
|
+
assert!(aggr_or_multi_signature_to_bytes(&aggrsig_another) == aggr_or_multi_signature_to_bytes(&aggrsig), 1);
|
|
837
|
+
|
|
838
|
+
signer_count = signer_count + 1;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
#[test]
|
|
843
|
+
/// Tests verification of a random BLS signature created using sk = x""
|
|
844
|
+
fun test_verify_normal_and_verify_sigshare() {
|
|
845
|
+
// Test case generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in
|
|
846
|
+
// `crates/aptos-crypto`
|
|
847
|
+
// =============================================================================================================
|
|
848
|
+
// SK: 077c8a56f26259215a4a245373ab6ddf328ac6e00e5ea38d8700efa361bdc58d
|
|
849
|
+
|
|
850
|
+
let message = b"Hello Aptos!";
|
|
851
|
+
|
|
852
|
+
// First, test signatures that verify
|
|
853
|
+
let ok = verify_normal_signature(
|
|
854
|
+
&signature_from_bytes(x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7"),
|
|
855
|
+
&option::extract(&mut public_key_from_bytes(x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858")),
|
|
856
|
+
message,
|
|
857
|
+
);
|
|
858
|
+
assert!(ok == true, 1);
|
|
859
|
+
|
|
860
|
+
let pk = option::extract(&mut public_key_from_bytes(x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858"));
|
|
861
|
+
let pk_with_pop = PublicKeyWithPoP { bytes: pk.bytes };
|
|
862
|
+
|
|
863
|
+
let ok = verify_signature_share(
|
|
864
|
+
&signature_from_bytes(x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7"),
|
|
865
|
+
&pk_with_pop,
|
|
866
|
+
message,
|
|
867
|
+
);
|
|
868
|
+
assert!(ok == true, 1);
|
|
869
|
+
|
|
870
|
+
// Second, test signatures that do NOT verify
|
|
871
|
+
let sigs = vector[
|
|
872
|
+
Signature { bytes: x"a01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" },
|
|
873
|
+
Signature { bytes: x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" },
|
|
874
|
+
Signature { bytes: x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" },
|
|
875
|
+
];
|
|
876
|
+
let pks = vector[
|
|
877
|
+
x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858",
|
|
878
|
+
x"ae4851bb9e7782027437ed0e2c026dd63b77a972ddf4bd9f72bcc218e327986568317e3aa9f679c697a2cb7cebf992f3",
|
|
879
|
+
x"82ed7bb5528303a2e306775040a7309e0bd597b70d9949d8c6198a01a7be0b00079320ebfeaf7bbd5bfe86809940d252",
|
|
880
|
+
];
|
|
881
|
+
let messages = vector[
|
|
882
|
+
b"Hello Aptos!",
|
|
883
|
+
b"Hello Aptos!",
|
|
884
|
+
b"Bello Aptos!",
|
|
885
|
+
];
|
|
886
|
+
|
|
887
|
+
let i = 0;
|
|
888
|
+
while (i < std::vector::length(&pks)) {
|
|
889
|
+
let sig = std::vector::borrow(&sigs, i);
|
|
890
|
+
let pk = *std::vector::borrow(&pks, i);
|
|
891
|
+
let msg = *std::vector::borrow(&messages, i);
|
|
892
|
+
|
|
893
|
+
let pk = option::extract(&mut public_key_from_bytes(pk));
|
|
894
|
+
|
|
895
|
+
let notok = verify_normal_signature(
|
|
896
|
+
sig,
|
|
897
|
+
&pk,
|
|
898
|
+
msg,
|
|
899
|
+
);
|
|
900
|
+
assert!(notok == false, 1);
|
|
901
|
+
|
|
902
|
+
let notok = verify_signature_share(
|
|
903
|
+
sig,
|
|
904
|
+
&PublicKeyWithPoP { bytes: pk.bytes },
|
|
905
|
+
msg,
|
|
906
|
+
);
|
|
907
|
+
assert!(notok == false, 1);
|
|
908
|
+
|
|
909
|
+
i = i + 1;
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
#[test]
|
|
914
|
+
fun test_verify_normal_signature_or_signature_share_randomized() {
|
|
915
|
+
let (sk, pkpop) = generate_keys();
|
|
916
|
+
let pk = public_key_with_pop_to_normal(&pkpop);
|
|
917
|
+
|
|
918
|
+
let msg = b"hello world";
|
|
919
|
+
let sig = sign_arbitrary_bytes(&sk, msg);
|
|
920
|
+
assert!(verify_normal_signature(&sig, &pk, msg), 1);
|
|
921
|
+
assert!(!verify_normal_signature(&maul_signature(&sig), &pk, msg), 1);
|
|
922
|
+
assert!(!verify_normal_signature(&sig, &maul_public_key(&pk), msg), 1);
|
|
923
|
+
assert!(!verify_normal_signature(&sig, &pk, maul_bytes(&msg)), 1);
|
|
924
|
+
|
|
925
|
+
assert!(verify_signature_share(&sig, &pkpop, msg), 1);
|
|
926
|
+
assert!(!verify_signature_share(&maul_signature(&sig), &pkpop, msg), 1);
|
|
927
|
+
assert!(!verify_signature_share(&sig, &maul_public_key_with_pop(&pkpop), msg), 1);
|
|
928
|
+
assert!(!verify_signature_share(&sig, &pkpop, maul_bytes(&msg)), 1);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
#[test]
|
|
932
|
+
/// Tests verification of random BLS proofs-of-possession (PoPs)
|
|
933
|
+
fun test_verify_pop() {
|
|
934
|
+
// Test case generated by running `cargo test -- sample_pop --nocapture --include-ignored` in `crates/aptos-crypto`
|
|
935
|
+
// =============================================================================================================
|
|
936
|
+
|
|
937
|
+
let pks = vector[
|
|
938
|
+
x"808864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7",
|
|
939
|
+
x"8843843c76d167c02842a214c21277bad0bfd83da467cb5cf2d3ee67b2dcc7221b9fafa6d430400164012580e0c34d27",
|
|
940
|
+
x"a23b524d4308d46e43ee8cbbf57f3e1c20c47061ad9c3f915212334ea6532451dd5c01d3d3ada6bea10fe180b2c3b450",
|
|
941
|
+
x"a2aaa3eae1df3fc36365491afa1da5181acbb03801afd1430f04bb3b3eb18036f8b756b3508e4caee04beff50d455d1c",
|
|
942
|
+
x"84985b7e983dbdaddfca1f0b7dad9660bb39fff660e329acec15f69ac48c75dfa5d2df9f0dc320e4e7b7658166e0ac1c",
|
|
943
|
+
];
|
|
944
|
+
|
|
945
|
+
let pops = vector[
|
|
946
|
+
proof_of_possession_from_bytes(x"ab42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364"),
|
|
947
|
+
proof_of_possession_from_bytes(x"a6da5f2bc17df70ce664cff3e3a3e09d17162e47e652032b9fedc0c772fd5a533583242cba12095602e422e579c5284b1735009332dbdd23430bbcf61cc506ae37e41ff9a1fc78f0bc0d99b6bc7bf74c8f567dfb59079a035842bdc5fa3a0464"),
|
|
948
|
+
proof_of_possession_from_bytes(x"b8eef236595e2eab34d3c1abdab65971f5cfa1988c731ef62bd63c9a9ad3dfc9259f4f183bfffbc8375a38ba62e1c41a11173209705996ce889859bcbb3ddd7faa3c4ea3d8778f30a9ff814fdcfea1fb163d745c54dfb4dcc5a8cee092ee0070"),
|
|
949
|
+
proof_of_possession_from_bytes(x"a03a12fab68ad59d85c15dd1528560eff2c89250070ad0654ba260fda4334da179811d2ecdaca57693f80e9ce977d62011e3b1ee7bb4f7e0eb9b349468dd758f10fc35d54e0d0b8536ca713a77a301944392a5c192b6adf2a79ae2b38912dc98"),
|
|
950
|
+
proof_of_possession_from_bytes(x"8899b294f3c066e6dfb59bc0843265a1ccd6afc8f0f38a074d45ded8799c39d25ee0376cd6d6153b0d4d2ff8655e578b140254f1287b9e9df4e2aecc5b049d8556a4ab07f574df68e46348fd78e5298b7913377cf5bb3cf4796bfc755902bfdd"),
|
|
951
|
+
];
|
|
952
|
+
|
|
953
|
+
assert!(std::vector::length(&pks) == std::vector::length(&pops), 1);
|
|
954
|
+
|
|
955
|
+
let i = 0;
|
|
956
|
+
while (i < std::vector::length(&pks)) {
|
|
957
|
+
let opt_pk = public_key_from_bytes_with_pop(*std::vector::borrow(&pks, i), std::vector::borrow(&pops, i));
|
|
958
|
+
assert!(option::is_some(&opt_pk), 1);
|
|
959
|
+
|
|
960
|
+
i = i + 1;
|
|
961
|
+
};
|
|
962
|
+
|
|
963
|
+
// assert first PK's PoP does not verify against modifed PK' = 0xa0 | PK[1:]
|
|
964
|
+
let opt_pk = public_key_from_bytes_with_pop(
|
|
965
|
+
x"a08864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7",
|
|
966
|
+
&proof_of_possession_from_bytes(x"ab42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364"));
|
|
967
|
+
assert!(option::is_none(&opt_pk), 1);
|
|
968
|
+
|
|
969
|
+
// assert first PK's PoP does not verify if modifed as pop' = 0xb0 | pop[1:]
|
|
970
|
+
let opt_pk = public_key_from_bytes_with_pop(
|
|
971
|
+
x"808864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7",
|
|
972
|
+
&proof_of_possession_from_bytes(x"bb42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364"));
|
|
973
|
+
assert!(option::is_none(&opt_pk), 1);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
#[test]
|
|
977
|
+
fun test_verify_pop_randomized() {
|
|
978
|
+
let (sk, pk) = generate_keys();
|
|
979
|
+
let pk_bytes = public_key_with_pop_to_bytes(&pk);
|
|
980
|
+
let pop = generate_proof_of_possession(&sk);
|
|
981
|
+
assert!(option::is_some(&public_key_from_bytes_with_pop(pk_bytes, &pop)), 1);
|
|
982
|
+
assert!(option::is_none(&public_key_from_bytes_with_pop(pk_bytes, &maul_proof_of_possession(&pop))), 1);
|
|
983
|
+
assert!(option::is_none(&public_key_from_bytes_with_pop(maul_bytes(&pk_bytes), &pop)), 1);
|
|
984
|
+
}
|
|
985
|
+
}
|