func getUserCard(g *libkb.GlobalContext, uid keybase1.UID, useSession bool) (ret *keybase1.UserCard, err error) { defer g.Trace("getUserCard", func() error { return err })() arg := libkb.APIArg{ Endpoint: "user/card", NeedSession: useSession, Contextified: libkb.NewContextified(g), Args: libkb.HTTPArgs{"uid": libkb.S{Val: uid.String()}}, } var card card if err = g.API.GetDecode(arg, &card); err != nil { g.Log.Warning("error getting user/card for %s: %s\n", uid, err) return nil, err } g.Log.Debug("user card: %+v", card) ret = &keybase1.UserCard{ Following: card.FollowSummary.Following, Followers: card.FollowSummary.Followers, Uid: uid, FullName: card.Profile.FullName, Location: card.Profile.Location, Bio: card.Profile.Bio, Website: card.Profile.Website, Twitter: card.Profile.Twitter, YouFollowThem: card.YouFollowThem, TheyFollowYou: card.TheyFollowYou, } return ret, nil }
// UnboxBytes32Any will decrypt any of the KID, ciphertext, nonce // bundles in arg.Bundles. Key preference order: cached device keys, // cached paper keys, local device key, user-entered paper key. // It returns the KID and bundle index along with the plaintext. func UnboxBytes32Any(g *libkb.GlobalContext, secretUI libkb.SecretUI, arg keybase1.UnboxBytes32AnyArg) (res keybase1.UnboxAnyRes, err error) { defer g.Trace("UnboxBytes32Any", func() error { return err }) // find a matching secret key for a bundle in arg.Bundles key, index, err := getMatchingSecretKey(g, secretUI, arg) if err != nil { return res, err } // decrypt the bundle's ciphertext plaintext, err := unboxBytes32(key, arg.Bundles[index].Ciphertext, arg.Bundles[index].Nonce, arg.Bundles[index].PublicKey) if err != nil { return res, err } // return plaintext, kid, and index res.Plaintext = plaintext res.Kid = key.GetKID() res.Index = index return res, nil }