func (app *App) OpenKV(tx *db.Tx, storage *db.VolumeStorage) (kv.KV, error) { var kvstores []kv.KV c := storage.Cursor() for item := c.First(); item != nil; item = c.Next() { backend, err := item.Backend() if err != nil { return nil, err } s, err := app.openStorage(backend) if err != nil { return nil, err } sharingKeyName, err := item.SharingKeyName() if err != nil { return nil, err } sharingKey, err := tx.SharingKeys().Get(sharingKeyName) if err != nil { return nil, fmt.Errorf("getting sharing key %q: %v", sharingKeyName, err) } var secret [32]byte sharingKey.Secret(&secret) s = untrusted.New(s, &secret) kvstores = append(kvstores, s) } return kvmulti.New(kvstores...), nil }