code: def _m2crypto_sign(message, ssldir=None, certname=None, **config):
      
      if ssldir is None or certname is None:
          error = "You must set the ssldir and certname keyword arguments."
          raise ValueError(error)
  
      message['crypto'] = 'x509'
  
      certificate = M2Crypto.X509.load_cert(
          "%s/%s.crt" % (ssldir, certname)).as_pem()
      # Opening this file requires elevated privileges in stg/prod.
      rsa_private = M2Crypto.RSA.load_key(
          "%s/%s.key" % (ssldir, certname))
  
      digest = M2Crypto.EVP.MessageDigest('sha1')
      digest.update(fedmsg.encoding.dumps(message))
  
      signature = rsa_private.sign(digest.digest())
  
      # Return a new dict containing the pairs in the original message as well
      # as the new authn fields.
      return dict(message.items() + [
          ('signature', signature.encode('base64').decode('ascii')),
          ('certificate', certificate.encode('base64').decode('ascii')),
      ])
docs: Insert two new fields into the message dict and return it.
  
      Those fields are:
  
          - 'signature' - the computed RSA message digest of the JSON repr.
          - 'certificate' - the base64 X509 certificate of the sending host.