  constructor(protocol, username, service, method, pkInfo, cb) {
    super(protocol, username, service, method, cb);

    this.key = { algo: pkInfo.keyAlgo, data: pkInfo.key };
    this.signature = pkInfo.signature;
    let sigAlgo;
    if (this.signature) {
      // TODO: move key type checking logic to ssh2-streams
      switch (pkInfo.keyAlgo) {
        case 'ssh-rsa':
        case 'ssh-dss':
          sigAlgo = 'sha1';
          break;
        case 'ssh-ed25519':
          sigAlgo = null;
          break;
        case 'ecdsa-sha2-nistp256':
          sigAlgo = 'sha256';
          break;
        case 'ecdsa-sha2-nistp384':
          sigAlgo = 'sha384';
          break;
        case 'ecdsa-sha2-nistp521':
          sigAlgo = 'sha512';
          break;
      }
    }
    this.sigAlgo = sigAlgo;
    this.blob = pkInfo.blob;
  }
The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.