package model import "errors" // KeyType provides a wrapper for a generic public key type identifier (could be an onion address, a zcash address etc.) type KeyType string const ( // KeyTypeServerOnion - a cwtch address KeyTypeServerOnion = KeyType("bulletin_board_onion") // bulletin board // KeyTypeTokenOnion - a cwtch peer with a PoW based token protocol KeyTypeTokenOnion = KeyType("token_service_onion") //KeyTypePrivacyPass - a privacy pass based token server KeyTypePrivacyPass = KeyType("privacy_pass_public_key") ) // Key provides a wrapper for a generic public key identifier (could be an onion address, a zcash address etc.) type Key string // KeyBundle manages a collection of related keys for various different services. type KeyBundle struct { Keys map[KeyType]Key } // HasKeyType returns true if the bundle has a public key of a given type. func (kb *KeyBundle) HasKeyType(keytype KeyType) bool { _, exists := kb.Keys[keytype] return exists } // GetKey retrieves a key with a given type from the bundle func (kb *KeyBundle) GetKey(keytype KeyType) (Key, error) { key, exists := kb.Keys[keytype] if exists { return key, nil } return "", errors.New("no such key") } // AttributeBundle returns a map that can be used as part of a peer attribute bundle func (kb *KeyBundle) AttributeBundle() map[string]string { ab := make(map[string]string) for k, v := range kb.Keys { ab[string(k)] = string(v) } return ab }