@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,1310 @@
|
|
|
1
|
+
/// This module contains functions for Ristretto255 curve arithmetic, assuming addition as the group operation.
|
|
2
|
+
///
|
|
3
|
+
/// The order of the Ristretto255 elliptic curve group is $\ell = 2^252 + 27742317777372353535851937790883648493$, same
|
|
4
|
+
/// as the order of the prime-order subgroup of Curve25519.
|
|
5
|
+
///
|
|
6
|
+
/// This module provides two structs for encoding Ristretto elliptic curves to the developer:
|
|
7
|
+
///
|
|
8
|
+
/// - First, a 32-byte-sized CompressedRistretto struct, which is used to persist points in storage.
|
|
9
|
+
///
|
|
10
|
+
/// - Second, a larger, in-memory, RistrettoPoint struct, which is decompressable from a CompressedRistretto struct. This
|
|
11
|
+
/// larger struct can be used for fast arithmetic operations (additions, multiplications, etc.). The results can be saved
|
|
12
|
+
/// back into storage by compressing RistrettoPoint structs back to CompressedRistretto structs.
|
|
13
|
+
///
|
|
14
|
+
/// This module also provides a Scalar struct for persisting scalars in storage and doing fast arithmetic on them.
|
|
15
|
+
///
|
|
16
|
+
/// One invariant maintained by this module is that all CompressedRistretto structs store a canonically-encoded point,
|
|
17
|
+
/// which can always be decompressed into a valid point on the curve as a RistrettoPoint struct. Unfortunately, due to
|
|
18
|
+
/// limitations in our underlying curve25519-dalek elliptic curve library, this decompression will unnecessarily verify
|
|
19
|
+
/// the validity of the point and thus slightly decrease performance.
|
|
20
|
+
///
|
|
21
|
+
/// Similarly, all Scalar structs store a canonically-encoded scalar, which can always be safely operated on using
|
|
22
|
+
/// arithmetic operations.
|
|
23
|
+
///
|
|
24
|
+
/// In the future, we might support additional features:
|
|
25
|
+
///
|
|
26
|
+
/// * For scalars:
|
|
27
|
+
/// - batch_invert()
|
|
28
|
+
///
|
|
29
|
+
/// * For points:
|
|
30
|
+
/// - double()
|
|
31
|
+
/// + The challenge is that curve25519-dalek does NOT export double for Ristretto points (nor for Edwards)
|
|
32
|
+
///
|
|
33
|
+
/// - double_and_compress_batch()
|
|
34
|
+
///
|
|
35
|
+
/// - fixed-base, variable-time via optional_mixed_multiscalar_mul() in VartimePrecomputedMultiscalarMul
|
|
36
|
+
/// + This would require a storage-friendly RistrettoBasepointTable and an in-memory variant of it too
|
|
37
|
+
/// + Similar to the CompressedRistretto and RistrettoPoint structs in this module
|
|
38
|
+
/// + The challenge is that curve25519-dalek's RistrettoBasepointTable is not serializable
|
|
39
|
+
|
|
40
|
+
module aptos_std::ristretto255 {
|
|
41
|
+
use std::features;
|
|
42
|
+
use std::option::Option;
|
|
43
|
+
|
|
44
|
+
#[test_only]
|
|
45
|
+
use std::option;
|
|
46
|
+
|
|
47
|
+
//
|
|
48
|
+
// Constants
|
|
49
|
+
//
|
|
50
|
+
|
|
51
|
+
/// The order of the Ristretto255 group and its scalar field, in little-endian.
|
|
52
|
+
const ORDER_ELL: vector<u8> = x"edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010";
|
|
53
|
+
|
|
54
|
+
/// `ORDER_ELL` - 1: i.e., the "largest", reduced scalar in the field
|
|
55
|
+
const L_MINUS_ONE: vector<u8> = x"ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010";
|
|
56
|
+
|
|
57
|
+
/// The maximum size in bytes of a canonically-encoded Scalar is 32 bytes.
|
|
58
|
+
const MAX_SCALAR_NUM_BYTES: u64 = 32u64;
|
|
59
|
+
|
|
60
|
+
/// The maximum size in bits of a canonically-encoded Scalar is 256 bits.
|
|
61
|
+
const MAX_SCALAR_NUM_BITS: u64 = 256u64;
|
|
62
|
+
|
|
63
|
+
/// The maximum size in bytes of a canonically-encoded Ristretto255 point is 32 bytes.
|
|
64
|
+
const MAX_POINT_NUM_BYTES: u64 = 32u64;
|
|
65
|
+
|
|
66
|
+
/// The basepoint (generator) of the Ristretto255 group
|
|
67
|
+
const BASE_POINT: vector<u8> = x"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76";
|
|
68
|
+
|
|
69
|
+
/// The hash of the basepoint of the Ristretto255 group using SHA3_512
|
|
70
|
+
const HASH_BASE_POINT: vector<u8> = x"8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134";
|
|
71
|
+
|
|
72
|
+
//
|
|
73
|
+
// Reasons for error codes
|
|
74
|
+
//
|
|
75
|
+
|
|
76
|
+
/// The number of scalars does not match the number of points.
|
|
77
|
+
const E_DIFFERENT_NUM_POINTS_AND_SCALARS: u64 = 1;
|
|
78
|
+
/// Expected more than zero points as input.
|
|
79
|
+
const E_ZERO_POINTS: u64 = 2;
|
|
80
|
+
/// Expected more than zero scalars as input.
|
|
81
|
+
const E_ZERO_SCALARS: u64 = 3;
|
|
82
|
+
/// Too many points have been created in the current transaction execution.
|
|
83
|
+
const E_TOO_MANY_POINTS_CREATED: u64 = 4;
|
|
84
|
+
/// The native function has not been deployed yet.
|
|
85
|
+
const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 5;
|
|
86
|
+
|
|
87
|
+
//
|
|
88
|
+
// Scalar and point structs
|
|
89
|
+
//
|
|
90
|
+
|
|
91
|
+
/// This struct represents a scalar as a little-endian byte encoding of an integer in $\mathbb{Z}_\ell$, which is
|
|
92
|
+
/// stored in `data`. Here, \ell denotes the order of the scalar field (and the underlying elliptic curve group).
|
|
93
|
+
struct Scalar has copy, store, drop {
|
|
94
|
+
data: vector<u8>
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// This struct represents a serialized point on the Ristretto255 curve, in 32 bytes.
|
|
98
|
+
/// This struct can be decompressed from storage into an in-memory RistrettoPoint, on which fast curve arithmetic
|
|
99
|
+
/// can be performed.
|
|
100
|
+
struct CompressedRistretto has copy, store, drop {
|
|
101
|
+
data: vector<u8>
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// This struct represents an in-memory Ristretto255 point and supports fast curve arithmetic.
|
|
105
|
+
///
|
|
106
|
+
/// An important invariant: There will never be two RistrettoPoint's constructed with the same handle. One can have
|
|
107
|
+
/// immutable references to the same RistrettoPoint, of course.
|
|
108
|
+
struct RistrettoPoint has drop {
|
|
109
|
+
handle: u64
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//
|
|
113
|
+
// Functions for arithmetic on points
|
|
114
|
+
//
|
|
115
|
+
|
|
116
|
+
/// Returns the identity point as a CompressedRistretto.
|
|
117
|
+
public fun point_identity_compressed(): CompressedRistretto {
|
|
118
|
+
CompressedRistretto {
|
|
119
|
+
data: x"0000000000000000000000000000000000000000000000000000000000000000"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// Returns the identity point as a CompressedRistretto.
|
|
124
|
+
public fun point_identity(): RistrettoPoint {
|
|
125
|
+
RistrettoPoint {
|
|
126
|
+
handle: point_identity_internal()
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/// Returns the basepoint (generator) of the Ristretto255 group as a compressed point
|
|
131
|
+
public fun basepoint_compressed(): CompressedRistretto {
|
|
132
|
+
CompressedRistretto {
|
|
133
|
+
data: BASE_POINT
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// Returns the hash-to-point result of serializing the basepoint of the Ristretto255 group.
|
|
138
|
+
/// For use as the random value basepoint in Pedersen commitments
|
|
139
|
+
public fun hash_to_point_base(): RistrettoPoint {
|
|
140
|
+
let comp_res = CompressedRistretto { data: HASH_BASE_POINT };
|
|
141
|
+
point_decompress(&comp_res)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// Returns the basepoint (generator) of the Ristretto255 group
|
|
145
|
+
public fun basepoint(): RistrettoPoint {
|
|
146
|
+
let (handle, _) = point_decompress_internal(BASE_POINT);
|
|
147
|
+
|
|
148
|
+
RistrettoPoint {
|
|
149
|
+
handle
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/// Multiplies the basepoint (generator) of the Ristretto255 group by a scalar and returns the result.
|
|
154
|
+
/// This call is much faster than `point_mul(&basepoint(), &some_scalar)` because of precomputation tables.
|
|
155
|
+
public fun basepoint_mul(a: &Scalar): RistrettoPoint {
|
|
156
|
+
RistrettoPoint {
|
|
157
|
+
handle: basepoint_mul_internal(a.data)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Creates a new CompressedRistretto point from a sequence of 32 bytes. If those bytes do not represent a valid
|
|
162
|
+
/// point, returns None.
|
|
163
|
+
public fun new_compressed_point_from_bytes(bytes: vector<u8>): Option<CompressedRistretto> {
|
|
164
|
+
if (point_is_canonical_internal(bytes)) {
|
|
165
|
+
std::option::some(CompressedRistretto {
|
|
166
|
+
data: bytes
|
|
167
|
+
})
|
|
168
|
+
} else {
|
|
169
|
+
std::option::none<CompressedRistretto>()
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// Creates a new RistrettoPoint from a sequence of 32 bytes. If those bytes do not represent a valid point,
|
|
174
|
+
/// returns None.
|
|
175
|
+
public fun new_point_from_bytes(bytes: vector<u8>): Option<RistrettoPoint> {
|
|
176
|
+
let (handle, is_canonical) = point_decompress_internal(bytes);
|
|
177
|
+
if (is_canonical) {
|
|
178
|
+
std::option::some(RistrettoPoint { handle })
|
|
179
|
+
} else {
|
|
180
|
+
std::option::none<RistrettoPoint>()
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/// Given a compressed ristretto point `point`, returns the byte representation of that point
|
|
185
|
+
public fun compressed_point_to_bytes(point: CompressedRistretto): vector<u8> {
|
|
186
|
+
point.data
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/// DEPRECATED: Use the more clearly-named `new_point_from_sha2_512`
|
|
190
|
+
///
|
|
191
|
+
/// Hashes the input to a uniformly-at-random RistrettoPoint via SHA512.
|
|
192
|
+
public fun new_point_from_sha512(sha2_512_input: vector<u8>): RistrettoPoint {
|
|
193
|
+
new_point_from_sha2_512(sha2_512_input)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Hashes the input to a uniformly-at-random RistrettoPoint via SHA2-512.
|
|
197
|
+
public fun new_point_from_sha2_512(sha2_512_input: vector<u8>): RistrettoPoint {
|
|
198
|
+
RistrettoPoint {
|
|
199
|
+
handle: new_point_from_sha512_internal(sha2_512_input)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/// Samples a uniformly-at-random RistrettoPoint given a sequence of 64 uniformly-at-random bytes. This function
|
|
204
|
+
/// can be used to build a collision-resistant hash function that maps 64-byte messages to RistrettoPoint's.
|
|
205
|
+
public fun new_point_from_64_uniform_bytes(bytes: vector<u8>): Option<RistrettoPoint> {
|
|
206
|
+
if (std::vector::length(&bytes) == 64) {
|
|
207
|
+
std::option::some(RistrettoPoint {
|
|
208
|
+
handle: new_point_from_64_uniform_bytes_internal(bytes)
|
|
209
|
+
})
|
|
210
|
+
} else {
|
|
211
|
+
std::option::none<RistrettoPoint>()
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/// Decompresses a CompressedRistretto from storage into a RistrettoPoint which can be used for fast arithmetic.
|
|
216
|
+
public fun point_decompress(point: &CompressedRistretto): RistrettoPoint {
|
|
217
|
+
// NOTE: Our CompressedRistretto invariant assures us that every CompressedRistretto in storage is a valid
|
|
218
|
+
// RistrettoPoint
|
|
219
|
+
let (handle, _) = point_decompress_internal(point.data);
|
|
220
|
+
RistrettoPoint { handle }
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/// Clones a RistrettoPoint.
|
|
224
|
+
public fun point_clone(point: &RistrettoPoint): RistrettoPoint {
|
|
225
|
+
if(!features::bulletproofs_enabled()) {
|
|
226
|
+
abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE))
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
RistrettoPoint {
|
|
230
|
+
handle: point_clone_internal(point.handle)
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/// Compresses a RistrettoPoint to a CompressedRistretto which can be put in storage.
|
|
235
|
+
public fun point_compress(point: &RistrettoPoint): CompressedRistretto {
|
|
236
|
+
CompressedRistretto {
|
|
237
|
+
data: point_compress_internal(point)
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/// Returns the sequence of bytes representin this Ristretto point.
|
|
242
|
+
/// To convert a RistrettoPoint 'p' to bytes, first compress it via `c = point_compress(&p)`, and then call this
|
|
243
|
+
/// function on `c`.
|
|
244
|
+
public fun point_to_bytes(point: &CompressedRistretto): vector<u8> {
|
|
245
|
+
point.data
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/// Returns a * point.
|
|
249
|
+
public fun point_mul(point: &RistrettoPoint, a: &Scalar): RistrettoPoint {
|
|
250
|
+
RistrettoPoint {
|
|
251
|
+
handle: point_mul_internal(point, a.data, false)
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/// Sets a *= point and returns 'a'.
|
|
256
|
+
public fun point_mul_assign(point: &mut RistrettoPoint, a: &Scalar): &mut RistrettoPoint {
|
|
257
|
+
point_mul_internal(point, a.data, true);
|
|
258
|
+
point
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/// Returns (a * a_base + b * base_point), where base_point is the Ristretto basepoint encoded in `BASE_POINT`.
|
|
262
|
+
public fun basepoint_double_mul(a: &Scalar, a_base: &RistrettoPoint, b: &Scalar): RistrettoPoint {
|
|
263
|
+
RistrettoPoint {
|
|
264
|
+
handle: basepoint_double_mul_internal(a.data, a_base, b.data)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/// Returns a + b
|
|
269
|
+
public fun point_add(a: &RistrettoPoint, b: &RistrettoPoint): RistrettoPoint {
|
|
270
|
+
RistrettoPoint {
|
|
271
|
+
handle: point_add_internal(a, b, false)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// Sets a += b and returns 'a'.
|
|
276
|
+
public fun point_add_assign(a: &mut RistrettoPoint, b: &RistrettoPoint): &mut RistrettoPoint {
|
|
277
|
+
point_add_internal(a, b, true);
|
|
278
|
+
a
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/// Returns a - b
|
|
282
|
+
public fun point_sub(a: &RistrettoPoint, b: &RistrettoPoint): RistrettoPoint {
|
|
283
|
+
RistrettoPoint {
|
|
284
|
+
handle: point_sub_internal(a, b, false)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/// Sets a -= b and returns 'a'.
|
|
289
|
+
public fun point_sub_assign(a: &mut RistrettoPoint, b: &RistrettoPoint): &mut RistrettoPoint {
|
|
290
|
+
point_sub_internal(a, b, true);
|
|
291
|
+
a
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/// Returns -a
|
|
295
|
+
public fun point_neg(a: &RistrettoPoint): RistrettoPoint {
|
|
296
|
+
RistrettoPoint {
|
|
297
|
+
handle: point_neg_internal(a, false)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/// Sets a = -a, and returns 'a'.
|
|
302
|
+
public fun point_neg_assign(a: &mut RistrettoPoint): &mut RistrettoPoint {
|
|
303
|
+
point_neg_internal(a, true);
|
|
304
|
+
a
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/// Returns true if the two RistrettoPoints are the same points on the elliptic curve.
|
|
308
|
+
native public fun point_equals(g: &RistrettoPoint, h: &RistrettoPoint): bool;
|
|
309
|
+
|
|
310
|
+
/// Computes a double-scalar multiplication, returning a_1 p_1 + a_2 p_2
|
|
311
|
+
/// This function is much faster than computing each a_i p_i using `point_mul` and adding up the results using `point_add`.
|
|
312
|
+
public fun double_scalar_mul(scalar1: &Scalar, point1: &RistrettoPoint, scalar2: &Scalar, point2: &RistrettoPoint): RistrettoPoint {
|
|
313
|
+
if(!features::bulletproofs_enabled()) {
|
|
314
|
+
abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE))
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
RistrettoPoint {
|
|
318
|
+
handle: double_scalar_mul_internal(point1.handle, point2.handle, scalar1.data, scalar2.data)
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/// Computes a multi-scalar multiplication, returning a_1 p_1 + a_2 p_2 + ... + a_n p_n.
|
|
323
|
+
/// This function is much faster than computing each a_i p_i using `point_mul` and adding up the results using `point_add`.
|
|
324
|
+
public fun multi_scalar_mul(points: &vector<RistrettoPoint>, scalars: &vector<Scalar>): RistrettoPoint {
|
|
325
|
+
assert!(!std::vector::is_empty(points), std::error::invalid_argument(E_ZERO_POINTS));
|
|
326
|
+
assert!(!std::vector::is_empty(scalars), std::error::invalid_argument(E_ZERO_SCALARS));
|
|
327
|
+
assert!(std::vector::length(points) == std::vector::length(scalars), std::error::invalid_argument(E_DIFFERENT_NUM_POINTS_AND_SCALARS));
|
|
328
|
+
|
|
329
|
+
RistrettoPoint {
|
|
330
|
+
handle: multi_scalar_mul_internal<RistrettoPoint, Scalar>(points, scalars)
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
//
|
|
335
|
+
// Functions for arithmetic on Scalars
|
|
336
|
+
//
|
|
337
|
+
|
|
338
|
+
/// Given a sequence of 32 bytes, checks if they canonically-encode a Scalar and return it.
|
|
339
|
+
/// Otherwise, returns None.
|
|
340
|
+
public fun new_scalar_from_bytes(bytes: vector<u8>): Option<Scalar> {
|
|
341
|
+
if (scalar_is_canonical_internal(bytes)) {
|
|
342
|
+
std::option::some(Scalar {
|
|
343
|
+
data: bytes
|
|
344
|
+
})
|
|
345
|
+
} else {
|
|
346
|
+
std::option::none<Scalar>()
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/// DEPRECATED: Use the more clearly-named `new_scalar_from_sha2_512`
|
|
351
|
+
///
|
|
352
|
+
/// Hashes the input to a uniformly-at-random Scalar via SHA2-512
|
|
353
|
+
public fun new_scalar_from_sha512(sha2_512_input: vector<u8>): Scalar {
|
|
354
|
+
new_scalar_from_sha2_512(sha2_512_input)
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// Hashes the input to a uniformly-at-random Scalar via SHA2-512
|
|
358
|
+
public fun new_scalar_from_sha2_512(sha2_512_input: vector<u8>): Scalar {
|
|
359
|
+
Scalar {
|
|
360
|
+
data: scalar_from_sha512_internal(sha2_512_input)
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/// Creates a Scalar from an u8.
|
|
365
|
+
public fun new_scalar_from_u8(byte: u8): Scalar {
|
|
366
|
+
let s = scalar_zero();
|
|
367
|
+
let byte_zero = std::vector::borrow_mut(&mut s.data, 0);
|
|
368
|
+
*byte_zero = byte;
|
|
369
|
+
|
|
370
|
+
s
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/// Creates a Scalar from an u32.
|
|
374
|
+
public fun new_scalar_from_u32(four_bytes: u32): Scalar {
|
|
375
|
+
Scalar {
|
|
376
|
+
data: scalar_from_u64_internal((four_bytes as u64))
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/// Creates a Scalar from an u64.
|
|
381
|
+
public fun new_scalar_from_u64(eight_bytes: u64): Scalar {
|
|
382
|
+
Scalar {
|
|
383
|
+
data: scalar_from_u64_internal(eight_bytes)
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/// Creates a Scalar from an u128.
|
|
388
|
+
public fun new_scalar_from_u128(sixteen_bytes: u128): Scalar {
|
|
389
|
+
Scalar {
|
|
390
|
+
data: scalar_from_u128_internal(sixteen_bytes)
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/// Creates a Scalar from 32 bytes by reducing the little-endian-encoded number in those bytes modulo $\ell$.
|
|
395
|
+
public fun new_scalar_reduced_from_32_bytes(bytes: vector<u8>): Option<Scalar> {
|
|
396
|
+
if (std::vector::length(&bytes) == 32) {
|
|
397
|
+
std::option::some(Scalar {
|
|
398
|
+
data: scalar_reduced_from_32_bytes_internal(bytes)
|
|
399
|
+
})
|
|
400
|
+
} else {
|
|
401
|
+
std::option::none()
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/// Samples a scalar uniformly-at-random given 64 uniform-at-random bytes as input by reducing the little-endian-encoded number
|
|
406
|
+
/// in those bytes modulo $\ell$.
|
|
407
|
+
public fun new_scalar_uniform_from_64_bytes(bytes: vector<u8>): Option<Scalar> {
|
|
408
|
+
if (std::vector::length(&bytes) == 64) {
|
|
409
|
+
std::option::some(Scalar {
|
|
410
|
+
data: scalar_uniform_from_64_bytes_internal(bytes)
|
|
411
|
+
})
|
|
412
|
+
} else {
|
|
413
|
+
std::option::none()
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/// Returns 0 as a Scalar.
|
|
418
|
+
public fun scalar_zero(): Scalar {
|
|
419
|
+
Scalar {
|
|
420
|
+
data: x"0000000000000000000000000000000000000000000000000000000000000000"
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/// Returns true if the given Scalar equals 0.
|
|
425
|
+
public fun scalar_is_zero(s: &Scalar): bool {
|
|
426
|
+
s.data == x"0000000000000000000000000000000000000000000000000000000000000000"
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/// Returns 1 as a Scalar.
|
|
430
|
+
public fun scalar_one(): Scalar {
|
|
431
|
+
Scalar {
|
|
432
|
+
data: x"0100000000000000000000000000000000000000000000000000000000000000"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/// Returns true if the given Scalar equals 1.
|
|
437
|
+
public fun scalar_is_one(s: &Scalar): bool {
|
|
438
|
+
s.data == x"0100000000000000000000000000000000000000000000000000000000000000"
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/// Returns true if the two scalars are equal.
|
|
442
|
+
public fun scalar_equals(lhs: &Scalar, rhs: &Scalar): bool {
|
|
443
|
+
lhs.data == rhs.data
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/// Returns the inverse s^{-1} mod \ell of a scalar s.
|
|
447
|
+
/// Returns None if s is zero.
|
|
448
|
+
public fun scalar_invert(s: &Scalar): Option<Scalar> {
|
|
449
|
+
if (scalar_is_zero(s)) {
|
|
450
|
+
std::option::none<Scalar>()
|
|
451
|
+
} else {
|
|
452
|
+
std::option::some(Scalar {
|
|
453
|
+
data: scalar_invert_internal(s.data)
|
|
454
|
+
})
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/// Returns the product of the two scalars.
|
|
459
|
+
public fun scalar_mul(a: &Scalar, b: &Scalar): Scalar {
|
|
460
|
+
Scalar {
|
|
461
|
+
data: scalar_mul_internal(a.data, b.data)
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/// Computes the product of 'a' and 'b' and assigns the result to 'a'.
|
|
466
|
+
/// Returns 'a'.
|
|
467
|
+
public fun scalar_mul_assign(a: &mut Scalar, b: &Scalar): &mut Scalar {
|
|
468
|
+
a.data = scalar_mul(a, b).data;
|
|
469
|
+
a
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/// Returns the sum of the two scalars.
|
|
473
|
+
public fun scalar_add(a: &Scalar, b: &Scalar): Scalar {
|
|
474
|
+
Scalar {
|
|
475
|
+
data: scalar_add_internal(a.data, b.data)
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/// Computes the sum of 'a' and 'b' and assigns the result to 'a'
|
|
480
|
+
/// Returns 'a'.
|
|
481
|
+
public fun scalar_add_assign(a: &mut Scalar, b: &Scalar): &mut Scalar {
|
|
482
|
+
a.data = scalar_add(a, b).data;
|
|
483
|
+
a
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/// Returns the difference of the two scalars.
|
|
487
|
+
public fun scalar_sub(a: &Scalar, b: &Scalar): Scalar {
|
|
488
|
+
Scalar {
|
|
489
|
+
data: scalar_sub_internal(a.data, b.data)
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/// Subtracts 'b' from 'a' and assigns the result to 'a'.
|
|
494
|
+
/// Returns 'a'.
|
|
495
|
+
public fun scalar_sub_assign(a: &mut Scalar, b: &Scalar): &mut Scalar {
|
|
496
|
+
a.data = scalar_sub(a, b).data;
|
|
497
|
+
a
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/// Returns the negation of 'a': i.e., $(0 - a) \mod \ell$.
|
|
501
|
+
public fun scalar_neg(a: &Scalar): Scalar {
|
|
502
|
+
Scalar {
|
|
503
|
+
data: scalar_neg_internal(a.data)
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/// Replaces 'a' by its negation.
|
|
508
|
+
/// Returns 'a'.
|
|
509
|
+
public fun scalar_neg_assign(a: &mut Scalar): &mut Scalar {
|
|
510
|
+
a.data = scalar_neg(a).data;
|
|
511
|
+
a
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/// Returns the byte-representation of the scalar.
|
|
515
|
+
public fun scalar_to_bytes(s: &Scalar): vector<u8> {
|
|
516
|
+
s.data
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
//
|
|
520
|
+
// Only used internally for implementing CompressedRistretto and RistrettoPoint
|
|
521
|
+
//
|
|
522
|
+
|
|
523
|
+
// NOTE: This was supposed to be more clearly named with *_sha2_512_*.
|
|
524
|
+
native fun new_point_from_sha512_internal(sha2_512_input: vector<u8>): u64;
|
|
525
|
+
|
|
526
|
+
native fun new_point_from_64_uniform_bytes_internal(bytes: vector<u8>): u64;
|
|
527
|
+
|
|
528
|
+
native fun point_is_canonical_internal(bytes: vector<u8>): bool;
|
|
529
|
+
|
|
530
|
+
native fun point_identity_internal(): u64;
|
|
531
|
+
|
|
532
|
+
native fun point_decompress_internal(maybe_non_canonical_bytes: vector<u8>): (u64, bool);
|
|
533
|
+
|
|
534
|
+
native fun point_clone_internal(point_handle: u64): u64;
|
|
535
|
+
native fun point_compress_internal(point: &RistrettoPoint): vector<u8>;
|
|
536
|
+
|
|
537
|
+
native fun point_mul_internal(point: &RistrettoPoint, a: vector<u8>, in_place: bool): u64;
|
|
538
|
+
|
|
539
|
+
native fun basepoint_mul_internal(a: vector<u8>): u64;
|
|
540
|
+
|
|
541
|
+
native fun basepoint_double_mul_internal(a: vector<u8>, some_point: &RistrettoPoint, b: vector<u8>): u64;
|
|
542
|
+
|
|
543
|
+
native fun point_add_internal(a: &RistrettoPoint, b: &RistrettoPoint, in_place: bool): u64;
|
|
544
|
+
|
|
545
|
+
native fun point_sub_internal(a: &RistrettoPoint, b: &RistrettoPoint, in_place: bool): u64;
|
|
546
|
+
|
|
547
|
+
native fun point_neg_internal(a: &RistrettoPoint, in_place: bool): u64;
|
|
548
|
+
|
|
549
|
+
native fun double_scalar_mul_internal(point1: u64, point2: u64, scalar1: vector<u8>, scalar2: vector<u8>): u64;
|
|
550
|
+
|
|
551
|
+
/// The generic arguments are needed to deal with some Move VM peculiarities which prevent us from borrowing the
|
|
552
|
+
/// points (or scalars) inside a &vector in Rust.
|
|
553
|
+
///
|
|
554
|
+
/// WARNING: This function can only be called with P = RistrettoPoint and S = Scalar.
|
|
555
|
+
native fun multi_scalar_mul_internal<P, S>(points: &vector<P>, scalars: &vector<S>): u64;
|
|
556
|
+
|
|
557
|
+
//
|
|
558
|
+
// Only used internally for implementing Scalar.
|
|
559
|
+
//
|
|
560
|
+
|
|
561
|
+
native fun scalar_is_canonical_internal(s: vector<u8>): bool;
|
|
562
|
+
|
|
563
|
+
native fun scalar_from_u64_internal(num: u64): vector<u8>;
|
|
564
|
+
|
|
565
|
+
native fun scalar_from_u128_internal(num: u128): vector<u8>;
|
|
566
|
+
|
|
567
|
+
native fun scalar_reduced_from_32_bytes_internal(bytes: vector<u8>): vector<u8>;
|
|
568
|
+
|
|
569
|
+
native fun scalar_uniform_from_64_bytes_internal(bytes: vector<u8>): vector<u8>;
|
|
570
|
+
|
|
571
|
+
native fun scalar_invert_internal(bytes: vector<u8>): vector<u8>;
|
|
572
|
+
|
|
573
|
+
// NOTE: This was supposed to be more clearly named with *_sha2_512_*.
|
|
574
|
+
native fun scalar_from_sha512_internal(sha2_512_input: vector<u8>): vector<u8>;
|
|
575
|
+
|
|
576
|
+
native fun scalar_mul_internal(a_bytes: vector<u8>, b_bytes: vector<u8>): vector<u8>;
|
|
577
|
+
|
|
578
|
+
native fun scalar_add_internal(a_bytes: vector<u8>, b_bytes: vector<u8>): vector<u8>;
|
|
579
|
+
|
|
580
|
+
native fun scalar_sub_internal(a_bytes: vector<u8>, b_bytes: vector<u8>): vector<u8>;
|
|
581
|
+
|
|
582
|
+
native fun scalar_neg_internal(a_bytes: vector<u8>): vector<u8>;
|
|
583
|
+
|
|
584
|
+
#[test_only]
|
|
585
|
+
native fun random_scalar_internal(): vector<u8>;
|
|
586
|
+
|
|
587
|
+
//
|
|
588
|
+
// Test-only functions
|
|
589
|
+
//
|
|
590
|
+
|
|
591
|
+
#[test_only]
|
|
592
|
+
public fun random_scalar(): Scalar {
|
|
593
|
+
Scalar {
|
|
594
|
+
data: random_scalar_internal()
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
#[test_only]
|
|
599
|
+
public fun random_point(): RistrettoPoint {
|
|
600
|
+
let s = random_scalar();
|
|
601
|
+
|
|
602
|
+
basepoint_mul(&s)
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
//
|
|
606
|
+
// Testing constants
|
|
607
|
+
//
|
|
608
|
+
|
|
609
|
+
// The scalar 2
|
|
610
|
+
#[test_only]
|
|
611
|
+
const TWO_SCALAR: vector<u8> = x"0200000000000000000000000000000000000000000000000000000000000000";
|
|
612
|
+
|
|
613
|
+
// Non-canonical scalar: the order \ell of the group + 1
|
|
614
|
+
#[test_only]
|
|
615
|
+
const L_PLUS_ONE: vector<u8> = x"eed3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010";
|
|
616
|
+
|
|
617
|
+
// Non-canonical scalar: the order \ell of the group + 2
|
|
618
|
+
#[test_only]
|
|
619
|
+
const L_PLUS_TWO: vector<u8> = x"efd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010";
|
|
620
|
+
|
|
621
|
+
// Some random scalar denoted by X
|
|
622
|
+
#[test_only]
|
|
623
|
+
const X_SCALAR: vector<u8> = x"4e5ab4345d4708845913b4641bc27d5252a585101bcc4244d449f4a879d9f204";
|
|
624
|
+
|
|
625
|
+
// X^{-1} = 1/X = 6859937278830797291664592131120606308688036382723378951768035303146619657244
|
|
626
|
+
// 0x1CDC17FCE0E9A5BBD9247E56BB016347BBBA31EDD5A9BB96D50BCD7A3F962A0F
|
|
627
|
+
#[test_only]
|
|
628
|
+
const X_INV_SCALAR: vector<u8> = x"1cdc17fce0e9a5bbd9247e56bb016347bbba31edd5a9bb96d50bcd7a3f962a0f";
|
|
629
|
+
|
|
630
|
+
// Some random scalar Y = 2592331292931086675770238855846338635550719849568364935475441891787804997264
|
|
631
|
+
#[test_only]
|
|
632
|
+
const Y_SCALAR: vector<u8> = x"907633fe1c4b66a4a28d2dd7678386c353d0de5455d4fc9de8ef7ac31f35bb05";
|
|
633
|
+
|
|
634
|
+
// X * Y = 5690045403673944803228348699031245560686958845067437804563560795922180092780
|
|
635
|
+
#[test_only]
|
|
636
|
+
const X_TIMES_Y_SCALAR: vector<u8> = x"6c3374a1894f62210aaa2fe186a6f92ce0aa75c2779581c295fc08179a73940c";
|
|
637
|
+
|
|
638
|
+
// X + 2^256 * X \mod \ell
|
|
639
|
+
#[test_only]
|
|
640
|
+
const REDUCED_X_PLUS_2_TO_256_TIMES_X_SCALAR: vector<u8> = x"d89ab38bd279024745639ed817ad3f64cc005b32db9939f91c521fc564a5c008";
|
|
641
|
+
|
|
642
|
+
// sage: l = 2^252 + 27742317777372353535851937790883648493
|
|
643
|
+
// sage: big = 2^256 - 1
|
|
644
|
+
// sage: repr((big % l).digits(256))
|
|
645
|
+
#[test_only]
|
|
646
|
+
const REDUCED_2_256_MINUS_1_SCALAR: vector<u8> = x"1c95988d7431ecd670cf7d73f45befc6feffffffffffffffffffffffffffff0f";
|
|
647
|
+
|
|
648
|
+
#[test_only]
|
|
649
|
+
const NON_CANONICAL_ALL_ONES: vector<u8> = x"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
|
|
650
|
+
|
|
651
|
+
#[test_only]
|
|
652
|
+
const A_SCALAR: vector<u8> = x"1a0e978a90f6622d3747023f8ad8264da758aa1b88e040d1589e7b7f2376ef09";
|
|
653
|
+
|
|
654
|
+
// Generated in curve25519-dalek via:
|
|
655
|
+
// ```
|
|
656
|
+
// let mut hasher = sha2::Sha512::default();
|
|
657
|
+
// hasher.update(b"bello!");
|
|
658
|
+
// let s = Scalar::from_hash(hasher);
|
|
659
|
+
// println!("scalar: {:x?}", s.to_bytes());
|
|
660
|
+
// ```
|
|
661
|
+
#[test_only]
|
|
662
|
+
const B_SCALAR: vector<u8> = x"dbfd97afd38a06f0138d0527efb28ead5b7109b486465913bf3aa472a8ed4e0d";
|
|
663
|
+
|
|
664
|
+
#[test_only]
|
|
665
|
+
const A_TIMES_B_SCALAR: vector<u8> = x"2ab50e383d7c210f74d5387330735f18315112d10dfb98fcce1e2620c0c01402";
|
|
666
|
+
|
|
667
|
+
#[test_only]
|
|
668
|
+
const A_PLUS_B_SCALAR: vector<u8> = x"083839dd491e57c5743710c39a91d6e502cab3cf0e279ae417d91ff2cb633e07";
|
|
669
|
+
|
|
670
|
+
#[test_only]
|
|
671
|
+
/// A_SCALAR * BASE_POINT, computed by modifying a test in curve25519-dalek in src/edwards.rs to do:
|
|
672
|
+
/// ```
|
|
673
|
+
/// let comp = RistrettoPoint(A_TIMES_BASEPOINT.decompress().unwrap()).compress();
|
|
674
|
+
/// println!("hex: {:x?}", comp.to_bytes());
|
|
675
|
+
/// ```
|
|
676
|
+
const A_TIMES_BASE_POINT: vector<u8> = x"96d52d9262ee1e1aae79fbaee8c1d9068b0d01bf9a4579e618090c3d1088ae10";
|
|
677
|
+
|
|
678
|
+
#[test_only]
|
|
679
|
+
const A_POINT: vector<u8> = x"e87feda199d72b83de4f5b2d45d34805c57019c6c59c42cb70ee3d19aa996f75";
|
|
680
|
+
#[test_only]
|
|
681
|
+
const B_POINT: vector<u8> = x"fa0b3624b081c62f364d0b2839dcc76d7c3ab0e27e31beb2b9ed766575f28e76";
|
|
682
|
+
#[test_only]
|
|
683
|
+
const A_PLUS_B_POINT: vector<u8> = x"70cf3753475b9ff33e2f84413ed6b5052073bccc0a0a81789d3e5675dc258056";
|
|
684
|
+
|
|
685
|
+
// const NON_CANONICAL_LARGEST_ED25519_S: vector<u8> = x"f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f";
|
|
686
|
+
// const CANONICAL_LARGEST_ED25519_S_PLUS_ONE: vector<u8> = x"7e344775474a7f9723b63a8be92ae76dffffffffffffffffffffffffffffff0f";
|
|
687
|
+
// const CANONICAL_LARGEST_ED25519_S_MINUS_ONE: vector<u8> = x"7c344775474a7f9723b63a8be92ae76dffffffffffffffffffffffffffffff0f";
|
|
688
|
+
|
|
689
|
+
//
|
|
690
|
+
// Tests
|
|
691
|
+
//
|
|
692
|
+
|
|
693
|
+
#[test]
|
|
694
|
+
fun test_point_decompression() {
|
|
695
|
+
let compressed = new_compressed_point_from_bytes(A_POINT);
|
|
696
|
+
assert!(std::option::is_some(&compressed), 1);
|
|
697
|
+
|
|
698
|
+
let point = new_point_from_bytes(A_POINT);
|
|
699
|
+
assert!(std::option::is_some(&point), 1);
|
|
700
|
+
|
|
701
|
+
let point = std::option::extract(&mut point);
|
|
702
|
+
let compressed = std::option::extract(&mut compressed);
|
|
703
|
+
let same_point = point_decompress(&compressed);
|
|
704
|
+
|
|
705
|
+
assert!(point_equals(&point, &same_point), 1);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
#[test]
|
|
709
|
+
fun test_point_equals() {
|
|
710
|
+
let g = basepoint();
|
|
711
|
+
let same_g = std::option::extract(&mut new_point_from_bytes(BASE_POINT));
|
|
712
|
+
let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT));
|
|
713
|
+
|
|
714
|
+
assert!(point_equals(&g, &same_g), 1);
|
|
715
|
+
assert!(!point_equals(&g, &ag), 1);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
#[test]
|
|
719
|
+
fun test_point_mul() {
|
|
720
|
+
// fetch g
|
|
721
|
+
let g = basepoint();
|
|
722
|
+
// fetch a
|
|
723
|
+
let a = std::option::extract(&mut new_scalar_from_bytes(A_SCALAR));
|
|
724
|
+
// fetch expected a*g
|
|
725
|
+
let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT));
|
|
726
|
+
|
|
727
|
+
// compute a*g
|
|
728
|
+
let p = point_mul(&g, &a);
|
|
729
|
+
|
|
730
|
+
// sanity-check the handles
|
|
731
|
+
assert!(g.handle == 0, 1);
|
|
732
|
+
assert!(ag.handle == 1, 1);
|
|
733
|
+
assert!(p.handle == 2, 1);
|
|
734
|
+
|
|
735
|
+
assert!(!point_equals(&g, &ag), 1); // make sure input g remains unmodifed
|
|
736
|
+
assert!(point_equals(&p, &ag), 1); // make sure output a*g is correct
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
#[test]
|
|
740
|
+
fun test_point_mul_assign() {
|
|
741
|
+
let g = basepoint();
|
|
742
|
+
assert!(g.handle == 0, 1);
|
|
743
|
+
|
|
744
|
+
let a = std::option::extract(&mut new_scalar_from_bytes(A_SCALAR));
|
|
745
|
+
|
|
746
|
+
let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT));
|
|
747
|
+
assert!(ag.handle == 1, 1);
|
|
748
|
+
assert!(!point_equals(&g, &ag), 1);
|
|
749
|
+
|
|
750
|
+
{
|
|
751
|
+
// NOTE: new_g is just a mutable reference to g
|
|
752
|
+
let upd_g = point_mul_assign(&mut g, &a);
|
|
753
|
+
|
|
754
|
+
// in a mul_assign the returned &mut RistrettoPoint reference should have the same handle as 'g'
|
|
755
|
+
assert!(upd_g.handle == 0, 1);
|
|
756
|
+
|
|
757
|
+
assert!(point_equals(upd_g, &ag), 1);
|
|
758
|
+
};
|
|
759
|
+
|
|
760
|
+
assert!(point_equals(&g, &ag), 1);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
#[test]
|
|
764
|
+
fun test_point_add() {
|
|
765
|
+
// fetch a
|
|
766
|
+
let a = std::option::extract(&mut new_point_from_bytes(A_POINT));
|
|
767
|
+
|
|
768
|
+
// fetch b
|
|
769
|
+
let b = std::option::extract(&mut new_point_from_bytes(B_POINT));
|
|
770
|
+
|
|
771
|
+
// fetch expected a + b
|
|
772
|
+
let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT));
|
|
773
|
+
|
|
774
|
+
// compute a*g
|
|
775
|
+
let result = point_add(&a, &b);
|
|
776
|
+
|
|
777
|
+
assert!(!point_equals(&a, &b), 1);
|
|
778
|
+
|
|
779
|
+
// sanity-check the handles
|
|
780
|
+
assert!(a.handle == 0, 1);
|
|
781
|
+
assert!(b.handle == 1, 1);
|
|
782
|
+
assert!(a_plus_b.handle == 2, 1);
|
|
783
|
+
assert!(result.handle == 3, 1);
|
|
784
|
+
|
|
785
|
+
assert!(!point_equals(&a, &result), 1); // make sure input a remains unmodifed
|
|
786
|
+
assert!(!point_equals(&b, &result), 1); // make sure input b remains unmodifed
|
|
787
|
+
assert!(point_equals(&a_plus_b, &result), 1); // make sure output a+b is correct
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
#[test]
|
|
791
|
+
fun test_point_add_assign_0_0() {
|
|
792
|
+
test_point_add_assign_internal(0, 0);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
#[test]
|
|
796
|
+
fun test_point_add_assign_1_0() {
|
|
797
|
+
test_point_add_assign_internal(1, 0);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
#[test]
|
|
801
|
+
fun test_point_add_assign_0_1() {
|
|
802
|
+
test_point_add_assign_internal(0, 1);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
#[test]
|
|
806
|
+
fun test_point_add_assign_3_7() {
|
|
807
|
+
test_point_add_assign_internal(3, 7);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
#[test_only]
|
|
811
|
+
fun test_point_add_assign_internal(before_a_gap: u64, before_b_gap: u64) {
|
|
812
|
+
// create extra RistrettoPoints here, so as to generate different PointStore layouts inside the native Rust implementation
|
|
813
|
+
let c = before_a_gap;
|
|
814
|
+
while (c > 0) {
|
|
815
|
+
let _ignore = std::option::extract(&mut new_point_from_bytes(BASE_POINT));
|
|
816
|
+
|
|
817
|
+
c = c - 1;
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
// fetch a
|
|
821
|
+
let a = std::option::extract(&mut new_point_from_bytes(A_POINT));
|
|
822
|
+
|
|
823
|
+
// create extra RistrettoPoints here, so as to generate different PointStore layouts inside the native Rust implementation
|
|
824
|
+
let c = before_b_gap;
|
|
825
|
+
while (c > 0) {
|
|
826
|
+
let _ignore = std::option::extract(&mut new_point_from_bytes(BASE_POINT));
|
|
827
|
+
|
|
828
|
+
c = c - 1;
|
|
829
|
+
};
|
|
830
|
+
// fetch b
|
|
831
|
+
let b = std::option::extract(&mut new_point_from_bytes(B_POINT));
|
|
832
|
+
|
|
833
|
+
let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT));
|
|
834
|
+
|
|
835
|
+
// sanity-check the handles
|
|
836
|
+
assert!(a.handle == before_a_gap, 1);
|
|
837
|
+
assert!(b.handle == 1 + before_a_gap + before_b_gap, 1);
|
|
838
|
+
assert!(a_plus_b.handle == 2 + before_a_gap + before_b_gap, 1);
|
|
839
|
+
|
|
840
|
+
assert!(!point_equals(&a, &b), 1);
|
|
841
|
+
assert!(!point_equals(&a, &a_plus_b), 1);
|
|
842
|
+
|
|
843
|
+
{
|
|
844
|
+
// NOTE: new_h is just a mutable reference to g
|
|
845
|
+
let upd_a = point_add_assign(&mut a, &b);
|
|
846
|
+
|
|
847
|
+
// in a add_assign the returned &mut RistrettoPoint reference should have the same handle as 'a'
|
|
848
|
+
assert!(upd_a.handle == before_a_gap, 1);
|
|
849
|
+
|
|
850
|
+
assert!(point_equals(upd_a, &a_plus_b), 1);
|
|
851
|
+
};
|
|
852
|
+
|
|
853
|
+
assert!(point_equals(&a, &a_plus_b), 1);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
#[test]
|
|
857
|
+
fun test_point_sub() {
|
|
858
|
+
// fetch a
|
|
859
|
+
let a = std::option::extract(&mut new_point_from_bytes(A_POINT));
|
|
860
|
+
|
|
861
|
+
// fetch b
|
|
862
|
+
let b = std::option::extract(&mut new_point_from_bytes(B_POINT));
|
|
863
|
+
|
|
864
|
+
// fetch expected a + b
|
|
865
|
+
let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT));
|
|
866
|
+
|
|
867
|
+
// compute a*g
|
|
868
|
+
let result = point_sub(&a_plus_b, &b);
|
|
869
|
+
|
|
870
|
+
assert!(!point_equals(&a, &b), 1);
|
|
871
|
+
|
|
872
|
+
// sanity-check the handles
|
|
873
|
+
assert!(a.handle == 0, 1);
|
|
874
|
+
assert!(b.handle == 1, 1);
|
|
875
|
+
assert!(a_plus_b.handle == 2, 1);
|
|
876
|
+
assert!(result.handle == 3, 1);
|
|
877
|
+
|
|
878
|
+
assert!(!point_equals(&a_plus_b, &result), 1); // make sure input a_plus_b remains unmodifed
|
|
879
|
+
assert!(!point_equals(&b, &result), 1); // make sure input b remains unmodifed
|
|
880
|
+
assert!(point_equals(&a, &result), 1); // make sure output 'a+b-b' is correct
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
#[test]
|
|
884
|
+
fun test_point_neg() {
|
|
885
|
+
let a = std::option::extract(&mut new_point_from_bytes(A_POINT));
|
|
886
|
+
|
|
887
|
+
let neg_a = point_neg(&a);
|
|
888
|
+
|
|
889
|
+
assert!(a.handle != neg_a.handle, 1);
|
|
890
|
+
assert!(!point_equals(&a, &neg_a), 1);
|
|
891
|
+
assert!(!point_equals(&point_add(&point_identity(), &a), &neg_a), 1);
|
|
892
|
+
assert!(point_equals(&point_add(&a, &neg_a), &point_identity()), 1);
|
|
893
|
+
|
|
894
|
+
let handle = a.handle;
|
|
895
|
+
let neg_a_ref = point_neg_assign(&mut a);
|
|
896
|
+
assert!(handle == neg_a_ref.handle, 1);
|
|
897
|
+
assert!(point_equals(neg_a_ref, &neg_a), 1);
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
#[test]
|
|
901
|
+
fun test_basepoint_mul() {
|
|
902
|
+
let a = Scalar { data: A_SCALAR };
|
|
903
|
+
let basepoint = basepoint();
|
|
904
|
+
let expected = point_mul(&basepoint, &a);
|
|
905
|
+
assert!(point_equals(&expected, &basepoint_mul(&a)), 1);
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
#[test(fx = @std)]
|
|
909
|
+
fun test_basepoint_double_mul(fx: signer) {
|
|
910
|
+
features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]);
|
|
911
|
+
|
|
912
|
+
let expected = option::extract(&mut new_point_from_bytes(x"be5d615d8b8f996723cdc6e1895b8b6d312cc75d1ffb0259873b99396a38c05a"));
|
|
913
|
+
|
|
914
|
+
let a = Scalar { data: A_SCALAR };
|
|
915
|
+
let a_point = option::extract(&mut new_point_from_bytes(A_POINT));
|
|
916
|
+
let b = Scalar { data: B_SCALAR };
|
|
917
|
+
let actual = basepoint_double_mul(&a, &a_point, &b);
|
|
918
|
+
|
|
919
|
+
assert!(point_equals(&expected, &actual), 1);
|
|
920
|
+
|
|
921
|
+
let expected = double_scalar_mul(&a, &a_point, &b, &basepoint());
|
|
922
|
+
assert!(point_equals(&expected, &actual), 1);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
#[test]
|
|
926
|
+
#[expected_failure]
|
|
927
|
+
fun test_multi_scalar_mul_aborts_empty_scalars() {
|
|
928
|
+
multi_scalar_mul(&vector[ basepoint() ], &vector[]);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
#[test]
|
|
932
|
+
#[expected_failure]
|
|
933
|
+
fun test_multi_scalar_mul_aborts_empty_points() {
|
|
934
|
+
multi_scalar_mul(&vector[ ], &vector[ Scalar { data: A_SCALAR } ]);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
#[test]
|
|
938
|
+
#[expected_failure]
|
|
939
|
+
fun test_multi_scalar_mul_aborts_empty_all() {
|
|
940
|
+
multi_scalar_mul(&vector[ ], &vector[ ]);
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
#[test]
|
|
944
|
+
#[expected_failure]
|
|
945
|
+
fun test_multi_scalar_mul_aborts_different_sizes() {
|
|
946
|
+
multi_scalar_mul(&vector[ basepoint() ], &vector[ Scalar { data: A_SCALAR }, Scalar { data: B_SCALAR } ]);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
#[test]
|
|
950
|
+
fun test_multi_scalar_mul_single() {
|
|
951
|
+
// Test single exp
|
|
952
|
+
let points = vector[
|
|
953
|
+
basepoint(),
|
|
954
|
+
];
|
|
955
|
+
|
|
956
|
+
let scalars = vector[
|
|
957
|
+
Scalar { data: A_SCALAR },
|
|
958
|
+
];
|
|
959
|
+
|
|
960
|
+
let result = multi_scalar_mul(&points, &scalars);
|
|
961
|
+
let expected = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT));
|
|
962
|
+
|
|
963
|
+
assert!(point_equals(&result, &expected), 1);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
#[test]
|
|
967
|
+
fun test_multi_scalar_mul_double() {
|
|
968
|
+
// Test double exp
|
|
969
|
+
let points = vector[
|
|
970
|
+
basepoint(),
|
|
971
|
+
basepoint(),
|
|
972
|
+
];
|
|
973
|
+
|
|
974
|
+
let scalars = vector[
|
|
975
|
+
Scalar { data: A_SCALAR },
|
|
976
|
+
Scalar { data: B_SCALAR },
|
|
977
|
+
];
|
|
978
|
+
|
|
979
|
+
let result = multi_scalar_mul(&points, &scalars);
|
|
980
|
+
let expected = basepoint_double_mul(
|
|
981
|
+
std::vector::borrow(&scalars, 0),
|
|
982
|
+
&basepoint(),
|
|
983
|
+
std::vector::borrow(&scalars, 1));
|
|
984
|
+
|
|
985
|
+
assert!(point_equals(&result, &expected), 1);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
#[test]
|
|
989
|
+
fun test_multi_scalar_mul_many() {
|
|
990
|
+
let scalars = vector[
|
|
991
|
+
new_scalar_from_sha2_512(b"1"),
|
|
992
|
+
new_scalar_from_sha2_512(b"2"),
|
|
993
|
+
new_scalar_from_sha2_512(b"3"),
|
|
994
|
+
new_scalar_from_sha2_512(b"4"),
|
|
995
|
+
new_scalar_from_sha2_512(b"5"),
|
|
996
|
+
];
|
|
997
|
+
|
|
998
|
+
let points = vector[
|
|
999
|
+
new_point_from_sha2_512(b"1"),
|
|
1000
|
+
new_point_from_sha2_512(b"2"),
|
|
1001
|
+
new_point_from_sha2_512(b"3"),
|
|
1002
|
+
new_point_from_sha2_512(b"4"),
|
|
1003
|
+
new_point_from_sha2_512(b"5"),
|
|
1004
|
+
];
|
|
1005
|
+
|
|
1006
|
+
let expected = std::option::extract(&mut new_point_from_bytes(x"c4a98fbe6bd0f315a0c150858aec8508be397443093e955ef982e299c1318928"));
|
|
1007
|
+
let result = multi_scalar_mul(&points, &scalars);
|
|
1008
|
+
|
|
1009
|
+
assert!(point_equals(&expected, &result), 1);
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
#[test]
|
|
1013
|
+
fun test_new_point_from_sha2_512() {
|
|
1014
|
+
let msg = b"To really appreciate architecture, you may even need to commit a murder";
|
|
1015
|
+
let expected = option::extract(&mut new_point_from_bytes(x"baaa91eb43e5e2f12ffc96347e14bc458fdb1772b2232b08977ee61ea9f84e31"));
|
|
1016
|
+
|
|
1017
|
+
assert!(point_equals(&expected, &new_point_from_sha2_512(msg)), 1);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
#[test]
|
|
1021
|
+
fun test_new_point_from_64_uniform_bytes() {
|
|
1022
|
+
let bytes_64 = x"baaa91eb43e5e2f12ffc96347e14bc458fdb1772b2232b08977ee61ea9f84e31e87feda199d72b83de4f5b2d45d34805c57019c6c59c42cb70ee3d19aa996f75";
|
|
1023
|
+
let expected = option::extract(&mut new_point_from_bytes(x"4a8e429f906478654232d7ae180ad60854754944ac67f38e20d8fa79e4b7d71e"));
|
|
1024
|
+
|
|
1025
|
+
let point = option::extract(&mut new_point_from_64_uniform_bytes(bytes_64));
|
|
1026
|
+
assert!(point_equals(&expected, &point), 1);
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
#[test]
|
|
1030
|
+
fun test_scalar_basic_viability() {
|
|
1031
|
+
// Test conversion from u8
|
|
1032
|
+
let two = Scalar { data: TWO_SCALAR };
|
|
1033
|
+
assert!(scalar_equals(&new_scalar_from_u8(2u8), &two), 1);
|
|
1034
|
+
|
|
1035
|
+
// Test conversion from u64
|
|
1036
|
+
assert!(scalar_equals(&new_scalar_from_u64(2u64), &two), 1);
|
|
1037
|
+
|
|
1038
|
+
// Test conversion from u128
|
|
1039
|
+
assert!(scalar_equals(&new_scalar_from_u128(2u128), &two), 1);
|
|
1040
|
+
|
|
1041
|
+
// Test (0 - 1) % order = order - 1
|
|
1042
|
+
assert!(scalar_equals(&scalar_sub(&scalar_zero(), &scalar_one()), &Scalar { data: L_MINUS_ONE }), 1);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
#[test]
|
|
1046
|
+
/// Tests deserializing a Scalar from a sequence of canonical bytes
|
|
1047
|
+
fun test_scalar_from_canonical_bytes() {
|
|
1048
|
+
// Too few bytes
|
|
1049
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(x"00")), 1);
|
|
1050
|
+
|
|
1051
|
+
// 32 zero bytes are canonical
|
|
1052
|
+
assert!(std::option::is_some(&new_scalar_from_bytes(x"0000000000000000000000000000000000000000000000000000000000000000")), 1);
|
|
1053
|
+
|
|
1054
|
+
// Non-canonical because unreduced
|
|
1055
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(x"1010101010101010101010101010101010101010101010101010101010101010")), 1);
|
|
1056
|
+
|
|
1057
|
+
// Canonical because \ell - 1
|
|
1058
|
+
assert!(std::option::is_some(&new_scalar_from_bytes(L_MINUS_ONE)), 1);
|
|
1059
|
+
|
|
1060
|
+
// Non-canonical because \ell
|
|
1061
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(ORDER_ELL)), 1);
|
|
1062
|
+
|
|
1063
|
+
// Non-canonical because \ell+1
|
|
1064
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(L_PLUS_ONE)), 1);
|
|
1065
|
+
|
|
1066
|
+
// Non-canonical because \ell+2
|
|
1067
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(L_PLUS_TWO)), 1);
|
|
1068
|
+
|
|
1069
|
+
// Non-canonical because high bit is set
|
|
1070
|
+
let non_canonical_highbit = vector[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128];
|
|
1071
|
+
let non_canonical_highbit_hex = x"0000000000000000000000000000000000000000000000000000000000000080";
|
|
1072
|
+
assert!(non_canonical_highbit == non_canonical_highbit_hex, 1);
|
|
1073
|
+
assert!(std::option::is_none(&new_scalar_from_bytes(non_canonical_highbit)), 1);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
#[test]
|
|
1077
|
+
fun test_scalar_zero() {
|
|
1078
|
+
// 0 == 0
|
|
1079
|
+
assert!(scalar_is_zero(&scalar_zero()), 1);
|
|
1080
|
+
assert!(scalar_is_zero(&new_scalar_from_u8(0u8)), 1);
|
|
1081
|
+
|
|
1082
|
+
// 0 != 1
|
|
1083
|
+
assert!(scalar_is_zero(&scalar_one()) == false, 1);
|
|
1084
|
+
|
|
1085
|
+
// Pick a random scalar by hashing from some "random" bytes
|
|
1086
|
+
let s = new_scalar_from_sha2_512(x"deadbeef");
|
|
1087
|
+
|
|
1088
|
+
// Technically, there is a negligible probability (i.e., 1/2^\ell) that the hashed s is zero or one
|
|
1089
|
+
assert!(scalar_is_zero(&s) == false, 1);
|
|
1090
|
+
assert!(scalar_is_one(&s) == false, 1);
|
|
1091
|
+
|
|
1092
|
+
// Multiply 0 with a random scalar and make sure you get zero
|
|
1093
|
+
assert!(scalar_is_zero(&scalar_mul(&scalar_zero(), &s)), 1);
|
|
1094
|
+
assert!(scalar_is_zero(&scalar_mul(&s, &scalar_zero())), 1);
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
#[test]
|
|
1098
|
+
fun test_scalar_one() {
|
|
1099
|
+
// 1 == 1
|
|
1100
|
+
assert!(scalar_is_one(&scalar_one()), 1);
|
|
1101
|
+
assert!(scalar_is_one(&new_scalar_from_u8(1u8)), 1);
|
|
1102
|
+
|
|
1103
|
+
// 1 != 0
|
|
1104
|
+
assert!(scalar_is_one(&scalar_zero()) == false, 1);
|
|
1105
|
+
|
|
1106
|
+
// Pick a random scalar by hashing from some "random" bytes
|
|
1107
|
+
let s = new_scalar_from_sha2_512(x"deadbeef");
|
|
1108
|
+
let inv = scalar_invert(&s);
|
|
1109
|
+
|
|
1110
|
+
// Technically, there is a negligible probability (i.e., 1/2^\ell) that s was zero and the call above returned None
|
|
1111
|
+
assert!(std::option::is_some(&inv), 1);
|
|
1112
|
+
|
|
1113
|
+
let inv = std::option::extract(&mut inv);
|
|
1114
|
+
|
|
1115
|
+
// Multiply s with s^{-1} and make sure you get one
|
|
1116
|
+
assert!(scalar_is_one(&scalar_mul(&s, &inv)), 1);
|
|
1117
|
+
assert!(scalar_is_one(&scalar_mul(&inv, &s)), 1);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
#[test]
|
|
1121
|
+
fun test_scalar_from_sha2_512() {
|
|
1122
|
+
// Test a specific message hashes correctly to the field
|
|
1123
|
+
let str: vector<u8> = vector[];
|
|
1124
|
+
std::vector::append(&mut str, b"To really appreciate architecture, you may even need to commit a murder.");
|
|
1125
|
+
std::vector::append(&mut str, b"While the programs used for The Manhattan Transcripts are of the most extreme");
|
|
1126
|
+
std::vector::append(&mut str, b"nature, they also parallel the most common formula plot: the archetype of");
|
|
1127
|
+
std::vector::append(&mut str, b"murder. Other phantasms were occasionally used to underline the fact that");
|
|
1128
|
+
std::vector::append(&mut str, b"perhaps all architecture, rather than being about functional standards, is");
|
|
1129
|
+
std::vector::append(&mut str, b"about love and death.");
|
|
1130
|
+
|
|
1131
|
+
let s = new_scalar_from_sha2_512(str);
|
|
1132
|
+
|
|
1133
|
+
let expected: vector<u8> = vector[
|
|
1134
|
+
21, 88, 208, 252, 63, 122, 210, 152,
|
|
1135
|
+
154, 38, 15, 23, 16, 167, 80, 150,
|
|
1136
|
+
192, 221, 77, 226, 62, 25, 224, 148,
|
|
1137
|
+
239, 48, 176, 10, 185, 69, 168, 11
|
|
1138
|
+
];
|
|
1139
|
+
|
|
1140
|
+
assert!(s.data == expected, 1)
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
#[test]
|
|
1144
|
+
fun test_scalar_invert() {
|
|
1145
|
+
// Cannot invert zero
|
|
1146
|
+
assert!(std::option::is_none(&scalar_invert(&scalar_zero())), 1);
|
|
1147
|
+
|
|
1148
|
+
// One's inverse is one
|
|
1149
|
+
let one = scalar_invert(&scalar_one());
|
|
1150
|
+
assert!(std::option::is_some(&one), 1);
|
|
1151
|
+
|
|
1152
|
+
let one = std::option::extract(&mut one);
|
|
1153
|
+
assert!(scalar_is_one(&one), 1);
|
|
1154
|
+
|
|
1155
|
+
// Test a random point X's inverse is correct
|
|
1156
|
+
let x = Scalar { data: X_SCALAR };
|
|
1157
|
+
let xinv = scalar_invert(&x);
|
|
1158
|
+
assert!(std::option::is_some(&xinv), 1);
|
|
1159
|
+
|
|
1160
|
+
let xinv = std::option::extract(&mut xinv);
|
|
1161
|
+
let xinv_expected = Scalar { data: X_INV_SCALAR };
|
|
1162
|
+
|
|
1163
|
+
assert!(scalar_equals(&xinv, &xinv_expected), 1)
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
#[test]
|
|
1167
|
+
fun test_scalar_neg() {
|
|
1168
|
+
// -(-X) == X
|
|
1169
|
+
let x = Scalar { data: X_SCALAR };
|
|
1170
|
+
|
|
1171
|
+
let x_neg = scalar_neg(&x);
|
|
1172
|
+
let x_neg_neg = scalar_neg(&x_neg);
|
|
1173
|
+
|
|
1174
|
+
assert!(scalar_equals(&x, &x_neg_neg), 1);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
#[test]
|
|
1178
|
+
fun test_scalar_neg_assign() {
|
|
1179
|
+
let x = Scalar { data: X_SCALAR };
|
|
1180
|
+
let x_copy = x;
|
|
1181
|
+
|
|
1182
|
+
scalar_neg_assign(&mut x);
|
|
1183
|
+
assert!(!scalar_equals(&x, &x_copy), 1);
|
|
1184
|
+
scalar_neg_assign(&mut x);
|
|
1185
|
+
assert!(scalar_equals(&x, &x_copy), 1);
|
|
1186
|
+
|
|
1187
|
+
assert!(scalar_equals(scalar_neg_assign(scalar_neg_assign(&mut x)), &x_copy), 1);
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
#[test]
|
|
1191
|
+
fun test_scalar_mul() {
|
|
1192
|
+
// X * 1 == X
|
|
1193
|
+
let x = Scalar { data: X_SCALAR };
|
|
1194
|
+
assert!(scalar_equals(&x, &scalar_mul(&x, &scalar_one())), 1);
|
|
1195
|
+
|
|
1196
|
+
// Test multiplication of two random scalars
|
|
1197
|
+
let y = Scalar { data: Y_SCALAR };
|
|
1198
|
+
let x_times_y = Scalar { data: X_TIMES_Y_SCALAR };
|
|
1199
|
+
assert!(scalar_equals(&scalar_mul(&x, &y), &x_times_y), 1);
|
|
1200
|
+
|
|
1201
|
+
// A * B
|
|
1202
|
+
assert!(scalar_equals(&scalar_mul(&Scalar { data: A_SCALAR }, &Scalar { data: B_SCALAR }), &Scalar { data: A_TIMES_B_SCALAR }), 1);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
#[test]
|
|
1206
|
+
fun test_scalar_mul_assign() {
|
|
1207
|
+
let x = Scalar { data: X_SCALAR };
|
|
1208
|
+
let y = Scalar { data: Y_SCALAR };
|
|
1209
|
+
let x_times_y = Scalar { data: X_TIMES_Y_SCALAR };
|
|
1210
|
+
|
|
1211
|
+
scalar_mul_assign(&mut x, &y);
|
|
1212
|
+
|
|
1213
|
+
assert!(scalar_equals(&x, &x_times_y), 1);
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
#[test]
|
|
1217
|
+
fun test_scalar_add() {
|
|
1218
|
+
// Addition reduces: \ell-1 + 1 = \ell = 0
|
|
1219
|
+
let ell_minus_one = Scalar { data: L_MINUS_ONE };
|
|
1220
|
+
assert!(scalar_is_zero(&scalar_add(&ell_minus_one, &scalar_one())), 1);
|
|
1221
|
+
|
|
1222
|
+
// 1 + 1 = 2
|
|
1223
|
+
let two = Scalar { data: TWO_SCALAR };
|
|
1224
|
+
assert!(scalar_equals(&scalar_add(&scalar_one(), &scalar_one()), &two), 1);
|
|
1225
|
+
|
|
1226
|
+
// A + B
|
|
1227
|
+
assert!(scalar_equals(&scalar_add(&Scalar { data: A_SCALAR }, &Scalar { data: B_SCALAR }), &Scalar { data: A_PLUS_B_SCALAR }), 1);
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
#[test]
|
|
1231
|
+
fun test_scalar_sub() {
|
|
1232
|
+
// Subtraction reduces: 0 - 1 = \ell - 1
|
|
1233
|
+
let ell_minus_one = Scalar { data: L_MINUS_ONE };
|
|
1234
|
+
assert!(scalar_equals(&scalar_sub(&scalar_zero(), &scalar_one()), &ell_minus_one), 1);
|
|
1235
|
+
|
|
1236
|
+
// 2 - 1 = 1
|
|
1237
|
+
let two = Scalar { data: TWO_SCALAR };
|
|
1238
|
+
assert!(scalar_is_one(&scalar_sub(&two, &scalar_one())), 1);
|
|
1239
|
+
|
|
1240
|
+
// 1 - 2 = -1 = \ell - 1
|
|
1241
|
+
let ell_minus_one = Scalar { data: L_MINUS_ONE };
|
|
1242
|
+
assert!(scalar_equals(&scalar_sub(&scalar_one(), &two), &ell_minus_one), 1);
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
#[test]
|
|
1246
|
+
fun test_scalar_reduced_from_32_bytes() {
|
|
1247
|
+
// \ell + 2 = 0 + 2 = 2 (modulo \ell)
|
|
1248
|
+
let s = std::option::extract(&mut new_scalar_reduced_from_32_bytes(L_PLUS_TWO));
|
|
1249
|
+
let two = Scalar { data: TWO_SCALAR };
|
|
1250
|
+
assert!(scalar_equals(&s, &two), 1);
|
|
1251
|
+
|
|
1252
|
+
// Reducing the all 1's bit vector yields $(2^256 - 1) \mod \ell$
|
|
1253
|
+
let biggest = std::option::extract(&mut new_scalar_reduced_from_32_bytes(NON_CANONICAL_ALL_ONES));
|
|
1254
|
+
assert!(scalar_equals(&biggest, &Scalar { data: REDUCED_2_256_MINUS_1_SCALAR }), 1);
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
#[test]
|
|
1258
|
+
fun test_scalar_from_64_uniform_bytes() {
|
|
1259
|
+
// Test X + 2^256 * X reduces correctly
|
|
1260
|
+
let x_plus_2_to_256_times_x: vector<u8> = vector[];
|
|
1261
|
+
|
|
1262
|
+
std::vector::append(&mut x_plus_2_to_256_times_x, X_SCALAR);
|
|
1263
|
+
std::vector::append(&mut x_plus_2_to_256_times_x, X_SCALAR);
|
|
1264
|
+
|
|
1265
|
+
let reduced = std::option::extract(&mut new_scalar_uniform_from_64_bytes(x_plus_2_to_256_times_x));
|
|
1266
|
+
let expected = Scalar { data: REDUCED_X_PLUS_2_TO_256_TIMES_X_SCALAR };
|
|
1267
|
+
assert!(scalar_equals(&reduced, &expected), 1)
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
#[test]
|
|
1271
|
+
fun test_scalar_to_bytes() {
|
|
1272
|
+
// zero is canonical
|
|
1273
|
+
assert!(scalar_is_canonical_internal(scalar_zero().data), 1);
|
|
1274
|
+
|
|
1275
|
+
// ...but if we maul it and set the high bit to 1, it is non-canonical
|
|
1276
|
+
let non_can = scalar_zero();
|
|
1277
|
+
let last_byte = std::vector::borrow_mut(&mut non_can.data, 31);
|
|
1278
|
+
*last_byte = 128;
|
|
1279
|
+
assert!(!scalar_is_canonical_internal(non_can.data), 1);
|
|
1280
|
+
|
|
1281
|
+
// This test makes sure scalar_to_bytes does not return a mutable reference to a scalar's bits
|
|
1282
|
+
let non_can = scalar_zero();
|
|
1283
|
+
let bytes = scalar_to_bytes(&scalar_zero());
|
|
1284
|
+
let last_byte = std::vector::borrow_mut(&mut bytes, 31);
|
|
1285
|
+
*last_byte = 128;
|
|
1286
|
+
assert!(scalar_is_canonical_internal(non_can.data), 1);
|
|
1287
|
+
assert!(scalar_equals(&non_can, &scalar_zero()), 1);
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
#[test]
|
|
1291
|
+
fun test_num_points_within_limit() {
|
|
1292
|
+
let limit = 10000;
|
|
1293
|
+
let i = 0;
|
|
1294
|
+
while (i < limit) {
|
|
1295
|
+
point_identity();
|
|
1296
|
+
i = i + 1;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
#[test]
|
|
1301
|
+
#[expected_failure(abort_code=0x090004, location=Self)]
|
|
1302
|
+
fun test_num_points_limit_exceeded() {
|
|
1303
|
+
let limit = 10001;
|
|
1304
|
+
let i = 0;
|
|
1305
|
+
while (i < limit) {
|
|
1306
|
+
point_identity();
|
|
1307
|
+
i = i + 1;
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
}
|