Skip to content

Commit 0b4cf3b

Browse files
committed
mas: revert cross_signing_keys.updatable_without_uia_before_ms field and related logic
1 parent 4534456 commit 0b4cf3b

File tree

11 files changed

+41
-212
lines changed

11 files changed

+41
-212
lines changed

userapi/api/api.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -689,11 +689,6 @@ type ClientKeyAPI interface {
689689
QueryKeys(ctx context.Context, req *QueryKeysRequest, res *QueryKeysResponse)
690690
QueryMasterKeys(ctx context.Context, req *QueryMasterKeysRequest, res *QueryMasterKeysResponse)
691691
PerformUploadKeys(ctx context.Context, req *PerformUploadKeysRequest, res *PerformUploadKeysResponse) error
692-
PerformAllowingMasterCrossSigningKeyReplacementWithoutUIA(
693-
ctx context.Context,
694-
req *PerformAllowingMasterCrossSigningKeyReplacementWithoutUIARequest,
695-
res *PerformAllowingMasterCrossSigningKeyReplacementWithoutUIAResponse,
696-
) error
697692

698693
PerformUploadDeviceSignatures(ctx context.Context, req *PerformUploadDeviceSignaturesRequest, res *PerformUploadDeviceSignaturesResponse)
699694
// PerformClaimKeys claims one-time keys for use in pre-key messages
@@ -922,15 +917,6 @@ type PerformUploadDeviceKeysResponse struct {
922917
Error *KeyError
923918
}
924919

925-
type PerformAllowingMasterCrossSigningKeyReplacementWithoutUIARequest struct {
926-
UserID string
927-
Duration time.Duration
928-
}
929-
930-
type PerformAllowingMasterCrossSigningKeyReplacementWithoutUIAResponse struct {
931-
Timestamp int64
932-
}
933-
934920
type PerformUploadDeviceSignaturesRequest struct {
935921
Signatures map[string]map[gomatrixserverlib.KeyID]fclient.CrossSigningForKeyOrDevice
936922
// The user that uploaded the sig, should be populated by the clientapi.
@@ -968,7 +954,7 @@ type QueryMasterKeysRequest struct {
968954
}
969955

970956
type QueryMasterKeysResponse struct {
971-
Key *types.CrossSigningKey
957+
Key spec.Base64Bytes
972958
// Set if there was a fatal error processing this query
973959
Error *KeyError
974960
}

userapi/internal/cross_signing.go

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,6 @@ func sanityCheckKey(key fclient.CrossSigningKey, userID string, purpose fclient.
9696
return nil
9797
}
9898

99-
func (a *UserInternalAPI) PerformAllowingMasterCrossSigningKeyReplacementWithoutUIA(
100-
ctx context.Context,
101-
req *api.PerformAllowingMasterCrossSigningKeyReplacementWithoutUIARequest,
102-
res *api.PerformAllowingMasterCrossSigningKeyReplacementWithoutUIAResponse,
103-
) error {
104-
var err error
105-
res.Timestamp, err = a.KeyDatabase.UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA(ctx, req.UserID, req.Duration)
106-
return err
107-
}
108-
10999
// nolint:gocyclo
110100
func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse) {
111101
// Find the keys to store.
@@ -124,9 +114,7 @@ func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.
124114

125115
byPurpose[fclient.CrossSigningKeyPurposeMaster] = req.MasterKey
126116
for _, key := range req.MasterKey.Keys { // iterates once, see sanityCheckKey
127-
toStore[fclient.CrossSigningKeyPurposeMaster] = types.CrossSigningKey{
128-
KeyData: key,
129-
}
117+
toStore[fclient.CrossSigningKeyPurposeMaster] = key
130118
}
131119
hasMasterKey = true
132120
}
@@ -142,9 +130,7 @@ func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.
142130

143131
byPurpose[fclient.CrossSigningKeyPurposeSelfSigning] = req.SelfSigningKey
144132
for _, key := range req.SelfSigningKey.Keys { // iterates once, see sanityCheckKey
145-
toStore[fclient.CrossSigningKeyPurposeSelfSigning] = types.CrossSigningKey{
146-
KeyData: key,
147-
}
133+
toStore[fclient.CrossSigningKeyPurposeSelfSigning] = key
148134
}
149135
}
150136

@@ -159,9 +145,7 @@ func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.
159145

160146
byPurpose[fclient.CrossSigningKeyPurposeUserSigning] = req.UserSigningKey
161147
for _, key := range req.UserSigningKey.Keys { // iterates once, see sanityCheckKey
162-
toStore[fclient.CrossSigningKeyPurposeUserSigning] = types.CrossSigningKey{
163-
KeyData: key,
164-
}
148+
toStore[fclient.CrossSigningKeyPurposeUserSigning] = key
165149
}
166150
}
167151

@@ -214,7 +198,7 @@ func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.
214198
changed = true
215199
break
216200
}
217-
if !bytes.Equal(old.KeyData, new.KeyData) {
201+
if !bytes.Equal(old, new) {
218202
// One of the existing keys for a purpose we already knew about has
219203
// changed.
220204
changed = true
@@ -226,7 +210,7 @@ func (a *UserInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.
226210
}
227211

228212
// Store the keys.
229-
if err := a.KeyDatabase.StoreCrossSigningKeysForUser(ctx, req.UserID, toStore, nil); err != nil {
213+
if err := a.KeyDatabase.StoreCrossSigningKeysForUser(ctx, req.UserID, toStore); err != nil {
230214
res.Error = &api.KeyError{
231215
Err: fmt.Sprintf("a.DB.StoreCrossSigningKeysForUser: %s", err),
232216
}

userapi/internal/key_api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ func (a *UserInternalAPI) QueryMasterKeys(ctx context.Context, req *api.QueryMas
243243
return
244244
}
245245
if key, ok := crossSigningKeyMap[fclient.CrossSigningKeyPurposeMaster]; ok {
246-
res.Key = &key
246+
res.Key = key
247247
}
248248
}
249249

userapi/storage/interface.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"context"
1111
"encoding/json"
1212
"errors"
13-
"time"
1413

1514
"github.com/matrix-org/gomatrixserverlib"
1615
"github.com/matrix-org/gomatrixserverlib/fclient"
@@ -231,9 +230,8 @@ type KeyDatabase interface {
231230
CrossSigningKeysDataForUserAndKeyType(ctx context.Context, userID string, keyType fclient.CrossSigningKeyPurpose) (types.CrossSigningKeyMap, error)
232231
CrossSigningSigsForTarget(ctx context.Context, originUserID, targetUserID string, targetKeyID gomatrixserverlib.KeyID) (types.CrossSigningSigMap, error)
233232

234-
StoreCrossSigningKeysForUser(ctx context.Context, userID string, keyMap types.CrossSigningKeyMap, updatableWithoutUIABeforeMs *int64) error
233+
StoreCrossSigningKeysForUser(ctx context.Context, userID string, keyMap types.CrossSigningKeyMap) error
235234
StoreCrossSigningSigsForTarget(ctx context.Context, originUserID string, originKeyID gomatrixserverlib.KeyID, targetUserID string, targetKeyID gomatrixserverlib.KeyID, signature spec.Base64Bytes) error
236-
UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA(ctx context.Context, userID string, duration time.Duration) (int64, error)
237235

238236
DeleteStaleDeviceLists(
239237
ctx context.Context,

userapi/storage/postgres/cross_signing_keys_table.go

Lines changed: 13 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import (
1010
"context"
1111
"database/sql"
1212
"fmt"
13-
"time"
14-
15-
"github.com/element-hq/dendrite/userapi/storage/postgres/deltas"
1613

1714
"github.com/element-hq/dendrite/internal"
1815
"github.com/element-hq/dendrite/internal/sqlutil"
@@ -32,29 +29,23 @@ CREATE TABLE IF NOT EXISTS keyserver_cross_signing_keys (
3229
`
3330

3431
const selectCrossSigningKeysForUserSQL = "" +
35-
"SELECT key_type, key_data, updatable_without_uia_before_ms FROM keyserver_cross_signing_keys" +
32+
"SELECT key_type, key_data FROM keyserver_cross_signing_keys" +
3633
" WHERE user_id = $1"
3734

3835
const selectCrossSigningKeysForUserAndKeyTypeSQL = "" +
39-
"SELECT key_type, key_data, updatable_without_uia_before_ms FROM keyserver_cross_signing_keys" +
36+
"SELECT key_type, key_data FROM keyserver_cross_signing_keys" +
4037
" WHERE user_id = $1 AND key_type = $2"
4138

4239
const upsertCrossSigningKeysForUserSQL = "" +
43-
"INSERT INTO keyserver_cross_signing_keys (user_id, key_type, key_data, updatable_without_uia_before_ms)" +
40+
"INSERT INTO keyserver_cross_signing_keys (user_id, key_type, key_data)" +
4441
" VALUES($1, $2, $3, $4)" +
4542
" ON CONFLICT (user_id, key_type) DO UPDATE SET key_data = $3"
4643

47-
const updateMasterCrossSigningKeyAllowReplacementWithoutUiaSQL = "" +
48-
"UPDATE keyserver_cross_signing_keys" +
49-
" SET updatable_without_uia_before_ms = $1" +
50-
" WHERE user_id = $2 AND key_type = $3"
51-
5244
type crossSigningKeysStatements struct {
53-
db *sql.DB
54-
selectCrossSigningKeysForUserStmt *sql.Stmt
55-
selectCrossSigningKeysForUserAndKeyTypeStmt *sql.Stmt
56-
upsertCrossSigningKeysForUserStmt *sql.Stmt
57-
updateMasterCrossSigningKeyAllowReplacementWithoutUiaStmt *sql.Stmt
45+
db *sql.DB
46+
selectCrossSigningKeysForUserStmt *sql.Stmt
47+
selectCrossSigningKeysForUserAndKeyTypeStmt *sql.Stmt
48+
upsertCrossSigningKeysForUserStmt *sql.Stmt
5849
}
5950

6051
func NewPostgresCrossSigningKeysTable(db *sql.DB) (tables.CrossSigningKeys, error) {
@@ -66,12 +57,6 @@ func NewPostgresCrossSigningKeysTable(db *sql.DB) (tables.CrossSigningKeys, erro
6657
return nil, err
6758
}
6859
m := sqlutil.NewMigrator(db)
69-
m.AddMigrations(
70-
sqlutil.Migration{
71-
Version: "userapi: add x-signing updatable_without_uia_before_ms",
72-
Up: deltas.UpAddXSigningUpdatableWithoutUIABeforeMs,
73-
},
74-
)
7560
err = m.Up(context.Background())
7661
if err != nil {
7762
return nil, err
@@ -80,7 +65,6 @@ func NewPostgresCrossSigningKeysTable(db *sql.DB) (tables.CrossSigningKeys, erro
8065
{&s.selectCrossSigningKeysForUserStmt, selectCrossSigningKeysForUserSQL},
8166
{&s.selectCrossSigningKeysForUserAndKeyTypeStmt, selectCrossSigningKeysForUserAndKeyTypeSQL},
8267
{&s.upsertCrossSigningKeysForUserStmt, upsertCrossSigningKeysForUserSQL},
83-
{&s.updateMasterCrossSigningKeyAllowReplacementWithoutUiaStmt, updateMasterCrossSigningKeyAllowReplacementWithoutUiaSQL},
8468
}.Prepare(db)
8569
}
8670

@@ -96,18 +80,14 @@ func (s *crossSigningKeysStatements) SelectCrossSigningKeysForUser(
9680
for rows.Next() {
9781
var keyTypeInt int16
9882
var keyData spec.Base64Bytes
99-
var updatableWithoutUIABeforeMs *int64
100-
if err = rows.Scan(&keyTypeInt, &keyData, &updatableWithoutUIABeforeMs); err != nil {
83+
if err = rows.Scan(&keyTypeInt, &keyData); err != nil {
10184
return nil, err
10285
}
10386
keyType, ok := types.KeyTypeIntToPurpose[keyTypeInt]
10487
if !ok {
10588
return nil, fmt.Errorf("unknown key purpose int %d", keyTypeInt)
10689
}
107-
r[keyType] = types.CrossSigningKey{
108-
UpdatableWithoutUIABeforeMs: updatableWithoutUIABeforeMs,
109-
KeyData: keyData,
110-
}
90+
r[keyType] = keyData
11191
}
11292
err = rows.Err()
11393
return
@@ -129,45 +109,28 @@ func (s *crossSigningKeysStatements) SelectCrossSigningKeysForUserAndKeyType(
129109
for rows.Next() {
130110
var keyTypeInt int16
131111
var keyData spec.Base64Bytes
132-
var updatableWithoutUIABeforeMs *int64
133-
if err = rows.Scan(&keyTypeInt, &keyData, &updatableWithoutUIABeforeMs); err != nil {
112+
if err = rows.Scan(&keyTypeInt, &keyData); err != nil {
134113
return nil, err
135114
}
136115
keyType, ok := types.KeyTypeIntToPurpose[keyTypeInt]
137116
if !ok {
138117
return nil, fmt.Errorf("unknown key purpose int %d", keyTypeInt)
139118
}
140-
r[keyType] = types.CrossSigningKey{
141-
UpdatableWithoutUIABeforeMs: updatableWithoutUIABeforeMs,
142-
KeyData: keyData,
143-
}
119+
r[keyType] = keyData
144120
}
145121
err = rows.Err()
146122
return
147123
}
148124

149125
func (s *crossSigningKeysStatements) UpsertCrossSigningKeysForUser(
150-
ctx context.Context, txn *sql.Tx, userID string, keyType fclient.CrossSigningKeyPurpose, keyData spec.Base64Bytes, updatableWithoutUIABeforeMs *int64,
126+
ctx context.Context, txn *sql.Tx, userID string, keyType fclient.CrossSigningKeyPurpose, keyData spec.Base64Bytes,
151127
) error {
152128
keyTypeInt, ok := types.KeyTypePurposeToInt[keyType]
153129
if !ok {
154130
return fmt.Errorf("unknown key purpose %q", keyType)
155131
}
156-
if _, err := sqlutil.TxStmt(txn, s.upsertCrossSigningKeysForUserStmt).ExecContext(ctx, userID, keyTypeInt, keyData, updatableWithoutUIABeforeMs); err != nil {
132+
if _, err := sqlutil.TxStmt(txn, s.upsertCrossSigningKeysForUserStmt).ExecContext(ctx, userID, keyTypeInt, keyData); err != nil {
157133
return fmt.Errorf("s.upsertCrossSigningKeysForUserStmt: %w", err)
158134
}
159135
return nil
160136
}
161-
162-
func (s *crossSigningKeysStatements) UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA(ctx context.Context, txn *sql.Tx, userID string, duration time.Duration) (int64, error) {
163-
keyTypeInt := types.KeyTypePurposeToInt[fclient.CrossSigningKeyPurposeMaster]
164-
ts := time.Now().Add(duration).UnixMilli()
165-
result, err := sqlutil.TxStmt(txn, s.updateMasterCrossSigningKeyAllowReplacementWithoutUiaStmt).ExecContext(ctx, ts, userID, keyTypeInt)
166-
if err != nil {
167-
return -1, err
168-
}
169-
if n, _ := result.RowsAffected(); n == 0 {
170-
return -1, sql.ErrNoRows
171-
}
172-
return ts, nil
173-
}

userapi/storage/postgres/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go

Lines changed: 0 additions & 23 deletions
This file was deleted.

userapi/storage/shared/storage.go

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,12 +1136,12 @@ func (d *KeyDatabase) CrossSigningKeysForUser(ctx context.Context, userID string
11361136
}
11371137
results := map[fclient.CrossSigningKeyPurpose]fclient.CrossSigningKey{}
11381138
for purpose, key := range keyMap {
1139-
keyID := gomatrixserverlib.KeyID("ed25519:" + key.KeyData.Encode())
1139+
keyID := gomatrixserverlib.KeyID("ed25519:" + key.Encode())
11401140
result := fclient.CrossSigningKey{
11411141
UserID: userID,
11421142
Usage: []fclient.CrossSigningKeyPurpose{purpose},
11431143
Keys: map[gomatrixserverlib.KeyID]spec.Base64Bytes{
1144-
keyID: key.KeyData,
1144+
keyID: key,
11451145
},
11461146
}
11471147
sigMap, err := d.CrossSigningSigsTable.SelectCrossSigningSigsForTarget(ctx, nil, userID, userID, keyID)
@@ -1183,29 +1183,17 @@ func (d *KeyDatabase) CrossSigningSigsForTarget(ctx context.Context, originUserI
11831183
}
11841184

11851185
// StoreCrossSigningKeysForUser stores the latest known cross-signing keys for a user.
1186-
func (d *KeyDatabase) StoreCrossSigningKeysForUser(ctx context.Context, userID string, keyMap types.CrossSigningKeyMap, updatableWithoutUIABeforeMs *int64) error {
1186+
func (d *KeyDatabase) StoreCrossSigningKeysForUser(ctx context.Context, userID string, keyMap types.CrossSigningKeyMap) error {
11871187
return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
11881188
for keyType, key := range keyMap {
1189-
if err := d.CrossSigningKeysTable.UpsertCrossSigningKeysForUser(ctx, txn, userID, keyType, key.KeyData, key.UpdatableWithoutUIABeforeMs); err != nil {
1189+
if err := d.CrossSigningKeysTable.UpsertCrossSigningKeysForUser(ctx, txn, userID, keyType, key); err != nil {
11901190
return fmt.Errorf("d.CrossSigningKeysTable.InsertCrossSigningKeysForUser: %w", err)
11911191
}
11921192
}
11931193
return nil
11941194
})
11951195
}
11961196

1197-
// UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA updates the 'updatable_without_uia_before_ms' attribute of the master cross-signing key.
1198-
// Normally this attribute depending on its value marks the master key as replaceable without UIA.
1199-
func (d *KeyDatabase) UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA(ctx context.Context, userID string, duration time.Duration) (int64, error) {
1200-
var ts int64
1201-
err := d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
1202-
var err error
1203-
ts, err = d.CrossSigningKeysTable.UpdateMasterCrossSigningKeyAllowReplacementWithoutUIA(ctx, txn, userID, duration)
1204-
return err
1205-
})
1206-
return ts, err
1207-
}
1208-
12091197
// StoreCrossSigningSigsForTarget stores a signature for a target user ID and key/device.
12101198
func (d *KeyDatabase) StoreCrossSigningSigsForTarget(
12111199
ctx context.Context,

0 commit comments

Comments
 (0)