This thread contains everything you need to implement wall jumps, but since I know you're going for a sm64 style this might simplify the implementation a bit.
In sm64, you can only wall jump off a surface if its surface normal is parallel to the player's floor plane. We talked a bit about rotating the gameplay plane, but assuming youre sticking with the world x/z plane, you can assume that all walljump-able surfaces have a surface normal whose y-component is 0.
To get the surface normal of the surface you're hitting, just raycast from the player's position along its forward vector. The raycasthit object will contain the struck surface's normal.
If you use another method to get the surface normal you'll have to ensure the player is hitting the wall from in front, not beside or behind with dot product. But using a raycast to get the normal can guarantee this if you set it up right. Note however that if you hit the wall too widely in sm64 you can't wall jump off it, so maybe add an angle check between the player forward and the wall's normal and ensure it's within a certain theshold (sm64 feels like it's slightly more than 45 degrees)
SM64 walljumps always have the same horizontal trajectory relative to the surface normal (reflect player forward off the wall's normal - http://www.3dkingdoms.com/weekly/weekly.php?a=2). Their speed is affected by how early in the walljump window the jump button is pressed (first possible frame always goes furthest), and their height by how long you hold the jump button, as is normal for mario air physics.