import TypedEnum from '../generic/typed-enum.js';
import '../generic/typed-bytes.js';
import '../generic/typed-string.js';
import '../generic/typed-array.js';
import '../generic/typed-tuple.js';
import '../generic/typed-null.js';
import '../../utils/types/array.js';
import 'crypto';
import 'bs58';
import 'multiformats/bases/base58';
import 'varint';
import '../../utils/encoding/ss-58.js';
import '../generic/typed-number.js';
import '../generic/typed-set.js';
import '../generic/typed-map.js';
import '../generic/typed-struct.js';
import 'uuid';
import 'js-sha256';
import PublicKeyX25519Value from './public-key-x25519-value.js';
import PublicKeyEd25519Value from './public-key-ed25519-value.js';
import PublicKeySecp256k1Value from './public-key-secp256k1-value.js';
import PublicKeySr25519Value from './public-key-sr25519-value.js';
import '../../utils/types/iterable.js';
import '../../utils/types/object.js';
import '../../utils/interfaces.js';
import '../../utils/assert.js';
import '../../utils/error.js';
import '../../utils/inheritance.js';
import '../../utils/types/set.js';
import '../generic/with-base.js';
import '../../utils/types/bytes.js';
import '../../utils/types/string.js';
import '../generic/with-catch-null.js';
import '../generic/with-eq.js';
import '../generic/any-of.js';
import '../generic/with-from.js';
import '../generic/with-from-json-bytes.js';
import 'blake2b';
import '../generic/create-placeholder.js';
import '../generic/sized.js';
import '../../utils/types/number.js';
import '../../vc/crypto/constants.js';

/**
 * Class representing either Ed25519 or Secp256k1 or Sr25519 or X25519 PublicKey
 * @class
 * @extends {TypedEnum}
 */
class PublicKey extends TypedEnum {
  static get VerKeyType() {
    return this.Class.VerKeyType;
  }
}
/**
 * Class representing Ed25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeyEd25519 extends PublicKey {
  static Class = PublicKeyEd25519Value;
}
/**
 * Class representing Secp256k1 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeySecp256k1 extends PublicKey {
  static Class = PublicKeySecp256k1Value;
}
/**
 * Class representing Sr25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeySr25519 extends PublicKey {
  static Class = PublicKeySr25519Value;
}
/**
 * Class representing X25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeyX25519 extends PublicKey {
  static Class = PublicKeyX25519Value;
}

PublicKey.bindVariants(
  PublicKeyEd25519,
  PublicKeySecp256k1,
  PublicKeySr25519,
  PublicKeyX25519,
);

export { PublicKey, PublicKeyEd25519, PublicKeySecp256k1, PublicKeySr25519, PublicKeyX25519 };
//# sourceMappingURL=public-key.js.map
