docs: def generate_key(
      ctx, slot, public_key_output, management_key, pin, algorithm,
          format, pin_policy, touch_policy):
      """
      Generate an asymmetric key pair.
  
      The private key is generated on the YubiKey, and written to one of the
      slots.
  
      \b
      SLOT        PIV slot where private key should be stored.
      PUBLIC-KEY  File containing the generated public key. Use '-' to use stdout.
      """
  
      dev = ctx.obj['dev']
      controller = ctx.obj['controller']
  
      _ensure_authenticated(ctx, controller, pin, management_key)
  
      algorithm_id = ALGO.from_string(algorithm)
  
      if pin_policy:
          pin_policy = PIN_POLICY.from_string(pin_policy)
      if touch_policy:
          touch_policy = TOUCH_POLICY.from_string(touch_policy)
  
      _check_pin_policy(ctx, dev, controller, pin_policy)
      _check_touch_policy(ctx, controller, touch_policy)
  
      try:
          public_key = controller.generate_key(
              slot,
              algorithm_id,
              pin_policy,
              touch_policy)
      except UnsupportedAlgorithm:
          ctx.fail('Algorithm {} is not supported by this '
                   'YubiKey.'.format(algorithm))
  
      key_encoding = format
      public_key_output.write(public_key.public_bytes(
              encoding=key_encoding,
              format=serialization.PublicFormat.SubjectPublicKeyInfo))