code: def checkvalid(s, m, pk):
      
      if len(s) != b // 4:
          raise ValueError("signature length is wrong")
  
      if len(pk) != b // 8:
          raise ValueError("public-key length is wrong")
  
      s = bytearray(s)
      m = bytearray(m)
      pk = bytearray(pk)
  
      R = decodepoint(s[: b // 8])
      A = decodepoint(pk)
      S = decodeint(s[b // 8 : b // 4])
      h = Hint(encodepoint(R) + pk + m)
  
      (x1, y1, z1, t1) = P = scalarmult_B(S)
      (x2, y2, z2, t2) = Q = edwards_add(R, scalarmult(A, h))
  
      if (
          not isoncurve(P)
          or not isoncurve(Q)
          or (x1 * z2 - x2 * z1) % q != 0
          or (y1 * z2 - y2 * z1) % q != 0
      ):
          raise SignatureMismatch("signature does not pass verification")
docs: Not safe to use when any argument is secret.
      See module docstring.  This function should be used only for
      verifying public signatures of public messages.