From 2eb08eb161ecd819de9f251d0699f95ae92e4f0b Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 18 Apr 2025 16:29:24 -0400 Subject: SigKeyring --- key/sig_keyring.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 key/sig_keyring.go (limited to 'key/sig_keyring.go') diff --git a/key/sig_keyring.go b/key/sig_keyring.go new file mode 100644 index 0000000..aeb6180 --- /dev/null +++ b/key/sig_keyring.go @@ -0,0 +1,33 @@ +package key + +import ( + "bytes" + "github.com/keybase/saltpack" + "slices" +) + +type SigKeyring []SigPublicKey + +func (ring *SigKeyring) Import(key SigPublicKey) { + i, ok := slices.BinarySearchFunc(*ring, key, cmpSigPublicKey) + if ok { + return // key already in keyring. + } + *ring = slices.Insert(*ring, i, key) +} + +func (ring SigKeyring) LookupSigningPublicKey(kid []byte) saltpack.SigningPublicKey { + if len(kid) != len(SigPublicKey{}) { + return nil + } + key := SigPublicKey(kid) + i, ok := slices.BinarySearchFunc(ring, key, cmpSigPublicKey) + if !ok { + return nil // key not in keyring. + } + return ring[i] +} + +func cmpSigPublicKey(a, b SigPublicKey) int { + return bytes.Compare(a[:], b[:]) +} -- cgit v1.2.3