parameters: (s, m, pk)
docstring: 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.
docstring_summary: Not safe to use when any argument is secret.
docstring_tokens: Not safe to use when any argument is secret .
function: def checkvalid(s, m, pk):
      """
      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.
      """
      if len(s) != b // 4:
          raise ValueError("signature length is wrong")
  
      if len(pk) != b // 8:
          raise ValueError("public-key length is wrong")
  
      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")
function_tokens: 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" ) 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" )