// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package discovery

import (
	"v.io/v23/discovery"
)

type EncryptionAlgorithm int32
type EncryptionKey []byte

const (
	NoEncryption   = EncryptionAlgorithm(0)
	TestEncryption = EncryptionAlgorithm(1)
	IbeEncryption  = EncryptionAlgorithm(2)
)

type Uuid []byte

// Advertisement holds a set of service properties to advertise.
type Advertisement struct {
	Service discovery.Service

	// The service UUID to advertise.
	ServiceUuid Uuid

	// Type of encryption applied to the advertisement so that it can
	// only be decoded by authorized principals.
	EncryptionAlgorithm EncryptionAlgorithm
	// If the advertisement is encrypted, then the data required to
	// decrypt it. The format of this data is a function of the algorithm.
	EncryptionKeys []EncryptionKey

	// TODO(jhahn): Add proximity.
	// TODO(jhahn): Use proximity for Lost.
	Lost bool
}

