code: func NewKeyring(keys [][]byte, primaryKey []byte) (*Keyring, error) {
  	keyring := &Keyring{}
  	keyring.init()
  
  	if len(keys) > 0 || len(primaryKey) > 0 {
  		if len(primaryKey) == 0 {
  			return nil, fmt.Errorf("Empty primary key not allowed")
  		}
  		if err := keyring.AddKey(primaryKey); err != nil {
  			return nil, err
  		}
  		for _, key := range keys {
  			if err := keyring.AddKey(key); err != nil {
  				return nil, err
  			}
  		}
  	}
  
  	return keyring, nil
  }
docs: // NewKeyring constructs a new container for a set of encryption keys. The
  // keyring contains all key data used internally by memberlist.
  //
  // While creating a new keyring, you must do one of:
  //   - Omit keys and primary key, effectively disabling encryption
  //   - Pass a set of keys plus the primary key
  //   - Pass only a primary key
  //
  // If only a primary key is passed, then it will be automatically added to the
  // keyring. If creating a keyring with multiple keys, one key must be designated
  // primary by passing it as the primaryKey. If the primaryKey does not exist in
  // the list of secondary keys, it will be automatically added at position 0.
  //
  // A key should be either 16, 24, or 32 bytes to select AES-128,
  // AES-192, or AES-256.