52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package twofactor_test
|
|
|
|
import (
|
|
"encoding/base32"
|
|
"math/rand"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.wntrmute.dev/kyle/goutils/twofactor"
|
|
)
|
|
|
|
const letters = "1234567890!@#$%^&*()abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
func randString() string {
|
|
b := make([]byte, rand.Intn(len(letters)))
|
|
for i := range b {
|
|
b[i] = letters[rand.Intn(len(letters))]
|
|
}
|
|
return base32.StdEncoding.EncodeToString(b)
|
|
}
|
|
|
|
func TestPadding(t *testing.T) {
|
|
for range 300 {
|
|
b := randString()
|
|
origEncoding := b
|
|
modEncoding := strings.ReplaceAll(b, "=", "")
|
|
str, err := base32.StdEncoding.DecodeString(origEncoding)
|
|
if err != nil {
|
|
t.Fatal("Can't decode: ", b)
|
|
}
|
|
|
|
paddedEncoding := twofactor.Pad(modEncoding)
|
|
if origEncoding != paddedEncoding {
|
|
t.Log("Padding failed:")
|
|
t.Logf("Expected: '%s'", origEncoding)
|
|
t.Fatalf("Got: '%s'", paddedEncoding)
|
|
} else {
|
|
var mstr []byte
|
|
mstr, err = base32.StdEncoding.DecodeString(paddedEncoding)
|
|
if err != nil {
|
|
t.Fatal("Can't decode: ", paddedEncoding)
|
|
}
|
|
|
|
if string(mstr) != string(str) {
|
|
t.Log("Re-padding failed:")
|
|
t.Logf("Expected: '%s'", str)
|
|
t.Fatalf("Got: '%s'", mstr)
|
|
}
|
|
}
|
|
}
|
|
}
|