go-srp
go-srp copied to clipboard
The usage in README is not very clear and has some errors.
This is my sample code for reference.
package main
import (
_ "crypto/sha256"
"encoding/base64"
"fmt"
"github.com/kong/go-srp"
)
func main() {
params := srp.GetParams(2048)
salt := []byte("salty")
identity := []byte("alice")
password := []byte("password123")
verifier := srp.ComputeVerifier(params, salt, identity, password)
println("verifier:", base64.URLEncoding.EncodeToString(verifier))
secret1 := srp.GenKey()
client := srp.NewClient(params, salt, identity, password, secret1)
srpA := client.ComputeA()
println("A:", base64.URLEncoding.EncodeToString(srpA))
secret2 := srp.GenKey()
server := srp.NewServer(params, verifier, secret2)
srpB := server.ComputeB()
println("B:", base64.URLEncoding.EncodeToString(srpB))
client.SetB(srpB)
m1 := client.ComputeM1()
println("M1:", base64.URLEncoding.EncodeToString(m1))
server.SetA(srpA)
m2, err := server.CheckM1(m1)
if err != nil {
panic(fmt.Sprintf("check m1 error: %s", err))
}
println("M2:", base64.URLEncoding.EncodeToString(m2))
err = client.CheckM2(m2)
if err != nil {
panic(fmt.Sprintf("check m2 error: %s", err))
}
cK := client.ComputeK()
sK := server.ComputeK()
println("clientK:", base64.URLEncoding.EncodeToString(cK))
println("serverK:", base64.URLEncoding.EncodeToString(sK))
}