code: def _compute_signature(self, body):
          
  
          timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ")
          nonce = randint(0, 2**53)
  
          # Compute signature: HMAC[SHA256]_{secret} (key | timestamp | seq | nonce | body) => signature
          hm = hmac.new(self.secret, None, hashlib.sha256)
          hm.update(self.key)
          hm.update(timestamp)
          hm.update(str(self.sequence))
          hm.update(str(nonce))
          hm.update(body)
          signature = base64.urlsafe_b64encode(hm.digest())
  
          return signature, nonce, timestamp
docs: Computes the signature.
  
          Described at:
          http://crossbar.io/docs/HTTP-Bridge-Services-Caller/
  
          Reference code is at:
          https://github.com/crossbario/crossbar/blob/master/crossbar/adapter/rest/common.py
  
          :return: (signature, none, timestamp)