code: def sign_plaintext(client_secret, resource_owner_secret):
      
  
      # The "oauth_signature" protocol parameter is set to the concatenated
      # value of:
  
      # 1.  The client shared-secret, after being encoded (`Section 3.6`_).
      #
      # .. _`Section 3.6`: https://tools.ietf.org/html/rfc5849#section-3.6
      signature = utils.escape(client_secret or '')
  
      # 2.  An "&" character (ASCII code 38), which MUST be included even
      #     when either secret is empty.
      signature += '&'
  
      # 3.  The token shared-secret, after being encoded (`Section 3.6`_).
      #
      # .. _`Section 3.6`: https://tools.ietf.org/html/rfc5849#section-3.6
      signature += utils.escape(resource_owner_secret or '')
  
      return signature
docs: Sign a request using plaintext.
  
      Per `section 3.4.4`_ of the spec.
  
      The "PLAINTEXT" method does not employ a signature algorithm.  It
      MUST be used with a transport-layer mechanism such as TLS or SSL (or
      sent over a secure channel with equivalent protections).  It does not
      utilize the signature base string or the "oauth_timestamp" and
      "oauth_nonce" parameters.
  
      .. _`section 3.4.4`: https://tools.ietf.org/html/rfc5849#section-3.4.4