github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/engine/revoke_sigs_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/libkb" 10 keybase1 "github.com/keybase/client/go/protocol/keybase1" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestRevokeSig(t *testing.T) { 15 tc := SetupEngineTest(t, "rev") 16 defer tc.Cleanup() 17 18 // The PGP key is the 5th signature in the user's chain. 19 u := createFakeUserWithPGPSibkeyPaper(tc) 20 assertNumDevicesAndKeys(tc, u, 2, 5) 21 22 secui := &libkb.TestSecretUI{Passphrase: u.Passphrase} 23 uis := libkb.UIs{ 24 LogUI: tc.G.UI.GetLogUI(), 25 SecretUI: secui, 26 } 27 28 // Add another PGP key, so that we have a couple to revoke. That means that 29 // signatures #6 and #7 are the ones that delegate our PGP keys. 30 const FirstPGPSigSeqno = 6 31 const SecondPGPSigSeqno = 7 32 33 arg := PGPKeyImportEngineArg{ 34 Gen: &libkb.PGPGenArg{ 35 PrimaryBits: 768, 36 SubkeyBits: 768, 37 }, 38 AllowMulti: true, 39 } 40 err := arg.Gen.MakeAllIds(tc.G) 41 require.NoError(t, err) 42 pgpEngine := NewPGPKeyImportEngine(tc.G, arg) 43 m := NewMetaContextForTest(tc).WithUIs(uis) 44 err = RunEngine2(m, pgpEngine) 45 if err != nil { 46 t.Fatal(err) 47 } 48 assertNumDevicesAndKeys(tc, u, 2, 6) 49 50 // First test that a bad sig id fails the revoke. 51 revokeEngine := NewRevokeSigsEngine(tc.G, []string{"9999"}) 52 err = RunEngine2(m, revokeEngine) 53 if err == nil { 54 t.Fatal(err) 55 } 56 assertNumDevicesAndKeys(tc, u, 2, 6) // no change 57 58 // Check it with real sig id 59 realUser, err := libkb.LoadUser(libkb.NewLoadUserByNameArg(tc.G, u.Username)) 60 if err != nil { 61 t.Fatal(err) 62 } 63 sigID := realUser.GetSigIDFromSeqno(FirstPGPSigSeqno) 64 revokeEngine = NewRevokeSigsEngine(tc.G, []string{sigID.String()}) 65 err = RunEngine2(m, revokeEngine) 66 if err != nil { 67 t.Fatal(err) 68 } 69 assertNumDevicesAndKeys(tc, u, 2, 5) // The first PGP key is gone. 70 71 // Revoking the same key again should fail. 72 revokeEngine = NewRevokeSigsEngine(tc.G, []string{sigID.String()}) 73 err = RunEngine2(m, revokeEngine) 74 if err == nil { 75 t.Fatal("RevokeSigs should have failed, but it didn't") 76 } 77 assertNumDevicesAndKeys(tc, u, 2, 5) // no change 78 79 // Revoke the second pgp key by prefix: 80 nextID := realUser.GetSigIDFromSeqno(SecondPGPSigSeqno).String() 81 82 // Short prefix should fail: 83 revokeEngine = NewRevokeSigsEngine(tc.G, []string{nextID[0:4]}) 84 err = RunEngine2(m, revokeEngine) 85 if err == nil { 86 t.Fatal("revoke with 4 char prefix didn't return err") 87 } 88 assertNumDevicesAndKeys(tc, u, 2, 5) // no change 89 90 // SigIDQueryMin-character prefix should work: 91 revokeEngine = NewRevokeSigsEngine(tc.G, []string{nextID[0:keybase1.SigIDQueryMin]}) 92 err = RunEngine2(m, revokeEngine) 93 if err != nil { 94 t.Fatal(err) 95 } 96 assertNumDevicesAndKeys(tc, u, 2, 4) // second pgp key gone 97 }