{"version":3,"sources":["../../src/transactions/authenticator/account.ts"],"sourcesContent":["// Copyright © Endless\n// Copyright © Aptos Foundation\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { Serializer, Deserializer, Serializable } from \"../../bcs\";\nimport { AccountAddress } from \"../../core\";\nimport { AnyPublicKey, AnySignature } from \"../../core/crypto\";\nimport { Bls12381PublicKey, Bls12381Signature } from \"../../core/crypto/bls12381\";\nimport { Ed25519PublicKey, Ed25519Signature } from \"../../core/crypto/ed25519\";\nimport { MultiAuthKeyPublicKey, MultiAuthKeySignature } from \"../../core/crypto/multiAuthKey\";\nimport { MultiEd25519PublicKey, MultiEd25519Signature } from \"../../core/crypto/multiEd25519\";\nimport { MultiKey, MultiKeySignature } from \"../../core/crypto/multiKey\";\nimport { AccountAuthenticatorVariant } from \"../../types\";\n\nexport abstract class AccountAuthenticator extends Serializable {\n  abstract serialize(serializer: Serializer): void;\n\n  static deserialize(deserializer: Deserializer): AccountAuthenticator {\n    const index = deserializer.deserializeUleb128AsU32();\n    switch (index) {\n      case AccountAuthenticatorVariant.Ed25519:\n        return AccountAuthenticatorEd25519.load(deserializer);\n      case AccountAuthenticatorVariant.MultiEd25519:\n        return AccountAuthenticatorMultiEd25519.load(deserializer);\n      case AccountAuthenticatorVariant.SingleKey:\n        return AccountAuthenticatorSingleKey.load(deserializer);\n      case AccountAuthenticatorVariant.MultiKey:\n        return AccountAuthenticatorMultiKey.load(deserializer);\n      case AccountAuthenticatorVariant.MultiAuthKey:\n        return AccountAuthenticatorMultiAuthKey.load(deserializer);\n      case AccountAuthenticatorVariant.Bls12381:\n        return AccountAuthenticatorBls12381.load(deserializer);\n      case AccountAuthenticatorVariant.Mock:\n        return AccountAuthenticatorMock.load(deserializer);\n      default:\n        throw new Error(`Unknown variant index for AccountAuthenticator: ${index}`);\n    }\n  }\n\n  isEd25519(): this is AccountAuthenticatorEd25519 {\n    return this instanceof AccountAuthenticatorEd25519;\n  }\n\n  isMultiEd25519(): this is AccountAuthenticatorMultiEd25519 {\n    return this instanceof AccountAuthenticatorMultiEd25519;\n  }\n\n  isSingleKey(): this is AccountAuthenticatorSingleKey {\n    return this instanceof AccountAuthenticatorSingleKey;\n  }\n\n  isMultiKey(): this is AccountAuthenticatorMultiKey {\n    return this instanceof AccountAuthenticatorMultiKey;\n  }\n\n  isMultAuthKey(): this is AccountAuthenticatorMultiAuthKey {\n    return this instanceof AccountAuthenticatorMultiAuthKey;\n  }\n}\n\n/**\n * Transaction authenticator Ed25519 for a multi signer transaction\n *\n * @param public_key Account's Ed25519 public key.\n * @param signature Account's Ed25519 signature\n *\n */\nexport class AccountAuthenticatorEd25519 extends AccountAuthenticator {\n  public readonly public_key: Ed25519PublicKey;\n\n  public readonly signature: Ed25519Signature;\n\n  constructor(public_key: Ed25519PublicKey, signature: Ed25519Signature) {\n    super();\n    this.public_key = public_key;\n    this.signature = signature;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.Ed25519);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorEd25519 {\n    const public_key = Ed25519PublicKey.deserialize(deserializer);\n    const signature = Ed25519Signature.deserialize(deserializer);\n    return new AccountAuthenticatorEd25519(public_key, signature);\n  }\n}\n\n/**\n * Transaction authenticator Multi Ed25519 for a multi signers transaction\n *\n * @param public_key Account's MultiEd25519 public key.\n * @param signature Account's MultiEd25519 signature\n *\n */\nexport class AccountAuthenticatorMultiEd25519 extends AccountAuthenticator {\n  public readonly public_key: MultiEd25519PublicKey;\n\n  public readonly signature: MultiEd25519Signature;\n\n  constructor(public_key: MultiEd25519PublicKey, signature: MultiEd25519Signature) {\n    super();\n    this.public_key = public_key;\n    this.signature = signature;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.MultiEd25519);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorMultiEd25519 {\n    const public_key = MultiEd25519PublicKey.deserialize(deserializer);\n    const signature = MultiEd25519Signature.deserialize(deserializer);\n    return new AccountAuthenticatorMultiEd25519(public_key, signature);\n  }\n}\n\n/**\n * AccountAuthenticatorSingleKey for a single signer\n *\n * @param public_key AnyPublicKey\n * @param signature AnySignature\n *\n */\nexport class AccountAuthenticatorSingleKey extends AccountAuthenticator {\n  public readonly public_key: AnyPublicKey;\n\n  public readonly signature: AnySignature;\n\n  constructor(public_key: AnyPublicKey, signature: AnySignature) {\n    super();\n    this.public_key = public_key;\n    this.signature = signature;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.SingleKey);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorSingleKey {\n    const public_key = AnyPublicKey.deserialize(deserializer);\n    const signature = AnySignature.deserialize(deserializer);\n    return new AccountAuthenticatorSingleKey(public_key, signature);\n  }\n}\n\n/**\n * AccountAuthenticatorMultiKey for a multi signer\n *\n * @param public_keys MultiKey\n * @param signatures Signature\n *\n */\nexport class AccountAuthenticatorMultiKey extends AccountAuthenticator {\n  public readonly public_keys: MultiKey;\n\n  public readonly signatures: MultiKeySignature;\n\n  constructor(public_keys: MultiKey, signatures: MultiKeySignature) {\n    super();\n    this.public_keys = public_keys;\n    this.signatures = signatures;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.MultiKey);\n    this.public_keys.serialize(serializer);\n    this.signatures.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorMultiKey {\n    const public_keys = MultiKey.deserialize(deserializer);\n    const signatures = MultiKeySignature.deserialize(deserializer);\n    return new AccountAuthenticatorMultiKey(public_keys, signatures);\n  }\n}\n\nexport class AccountAuthenticatorMultiAuthKey extends AccountAuthenticator {\n  public readonly public_key: MultiAuthKeyPublicKey;\n\n  public readonly signature: MultiAuthKeySignature;\n\n  constructor(public_key: MultiAuthKeyPublicKey, signature: MultiAuthKeySignature) {\n    super();\n    this.public_key = public_key;\n    this.signature = signature;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.MultiAuthKey);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorMultiAuthKey {\n    const public_key = MultiAuthKeyPublicKey.deserialize(deserializer);\n    const signature = MultiAuthKeySignature.deserialize(deserializer);\n    return new AccountAuthenticatorMultiAuthKey(public_key, signature);\n  }\n}\n\nexport class AccountAuthenticatorBls12381 extends AccountAuthenticator {\n  public readonly public_key: Bls12381PublicKey;\n\n  public readonly signature: Bls12381Signature;\n\n  constructor(public_key: Bls12381PublicKey, signature: Bls12381Signature) {\n    super();\n    this.public_key = public_key;\n    this.signature = signature;\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.Bls12381);\n    this.public_key.serialize(serializer);\n    this.signature.serialize(serializer);\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorBls12381 {\n    const public_key = Bls12381PublicKey.deserialize(deserializer);\n    const signature = Bls12381Signature.deserialize(deserializer);\n    return new AccountAuthenticatorBls12381(public_key, signature);\n  }\n}\n\nexport class AccountAuthenticatorMock extends AccountAuthenticator {\n  public readonly authenticator: AccountAddress;\n\n  constructor(authenticator: AccountAddress) {\n    super();\n    this.authenticator = authenticator\n  }\n\n  serialize(serializer: Serializer): void {\n    serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.Mock);\n    this.authenticator.serialize(serializer)\n  }\n\n  static load(deserializer: Deserializer): AccountAuthenticatorMock {\n    const authenticator = AccountAddress.deserialize(deserializer);\n    return new AccountAuthenticatorMock(authenticator);\n  }\n}"],"mappings":"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","names":["AccountAuthenticator","Serializable","deserializer","index","AccountAuthenticatorEd25519","AccountAuthenticatorMultiEd25519","AccountAuthenticatorSingleKey","AccountAuthenticatorMultiKey","AccountAuthenticatorMultiAuthKey","AccountAuthenticatorBls12381","AccountAuthenticatorMock","_AccountAuthenticatorEd25519","public_key","signature","serializer","Ed25519PublicKey","Ed25519Signature","_AccountAuthenticatorMultiEd25519","MultiEd25519PublicKey","MultiEd25519Signature","_AccountAuthenticatorSingleKey","AnyPublicKey","AnySignature","_AccountAuthenticatorMultiKey","public_keys","signatures","MultiKey","MultiKeySignature","_AccountAuthenticatorMultiAuthKey","MultiAuthKeyPublicKey","MultiAuthKeySignature","_AccountAuthenticatorBls12381","Bls12381PublicKey","Bls12381Signature","_AccountAuthenticatorMock","authenticator","AccountAddress"]}