go-srp icon indicating copy to clipboard operation
go-srp copied to clipboard

The usage in README is not very clear and has some errors.

Open jiatower opened this issue 3 years ago • 0 comments

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))
}

jiatower avatar Jan 02 '23 03:01 jiatower