Add new packages for cryptographic operations, session management, and I/O handling: - pkg/crypt/chachapoly: ChaCha20-Poly1305 AEAD encryption - pkg/crypt/lthn: Lethean-specific key derivation and encryption - pkg/crypt/rsa: RSA key generation, encryption, and signing - pkg/io/node: CryptoNote node I/O and protocol handling - pkg/io/sigil: Cryptographic sigil generation and verification - pkg/session: Session parsing, HTML rendering, search, and video - internal/cmd/forge: Forgejo auth status command - internal/cmd/session: Session management CLI command Also gitignore build artifacts (bugseti binary, i18n-validate). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package lthn
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestHash(t *testing.T) {
|
|
hash := Hash("hello")
|
|
assert.NotEmpty(t, hash)
|
|
}
|
|
|
|
func TestVerify(t *testing.T) {
|
|
hash := Hash("hello")
|
|
assert.True(t, Verify("hello", hash))
|
|
assert.False(t, Verify("world", hash))
|
|
}
|
|
|
|
func TestCreateSalt_Good(t *testing.T) {
|
|
// "hello" reversed: "olleh" -> "0113h"
|
|
expected := "0113h"
|
|
actual := createSalt("hello")
|
|
assert.Equal(t, expected, actual, "Salt should be correctly created for 'hello'")
|
|
}
|
|
|
|
func TestCreateSalt_Bad(t *testing.T) {
|
|
// Test with an empty string
|
|
expected := ""
|
|
actual := createSalt("")
|
|
assert.Equal(t, expected, actual, "Salt for an empty string should be empty")
|
|
}
|
|
|
|
func TestCreateSalt_Ugly(t *testing.T) {
|
|
// Test with characters not in the keyMap
|
|
input := "world123"
|
|
// "world123" reversed: "321dlrow" -> "e2ld1r0w"
|
|
expected := "e2ld1r0w"
|
|
actual := createSalt(input)
|
|
assert.Equal(t, expected, actual, "Salt should handle characters not in the keyMap")
|
|
|
|
// Test with only characters in the keyMap
|
|
input = "oleta"
|
|
// "oleta" reversed: "atelo" -> "47310"
|
|
expected = "47310"
|
|
actual = createSalt(input)
|
|
assert.Equal(t, expected, actual, "Salt should correctly handle strings with only keyMap characters")
|
|
}
|
|
|
|
var testKeyMapMu sync.Mutex
|
|
|
|
func TestSetKeyMap(t *testing.T) {
|
|
testKeyMapMu.Lock()
|
|
originalKeyMap := GetKeyMap()
|
|
t.Cleanup(func() {
|
|
SetKeyMap(originalKeyMap)
|
|
testKeyMapMu.Unlock()
|
|
})
|
|
|
|
newKeyMap := map[rune]rune{
|
|
'a': 'b',
|
|
}
|
|
SetKeyMap(newKeyMap)
|
|
assert.Equal(t, newKeyMap, GetKeyMap())
|
|
}
|