Files
auth/example_test.go
T
2026-09-26 20:42:42 -04:00

45 lines
1.1 KiB
Go

package auth_test
import (
"fmt"
"log"
"github.com/lixenwraith/auth"
)
func ExampleNewCredential() {
credential, err := auth.NewCredential("alice", "a-long-example-password")
if err != nil {
log.Fatal(err)
}
// For this local example only. Services should persist a random decoy key
// and use NewScramServerWithDecoyKey, plus authenticated TLS for transport.
server := auth.NewScramServer()
defer server.Stop()
if err := server.AddCredential(credential); err != nil {
log.Fatal(err)
}
client := auth.NewScramClient("alice", "a-long-example-password")
first, err := client.StartAuthentication()
if err != nil {
log.Fatal(err)
}
challenge, err := server.ProcessClientFirstMessage(first.Username, first.ClientNonce)
if err != nil {
log.Fatal(err)
}
proof, err := client.ProcessServerFirstMessage(challenge)
if err != nil {
log.Fatal(err)
}
final, err := server.ProcessClientFinalMessage(proof.FullNonce, proof.ClientProof)
if err != nil {
log.Fatal(err)
}
if err := client.VerifyServerFinalMessage(final); err != nil {
log.Fatal(err)
}
fmt.Println(final.Username)
// Output: alice
}