59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package m
|
|
|
|
import (
|
|
"go-nkode/util"
|
|
)
|
|
|
|
type User struct {
|
|
Id UserId
|
|
CustomerId CustomerId
|
|
Username Username
|
|
EncipheredPasscode EncipheredNKode
|
|
Kp KeypadDimension
|
|
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.Kp.AttrsPerKey], u.UserKeys.SetKey)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
u.UserKeys.AlphaKey, err = util.XorLists(attrXor[:u.Kp.TotalAttrs()], u.UserKeys.AlphaKey)
|
|
return err
|
|
}
|
|
|
|
func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes CustomerAttributes) error {
|
|
setVals, err := customerAttributes.SetValsForKp(u.Kp)
|
|
newKeys, err := NewUserCipherKeys(&u.Kp, 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
|
|
}
|
|
|
|
func (u *User) GetLoginInterface() ([]int, error) {
|
|
err := u.Interface.PartialInterfaceShuffle()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return u.Interface.IdxInterface, nil
|
|
}
|