'use strict';

var types_generic_typedEnum = require('../generic/typed-enum.cjs');
require('../generic/typed-bytes.cjs');
require('../generic/typed-string.cjs');
require('../generic/typed-array.cjs');
require('../generic/typed-tuple.cjs');
require('../generic/typed-null.cjs');
require('../../utils/types/array.cjs');
require('crypto');
require('bs58');
require('multiformats/bases/base58');
require('varint');
require('../../utils/encoding/ss-58.cjs');
require('../generic/typed-number.cjs');
require('../generic/typed-set.cjs');
require('../generic/typed-map.cjs');
require('../generic/typed-struct.cjs');
require('uuid');
require('js-sha256');
var types_publicKeys_publicKeyX25519Value = require('./public-key-x25519-value.cjs');
var types_publicKeys_publicKeyEd25519Value = require('./public-key-ed25519-value.cjs');
var types_publicKeys_publicKeySecp256k1Value = require('./public-key-secp256k1-value.cjs');
var types_publicKeys_publicKeySr25519Value = require('./public-key-sr25519-value.cjs');
require('../../utils/types/iterable.cjs');
require('../../utils/types/object.cjs');
require('../../utils/interfaces.cjs');
require('../../utils/assert.cjs');
require('../../utils/error.cjs');
require('../../utils/inheritance.cjs');
require('../../utils/types/set.cjs');
require('../generic/with-base.cjs');
require('../../utils/types/bytes.cjs');
require('../../utils/types/string.cjs');
require('../generic/with-catch-null.cjs');
require('../generic/with-eq.cjs');
require('../generic/any-of.cjs');
require('../generic/with-from.cjs');
require('../generic/with-from-json-bytes.cjs');
require('blake2b');
require('../generic/create-placeholder.cjs');
require('../generic/sized.cjs');
require('../../utils/types/number.cjs');
require('../../vc/crypto/constants.cjs');

/**
 * Class representing either Ed25519 or Secp256k1 or Sr25519 or X25519 PublicKey
 * @class
 * @extends {TypedEnum}
 */
class PublicKey extends types_generic_typedEnum {
  static get VerKeyType() {
    return this.Class.VerKeyType;
  }
}
/**
 * Class representing Ed25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeyEd25519 extends PublicKey {
  static Class = types_publicKeys_publicKeyEd25519Value;
}
/**
 * Class representing Secp256k1 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeySecp256k1 extends PublicKey {
  static Class = types_publicKeys_publicKeySecp256k1Value;
}
/**
 * Class representing Sr25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeySr25519 extends PublicKey {
  static Class = types_publicKeys_publicKeySr25519Value;
}
/**
 * Class representing X25519 PublicKey
 * @class
 * @extends {PublicKey}
 */
class PublicKeyX25519 extends PublicKey {
  static Class = types_publicKeys_publicKeyX25519Value;
}

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

exports.PublicKey = PublicKey;
exports.PublicKeyEd25519 = PublicKeyEd25519;
exports.PublicKeySecp256k1 = PublicKeySecp256k1;
exports.PublicKeySr25519 = PublicKeySr25519;
exports.PublicKeyX25519 = PublicKeyX25519;
//# sourceMappingURL=public-key.cjs.map
