diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-04-18 16:29:24 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-04-18 16:29:24 -0400 |
| commit | 2eb08eb161ecd819de9f251d0699f95ae92e4f0b (patch) | |
| tree | 78969941dab9f44580e8c4fb2db9554bc887e343 /key/sig_keyring.go | |
| parent | ed2c0b5c804a9fb8061e0df022fd2e0961cf5071 (diff) | |
| download | hose-2eb08eb161ecd819de9f251d0699f95ae92e4f0b.zip | |
SigKeyring
Diffstat (limited to 'key/sig_keyring.go')
| -rw-r--r-- | key/sig_keyring.go | 33 |
1 files changed, 33 insertions, 0 deletions
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[:]) +} |