def METHOD_NAME(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")