fix persisting keys

This commit is contained in:
2025-12-28 02:03:52 -07:00
parent 94d7cde6fa
commit be67bd0fb6
2 changed files with 38 additions and 0 deletions

View File

@@ -190,15 +190,39 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if m.state == 0 {
pass := m.input.Value()
if len(pass) > 0 {
// REGISTERING USER FLOW
if m.identityKey != nil {
ciphertext, nonce, salt, err := encryptUserKey(m.identityKey.PrivateKey, pass)
if err != nil {
m.err = err
return m, nil
}
// Store encrypted private key
if err := storeUserEncryptedKey(m.username, ciphertext, salt, nonce); err != nil {
m.err = err
return m, nil
}
m.encryptedPrivKey = ciphertext
m.privKeyNonce = nonce
m.privKeySalt = salt
} else {
// LOGGING IN USER FLOW
encKey, salt, nonce, err := getUserEncryptedKey(m.username)
if err != nil {
m.err = fmt.Errorf("failed to load keys: %v", err)
return m, nil
}
privKey, err := decryptUserKey(encKey, nonce, salt, pass)
if err != nil {
m.err = fmt.Errorf("incorrect passphrase")
return m, nil
}
// Reconstruct IdentityKeyPair
pubKey, _ := getMemberIdentityKey(m.username)
m.identityKey = &IdentityKeyPair{
PrivateKey: privKey,
PublicKey: pubKey,
}
}
m.passphrase = pass