github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/engine/secretkeys_test.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package engine 5 6 import ( 7 "testing" 8 9 "github.com/keybase/client/go/kbcrypto" 10 "github.com/keybase/client/go/libkb" 11 ) 12 13 func TestSecretKeys(t *testing.T) { 14 tc := SetupEngineTest(t, "secretkeys") 15 defer tc.Cleanup() 16 17 u := CreateAndSignupFakeUser(tc, "sk") 18 19 uis := libkb.UIs{ 20 LogUI: tc.G.UI.GetLogUI(), 21 SecretUI: u.NewSecretUI(), 22 } 23 24 // Get the secret keys. 25 e := NewSecretKeysEngine(tc.G) 26 m := NewMetaContextForTest(tc).WithUIs(uis) 27 err := RunEngine2(m, e) 28 if err != nil { 29 t.Fatal(err) 30 } 31 signing := e.Result().Signing 32 33 // Now we want to check that the keys we got actually belong to the user. 34 // Below we just do this check with the signing key, since it's easier to 35 // derive the public key. 36 37 // Build the signing keypair. To do this, we exploit the fact that a NaCl 38 // public signing key is the last 32 bytes of the private signing key. 39 var public kbcrypto.NaclSigningKeyPublic 40 copy(public[:], signing[32:]) 41 pair := libkb.NaclSigningKeyPair{ 42 Public: public, 43 } 44 45 // Check the signing keypair's KID is in the user's KeyFamily. 46 testUser, err := libkb.LoadUser(libkb.NewLoadUserArg(tc.G).WithName(u.Username)) 47 if err != nil { 48 t.Fatal(err) 49 } 50 if found := testUser.GetKeyFamily().AllKIDs[pair.GetKID()]; !found { 51 t.Fatalf("Failed to find %s in the user's key family.", pair.GetKID().String()) 52 } 53 }