MCPcopy Create free account
hub / github.com/daodst/chat / PerformUploadDeviceKeys

Method PerformUploadDeviceKeys

keyserver/internal/cross_signing.go:106–266  ·  view source on GitHub ↗

nolint:gocyclo

(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse)

Source from the content-addressed store, hash-verified

104
105// nolint:gocyclo
106func (a *KeyInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse) {
107 // Find the keys to store.
108 byPurpose := map[gomatrixserverlib.CrossSigningKeyPurpose]gomatrixserverlib.CrossSigningKey{}
109 toStore := types.CrossSigningKeyMap{}
110 hasMasterKey := false
111
112 if len(req.MasterKey.Keys) > 0 {
113 if err := sanityCheckKey(req.MasterKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeMaster); err != nil {
114 res.Error = &api.KeyError{
115 Err: "Master key sanity check failed: " + err.Error(),
116 IsInvalidParam: true,
117 }
118 return
119 }
120
121 byPurpose[gomatrixserverlib.CrossSigningKeyPurposeMaster] = req.MasterKey
122 for _, key := range req.MasterKey.Keys { // iterates once, see sanityCheckKey
123 toStore[gomatrixserverlib.CrossSigningKeyPurposeMaster] = key
124 }
125 hasMasterKey = true
126 }
127
128 if len(req.SelfSigningKey.Keys) > 0 {
129 if err := sanityCheckKey(req.SelfSigningKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeSelfSigning); err != nil {
130 res.Error = &api.KeyError{
131 Err: "Self-signing key sanity check failed: " + err.Error(),
132 IsInvalidParam: true,
133 }
134 return
135 }
136
137 byPurpose[gomatrixserverlib.CrossSigningKeyPurposeSelfSigning] = req.SelfSigningKey
138 for _, key := range req.SelfSigningKey.Keys { // iterates once, see sanityCheckKey
139 toStore[gomatrixserverlib.CrossSigningKeyPurposeSelfSigning] = key
140 }
141 }
142
143 if len(req.UserSigningKey.Keys) > 0 {
144 if err := sanityCheckKey(req.UserSigningKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeUserSigning); err != nil {
145 res.Error = &api.KeyError{
146 Err: "User-signing key sanity check failed: " + err.Error(),
147 IsInvalidParam: true,
148 }
149 return
150 }
151
152 byPurpose[gomatrixserverlib.CrossSigningKeyPurposeUserSigning] = req.UserSigningKey
153 for _, key := range req.UserSigningKey.Keys { // iterates once, see sanityCheckKey
154 toStore[gomatrixserverlib.CrossSigningKeyPurposeUserSigning] = key
155 }
156 }
157
158 // If there's nothing to do then stop here.
159 if len(toStore) == 0 {
160 res.Error = &api.KeyError{
161 Err: "No keys were supplied in the request",
162 IsMissingParam: true,
163 }

Callers

nothing calls this directly

Calls 6

sanityCheckKeyFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected