in linux/handler.go [143:168]
func (h *KeyHandler) nextAvailable() (tpmutil.Handle, error) {
l := len(h.handles) + len(h.inFlightHandles)
if l == 0 {
return minValidHandle, nil
}
if tpmutil.Handle(l) >= maxValidHandle-minValidHandle+1 {
return 0, fmt.Errorf("no more key handles available")
}
keys := handlesToSlice(h.handles, nil)
keys = handlesToSlice(h.inFlightHandles, keys)
sort.Slice(keys, func(i, j int) bool {
return keys[i] < keys[j]
})
ret := keys[0]
for _, key := range keys {
if ret != key {
return ret, nil
}
ret++
}
return ret, nil
}