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 {
err := u.shuffleKeys()
if err != nil {
if err := u.shuffleKeys(); err != nil {
return err
}
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
if u.Kp.AttrsPerKey&1 == 1 {
numbOfSelectedSets += security.Choice[int]([]int{0, 1})
keypadSet1, err := u.InterfaceMatrix()
if err = u.shuffleKeys(); err != nil {
return err
}
keypadSet2, err := u.InterfaceMatrix()
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
if err != nil {
return err
}
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
keypadSetView, err := u.SetViewMatrix()
if err != nil {
return err
}
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
for keyIdx, key := range keypadSet1 {
for idx, attrIdx := range key {
if selectedSets.Contains(attrIdx) {
keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx]
}
}
interfaceBySet[idx] = attrs
}
keypadView, err := security.MatrixTranspose(interfaceBySet)
if err != nil {
return err
}
u.IdxInterface = security.MatrixToList(keypadView)
u.IdxInterface = security.MatrixToList(keypadSet1)
return nil
}