docs: def handle_key_rotate(self, now):
          '''
          Rotate the AES key rotation
          '''
          to_rotate = False
          dfn = os.path.join(self.opts['cachedir'], '.dfn')
          try:
              stats = os.stat(dfn)
              # Basic Windows permissions don't distinguish between
              # user/group/all. Check for read-only state instead.
              if salt.utils.platform.is_windows() and not os.access(dfn, os.W_OK):
                  to_rotate = True
                  # Cannot delete read-only files on Windows.
                  os.chmod(dfn, stat.S_IRUSR | stat.S_IWUSR)
              elif stats.st_mode == 0o100400:
                  to_rotate = True
              else:
                  log.error('Found dropfile with incorrect permissions, ignoring...')
              os.remove(dfn)
          except os.error:
              pass
  
          if self.opts.get('publish_session'):
              if now - self.rotate >= self.opts['publish_session']:
                  to_rotate = True
  
          if to_rotate:
              log.info('Rotating master AES key')
              for secret_key, secret_map in six.iteritems(SMaster.secrets):
                  # should be unnecessary-- since no one else should be modifying
                  with secret_map['secret'].get_lock():
                      secret_map['secret'].value = salt.utils.stringutils.to_bytes(secret_map['reload']())
                  self.event.fire_event({'rotate_{0}_key'.format(secret_key): True}, tag='key')
              self.rotate = now
              if self.opts.get('ping_on_rotate'):
                  # Ping all minions to get them to pick up the new key
                  log.debug('Pinging all connected minions '
                            'due to key rotation')
                  salt.utils.master.ping_all_connected_minions(self.opts)