Source: utils/vc/crypto/Ed25519Signature2020.js

import { Ed255192020SigName, Ed255192020VerKeyName } from './constants';
import Ed25519VerificationKey2020 from './Ed25519VerificationKey2020';
import CustomLinkedDataSignature from './common/CustomLinkedDataSignature';

const SUITE_CONTEXT_URL = 'https://w3id.org/security/suites/ed25519-2020/v1';

export default class Ed25519Signature2020 extends CustomLinkedDataSignature {
  /**
   * Creates a new Ed25519Signature2020 instance
   * @constructor
   * @param {object} config - Configuration options
   */
  constructor({
    keypair, verificationMethod, verifier, signer,
  } = {}) {
    super({
      type: Ed255192020SigName,
      LDKeyClass: Ed25519VerificationKey2020,
      contextUrl: SUITE_CONTEXT_URL,
      alg: 'EdDSA',
      signer: signer || Ed25519Signature2020.signerFactory(keypair, verificationMethod),
      verifier,
    });
    this.requiredKeyType = Ed255192020VerKeyName;
  }

  /**
   * Generate object with `sign` method
   * @param keypair
   * @param verificationMethod
   * @returns {object}
   */
  static signerFactory(keypair, verificationMethod) {
    return {
      id: verificationMethod,
      async sign({ data }) {
        return keypair.sign(data);
      },
    };
  }
}