47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package nkode
|
|
|
|
import (
|
|
m "go-nkode/core/model"
|
|
"go-nkode/util"
|
|
)
|
|
|
|
type User struct {
|
|
Username string
|
|
EncipheredPasscode m.EncipheredNKode
|
|
UserKeys UserCipherKeys
|
|
Interface UserInterface
|
|
Renew bool
|
|
}
|
|
|
|
func (u *User) DecipherMask(setVals []uint64, passcodeLen int) ([]uint64, error) {
|
|
return u.UserKeys.DecipherMask(u.EncipheredPasscode.Mask, setVals, passcodeLen)
|
|
}
|
|
|
|
func (u *User) RenewKeys(setXor []uint64, attrXor []uint64) error {
|
|
u.Renew = true
|
|
var err error
|
|
u.UserKeys.SetKey, err = util.XorLists(setXor, u.UserKeys.SetKey)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.UserKeys.AlphaKey, err = util.XorLists(attrXor, u.UserKeys.AlphaKey)
|
|
return err
|
|
}
|
|
|
|
func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes CustomerAttributes) error {
|
|
newKeys, err := NewUserCipherKeys(customerAttributes.KeypadSize, customerAttributes.SetVals, u.UserKeys.MaxNKodeLen)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
encipheredPasscode, err := newKeys.EncipherNKode(passcodeAttrIdx, customerAttributes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u.UserKeys = *newKeys
|
|
u.EncipheredPasscode = *encipheredPasscode
|
|
u.Renew = false
|
|
return nil
|
|
}
|