// Delegate marks the given ComputedKeyInfos object that the given kid is now // delegated, as of time tm, in sigid, as signed by signingKid, etc. func (cki *ComputedKeyInfos) Delegate(kid keybase1.KID, tm *KeybaseTime, sigid keybase1.SigID, signingKid, parentKID keybase1.KID, pgpHash string, isSibkey bool, ctime, etime time.Time) (err error) { G.Log.Debug("ComputeKeyInfos::Delegate To %s with %s at sig %s", kid.String(), signingKid, sigid.ToDisplayString(true)) info, found := cki.Infos[kid] if !found { newInfo := NewComputedKeyInfo(false, false, KeyUncancelled, ctime.Unix(), etime.Unix(), pgpHash) newInfo.DelegatedAt = tm info = &newInfo cki.Infos[kid] = info } else { info.Status = KeyUncancelled info.CTime = ctime.Unix() info.ETime = etime.Unix() } info.Delegations[sigid] = signingKid info.Sibkey = isSibkey cki.Sigs[sigid] = info // If it's a subkey, make a pointer from it to its parent, // and also from its parent to it. if parentKID.Exists() { info.Parent = parentKID if parent, found := cki.Infos[parentKID]; found { parent.Subkey = kid } } return }