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

Method QuerySignatures

keyserver/internal/cross_signing.go:523–584  ·  view source on GitHub ↗
(ctx context.Context, req *api.QuerySignaturesRequest, res *api.QuerySignaturesResponse)

Source from the content-addressed store, hash-verified

521}
522
523func (a *KeyInternalAPI) QuerySignatures(ctx context.Context, req *api.QuerySignaturesRequest, res *api.QuerySignaturesResponse) {
524 for targetUserID, forTargetUser := range req.TargetIDs {
525 keyMap, err := a.DB.CrossSigningKeysForUser(ctx, targetUserID)
526 if err != nil && err != sql.ErrNoRows {
527 res.Error = &api.KeyError{
528 Err: fmt.Sprintf("a.DB.CrossSigningKeysForUser: %s", err),
529 }
530 continue
531 }
532
533 for targetPurpose, targetKey := range keyMap {
534 switch targetPurpose {
535 case gomatrixserverlib.CrossSigningKeyPurposeMaster:
536 if res.MasterKeys == nil {
537 res.MasterKeys = map[string]gomatrixserverlib.CrossSigningKey{}
538 }
539 res.MasterKeys[targetUserID] = targetKey
540
541 case gomatrixserverlib.CrossSigningKeyPurposeSelfSigning:
542 if res.SelfSigningKeys == nil {
543 res.SelfSigningKeys = map[string]gomatrixserverlib.CrossSigningKey{}
544 }
545 res.SelfSigningKeys[targetUserID] = targetKey
546
547 case gomatrixserverlib.CrossSigningKeyPurposeUserSigning:
548 if res.UserSigningKeys == nil {
549 res.UserSigningKeys = map[string]gomatrixserverlib.CrossSigningKey{}
550 }
551 res.UserSigningKeys[targetUserID] = targetKey
552 }
553 }
554
555 for _, targetKeyID := range forTargetUser {
556 // Get own signatures only.
557 sigMap, err := a.DB.CrossSigningSigsForTarget(ctx, targetUserID, targetUserID, targetKeyID)
558 if err != nil && err != sql.ErrNoRows {
559 res.Error = &api.KeyError{
560 Err: fmt.Sprintf("a.DB.CrossSigningSigsForTarget: %s", err),
561 }
562 return
563 }
564
565 for sourceUserID, forSourceUser := range sigMap {
566 for sourceKeyID, sourceSig := range forSourceUser {
567 if res.Signatures == nil {
568 res.Signatures = map[string]map[gomatrixserverlib.KeyID]types.CrossSigningSigMap{}
569 }
570 if _, ok := res.Signatures[targetUserID]; !ok {
571 res.Signatures[targetUserID] = map[gomatrixserverlib.KeyID]types.CrossSigningSigMap{}
572 }
573 if _, ok := res.Signatures[targetUserID][targetKeyID]; !ok {
574 res.Signatures[targetUserID][targetKeyID] = types.CrossSigningSigMap{}
575 }
576 if _, ok := res.Signatures[targetUserID][targetKeyID][sourceUserID]; !ok {
577 res.Signatures[targetUserID][targetKeyID][sourceUserID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{}
578 }
579 res.Signatures[targetUserID][targetKeyID][sourceUserID][sourceKeyID] = sourceSig
580 }

Callers

nothing calls this directly

Calls 2

Tested by

no test coverage detected