fix loginShuffle implementation

This commit is contained in:
2024-12-06 13:37:14 -06:00
parent 9ec8864122
commit bd06c68ab2

View File

@@ -141,39 +141,30 @@ func (u *UserInterface) AttributeAdjacencyGraph() (map[int]utils.Set[int], error
} }
func (u *UserInterface) LoginShuffle() error { func (u *UserInterface) LoginShuffle() error {
err := u.shuffleKeys() if err := u.shuffleKeys(); err != nil {
if err != nil {
return err return err
} }
numbOfSelectedSets := u.Kp.AttrsPerKey / 2 keypadSet1, err := u.InterfaceMatrix()
if u.Kp.AttrsPerKey&1 == 1 { if err = u.shuffleKeys(); err != nil {
numbOfSelectedSets += security.Choice[int]([]int{0, 1}) return err
} }
keypadSet2, err := u.InterfaceMatrix()
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey) setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
if err != nil { if err != nil {
return err return err
} }
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets]) selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
keypadSetView, err := u.SetViewMatrix() for keyIdx, key := range keypadSet1 {
if err != nil { for idx, attrIdx := range key {
return err if selectedSets.Contains(attrIdx) {
} keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx]
interfaceBySet := make([][]int, u.Kp.AttrsPerKey)
for idx, attrs := range keypadSetView {
if selectedSets.Contains(idx) {
err = security.FisherYatesShuffle[int](&attrs)
if err != nil {
return err
} }
} }
interfaceBySet[idx] = attrs
} }
keypadView, err := security.MatrixTranspose(interfaceBySet)
if err != nil { u.IdxInterface = security.MatrixToList(keypadSet1)
return err
}
u.IdxInterface = security.MatrixToList(keypadView)
return nil return nil
} }