Per vertex normals don't have a single straightforward formula, like a simple face normal does.
This shows how to calculate a face normal: https://www.opengl.org/wiki/Calculating_a_Surface_Normal
Vertex normals are usually pseudo "art" information. Meaning, as mentioned before, they're done in the modeling application and saved into the model file itself. Because they can be manually manipulated for different effects, ie "harder" - "softer" ...
The more "automated" way is to take the weighted average of the triangles around a vertex.
In maya for example, you can supply an "angle" to shift they by, and other applications might have similar different options.
Even wavefront obj supports vertex normals so I'd say make sure your priorities are correct.
If your application doesn't even support loading a model format which contains the vertex normal information itself, I'd say worry about implementing that first before you worry about how good some simple template object looks.
First get something working. THEN make it good. :)