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

Method processSelfSignatures

keyserver/internal/cross_signing.go:353–400  ·  view source on GitHub ↗
(
	ctx context.Context,
	signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice,
)

Source from the content-addressed store, hash-verified

351}
352
353func (a *KeyInternalAPI) processSelfSignatures(
354 ctx context.Context,
355 signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice,
356) error {
357 // Here we will process:
358 // * The user signing their own devices using their self-signing key
359 // * The user signing their master key using one of their devices
360
361 for targetUserID, forTargetUserID := range signatures {
362 for targetKeyID, signature := range forTargetUserID {
363 switch sig := signature.CrossSigningBody.(type) {
364 case *gomatrixserverlib.CrossSigningKey:
365 for keyID := range sig.Keys {
366 split := strings.SplitN(string(keyID), ":", 2)
367 if len(split) > 1 && gomatrixserverlib.KeyID(split[1]) == targetKeyID {
368 targetKeyID = keyID // contains the ed25519: or other scheme
369 break
370 }
371 }
372 for originUserID, forOriginUserID := range sig.Signatures {
373 for originKeyID, originSig := range forOriginUserID {
374 if err := a.DB.StoreCrossSigningSigsForTarget(
375 ctx, originUserID, originKeyID, targetUserID, targetKeyID, originSig,
376 ); err != nil {
377 return fmt.Errorf("a.DB.StoreCrossSigningKeysForTarget: %w", err)
378 }
379 }
380 }
381
382 case *gomatrixserverlib.DeviceKeys:
383 for originUserID, forOriginUserID := range sig.Signatures {
384 for originKeyID, originSig := range forOriginUserID {
385 if err := a.DB.StoreCrossSigningSigsForTarget(
386 ctx, originUserID, originKeyID, targetUserID, targetKeyID, originSig,
387 ); err != nil {
388 return fmt.Errorf("a.DB.StoreCrossSigningKeysForTarget: %w", err)
389 }
390 }
391 }
392
393 default:
394 return fmt.Errorf("unexpected type assertion")
395 }
396 }
397 }
398
399 return nil
400}
401
402func (a *KeyInternalAPI) processOtherSignatures(
403 ctx context.Context, userID string, queryRes *api.QueryKeysResponse,

Callers 1

Calls 1

Tested by

no test coverage detected