Please describe the algorithm used for key generation. For somebody unfamiliar with go, this would save a lot of time. Thanks!