docs: def get_public_key(key_info, ctx):
          """
          Get the public key if its defined in X509Certificate node. Otherwise,
          take self.public_key element
          :param sign: Signature node
          :type sign: lxml.etree.Element
          :return: Public key to use
          """
          x509_certificate = key_info.find(
              'ds:KeyInfo/ds:X509Data/ds:X509Certificate',
              namespaces={'ds': ns.DSigNs}
          )
          if x509_certificate is not None:
              return load_der_x509_certificate(
                  base64.b64decode(x509_certificate.text),
                  default_backend()
              ).public_key()
          if ctx.public_key is not None:
              return ctx.public_key
          if isinstance(ctx.private_key, (str, bytes)):
              return ctx.private_key
          return ctx.private_key.public_key()