// This file was auto-generated by the veyron vdl tool.
// Source: wire.vdl

package server

import (
	"v.io/core/veyron2/security"

	// The non-user imports are prefixed with "__" to prevent collisions.
	__veyron2 "v.io/core/veyron2"
	__context "v.io/core/veyron2/context"
	__ipc "v.io/core/veyron2/ipc"
	__vdlutil "v.io/core/veyron2/vdl/vdlutil"
	__wiretype "v.io/core/veyron2/wiretype"
)

// TODO(toddw): Remove this line once the new signature support is done.
// It corrects a bug where __wiretype is unused in VDL pacakges where only
// bootstrap types are used on interfaces.
const _ = __wiretype.TypeIDInvalid

// AgentClientMethods is the client interface
// containing Agent methods.
type AgentClientMethods interface {
	Bless(ctx *__context.T, key []byte, wit security.WireBlessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat, opts ...__ipc.CallOpt) (security.WireBlessings, error)
	BlessSelf(ctx *__context.T, name string, caveats []security.Caveat, opts ...__ipc.CallOpt) (security.WireBlessings, error)
	Sign(ctx *__context.T, message []byte, opts ...__ipc.CallOpt) (security.Signature, error)
	MintDischarge(ctx *__context.T, tp __vdlutil.Any, caveat security.Caveat, additionalCaveats []security.Caveat, opts ...__ipc.CallOpt) (__vdlutil.Any, error)
	PublicKey(*__context.T, ...__ipc.CallOpt) ([]byte, error)
	BlessingsByName(ctx *__context.T, name security.BlessingPattern, opts ...__ipc.CallOpt) ([]security.WireBlessings, error)
	BlessingsInfo(ctx *__context.T, blessings security.WireBlessings, opts ...__ipc.CallOpt) ([]string, error)
	AddToRoots(ctx *__context.T, blessing security.WireBlessings, opts ...__ipc.CallOpt) error
	BlessingStoreSet(ctx *__context.T, blessings security.WireBlessings, forPeers security.BlessingPattern, opts ...__ipc.CallOpt) (security.WireBlessings, error)
	BlessingStoreForPeer(ctx *__context.T, peerBlessings []string, opts ...__ipc.CallOpt) (security.WireBlessings, error)
	BlessingStoreSetDefault(ctx *__context.T, blessings security.WireBlessings, opts ...__ipc.CallOpt) error
	BlessingStoreDefault(*__context.T, ...__ipc.CallOpt) (security.WireBlessings, error)
	BlessingStorePeerBlessings(*__context.T, ...__ipc.CallOpt) (map[security.BlessingPattern]security.WireBlessings, error)
	BlessingStoreDebugString(*__context.T, ...__ipc.CallOpt) (string, error)
	BlessingRootsAdd(ctx *__context.T, root []byte, pattern security.BlessingPattern, opts ...__ipc.CallOpt) error
	BlessingRootsRecognized(ctx *__context.T, root []byte, blessing string, opts ...__ipc.CallOpt) error
	BlessingRootsDebugString(*__context.T, ...__ipc.CallOpt) (string, error)
}

// AgentClientStub adds universal methods to AgentClientMethods.
type AgentClientStub interface {
	AgentClientMethods
	__ipc.UniversalServiceMethods
}

// AgentClient returns a client stub for Agent.
func AgentClient(name string, opts ...__ipc.BindOpt) AgentClientStub {
	var client __ipc.Client
	for _, opt := range opts {
		if clientOpt, ok := opt.(__ipc.Client); ok {
			client = clientOpt
		}
	}
	return implAgentClientStub{name, client}
}

type implAgentClientStub struct {
	name   string
	client __ipc.Client
}

func (c implAgentClientStub) c(ctx *__context.T) __ipc.Client {
	if c.client != nil {
		return c.client
	}
	return __veyron2.GetClient(ctx)
}

func (c implAgentClientStub) Bless(ctx *__context.T, i0 []byte, i1 security.WireBlessings, i2 string, i3 security.Caveat, i4 []security.Caveat, opts ...__ipc.CallOpt) (o0 security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "Bless", []interface{}{i0, i1, i2, i3, i4}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessSelf(ctx *__context.T, i0 string, i1 []security.Caveat, opts ...__ipc.CallOpt) (o0 security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessSelf", []interface{}{i0, i1}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) Sign(ctx *__context.T, i0 []byte, opts ...__ipc.CallOpt) (o0 security.Signature, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "Sign", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) MintDischarge(ctx *__context.T, i0 __vdlutil.Any, i1 security.Caveat, i2 []security.Caveat, opts ...__ipc.CallOpt) (o0 __vdlutil.Any, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "MintDischarge", []interface{}{i0, i1, i2}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) PublicKey(ctx *__context.T, opts ...__ipc.CallOpt) (o0 []byte, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "PublicKey", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingsByName(ctx *__context.T, i0 security.BlessingPattern, opts ...__ipc.CallOpt) (o0 []security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingsByName", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingsInfo(ctx *__context.T, i0 security.WireBlessings, opts ...__ipc.CallOpt) (o0 []string, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingsInfo", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) AddToRoots(ctx *__context.T, i0 security.WireBlessings, opts ...__ipc.CallOpt) (err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "AddToRoots", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStoreSet(ctx *__context.T, i0 security.WireBlessings, i1 security.BlessingPattern, opts ...__ipc.CallOpt) (o0 security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreSet", []interface{}{i0, i1}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStoreForPeer(ctx *__context.T, i0 []string, opts ...__ipc.CallOpt) (o0 security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreForPeer", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStoreSetDefault(ctx *__context.T, i0 security.WireBlessings, opts ...__ipc.CallOpt) (err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreSetDefault", []interface{}{i0}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStoreDefault(ctx *__context.T, opts ...__ipc.CallOpt) (o0 security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreDefault", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStorePeerBlessings(ctx *__context.T, opts ...__ipc.CallOpt) (o0 map[security.BlessingPattern]security.WireBlessings, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStorePeerBlessings", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingStoreDebugString(ctx *__context.T, opts ...__ipc.CallOpt) (o0 string, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreDebugString", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingRootsAdd(ctx *__context.T, i0 []byte, i1 security.BlessingPattern, opts ...__ipc.CallOpt) (err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsAdd", []interface{}{i0, i1}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingRootsRecognized(ctx *__context.T, i0 []byte, i1 string, opts ...__ipc.CallOpt) (err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsRecognized", []interface{}{i0, i1}, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) BlessingRootsDebugString(ctx *__context.T, opts ...__ipc.CallOpt) (o0 string, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsDebugString", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

func (c implAgentClientStub) Signature(ctx *__context.T, opts ...__ipc.CallOpt) (o0 __ipc.ServiceSignature, err error) {
	var call __ipc.Call
	if call, err = c.c(ctx).StartCall(ctx, c.name, "Signature", nil, opts...); err != nil {
		return
	}
	if ierr := call.Finish(&o0, &err); ierr != nil {
		err = ierr
	}
	return
}

// AgentServerMethods is the interface a server writer
// implements for Agent.
type AgentServerMethods interface {
	Bless(ctx __ipc.ServerContext, key []byte, wit security.WireBlessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.WireBlessings, error)
	BlessSelf(ctx __ipc.ServerContext, name string, caveats []security.Caveat) (security.WireBlessings, error)
	Sign(ctx __ipc.ServerContext, message []byte) (security.Signature, error)
	MintDischarge(ctx __ipc.ServerContext, tp __vdlutil.Any, caveat security.Caveat, additionalCaveats []security.Caveat) (__vdlutil.Any, error)
	PublicKey(__ipc.ServerContext) ([]byte, error)
	BlessingsByName(ctx __ipc.ServerContext, name security.BlessingPattern) ([]security.WireBlessings, error)
	BlessingsInfo(ctx __ipc.ServerContext, blessings security.WireBlessings) ([]string, error)
	AddToRoots(ctx __ipc.ServerContext, blessing security.WireBlessings) error
	BlessingStoreSet(ctx __ipc.ServerContext, blessings security.WireBlessings, forPeers security.BlessingPattern) (security.WireBlessings, error)
	BlessingStoreForPeer(ctx __ipc.ServerContext, peerBlessings []string) (security.WireBlessings, error)
	BlessingStoreSetDefault(ctx __ipc.ServerContext, blessings security.WireBlessings) error
	BlessingStoreDefault(__ipc.ServerContext) (security.WireBlessings, error)
	BlessingStorePeerBlessings(__ipc.ServerContext) (map[security.BlessingPattern]security.WireBlessings, error)
	BlessingStoreDebugString(__ipc.ServerContext) (string, error)
	BlessingRootsAdd(ctx __ipc.ServerContext, root []byte, pattern security.BlessingPattern) error
	BlessingRootsRecognized(ctx __ipc.ServerContext, root []byte, blessing string) error
	BlessingRootsDebugString(__ipc.ServerContext) (string, error)
}

// AgentServerStubMethods is the server interface containing
// Agent methods, as expected by ipc.Server.
// There is no difference between this interface and AgentServerMethods
// since there are no streaming methods.
type AgentServerStubMethods AgentServerMethods

// AgentServerStub adds universal methods to AgentServerStubMethods.
type AgentServerStub interface {
	AgentServerStubMethods
	// Describe the Agent interfaces.
	Describe__() []__ipc.InterfaceDesc
	// Signature will be replaced with Describe__.
	Signature(ctx __ipc.ServerContext) (__ipc.ServiceSignature, error)
}

// AgentServer returns a server stub for Agent.
// It converts an implementation of AgentServerMethods into
// an object that may be used by ipc.Server.
func AgentServer(impl AgentServerMethods) AgentServerStub {
	stub := implAgentServerStub{
		impl: impl,
	}
	// Initialize GlobState; always check the stub itself first, to handle the
	// case where the user has the Glob method defined in their VDL source.
	if gs := __ipc.NewGlobState(stub); gs != nil {
		stub.gs = gs
	} else if gs := __ipc.NewGlobState(impl); gs != nil {
		stub.gs = gs
	}
	return stub
}

type implAgentServerStub struct {
	impl AgentServerMethods
	gs   *__ipc.GlobState
}

func (s implAgentServerStub) Bless(ctx __ipc.ServerContext, i0 []byte, i1 security.WireBlessings, i2 string, i3 security.Caveat, i4 []security.Caveat) (security.WireBlessings, error) {
	return s.impl.Bless(ctx, i0, i1, i2, i3, i4)
}

func (s implAgentServerStub) BlessSelf(ctx __ipc.ServerContext, i0 string, i1 []security.Caveat) (security.WireBlessings, error) {
	return s.impl.BlessSelf(ctx, i0, i1)
}

func (s implAgentServerStub) Sign(ctx __ipc.ServerContext, i0 []byte) (security.Signature, error) {
	return s.impl.Sign(ctx, i0)
}

func (s implAgentServerStub) MintDischarge(ctx __ipc.ServerContext, i0 __vdlutil.Any, i1 security.Caveat, i2 []security.Caveat) (__vdlutil.Any, error) {
	return s.impl.MintDischarge(ctx, i0, i1, i2)
}

func (s implAgentServerStub) PublicKey(ctx __ipc.ServerContext) ([]byte, error) {
	return s.impl.PublicKey(ctx)
}

func (s implAgentServerStub) BlessingsByName(ctx __ipc.ServerContext, i0 security.BlessingPattern) ([]security.WireBlessings, error) {
	return s.impl.BlessingsByName(ctx, i0)
}

func (s implAgentServerStub) BlessingsInfo(ctx __ipc.ServerContext, i0 security.WireBlessings) ([]string, error) {
	return s.impl.BlessingsInfo(ctx, i0)
}

func (s implAgentServerStub) AddToRoots(ctx __ipc.ServerContext, i0 security.WireBlessings) error {
	return s.impl.AddToRoots(ctx, i0)
}

func (s implAgentServerStub) BlessingStoreSet(ctx __ipc.ServerContext, i0 security.WireBlessings, i1 security.BlessingPattern) (security.WireBlessings, error) {
	return s.impl.BlessingStoreSet(ctx, i0, i1)
}

func (s implAgentServerStub) BlessingStoreForPeer(ctx __ipc.ServerContext, i0 []string) (security.WireBlessings, error) {
	return s.impl.BlessingStoreForPeer(ctx, i0)
}

func (s implAgentServerStub) BlessingStoreSetDefault(ctx __ipc.ServerContext, i0 security.WireBlessings) error {
	return s.impl.BlessingStoreSetDefault(ctx, i0)
}

func (s implAgentServerStub) BlessingStoreDefault(ctx __ipc.ServerContext) (security.WireBlessings, error) {
	return s.impl.BlessingStoreDefault(ctx)
}

func (s implAgentServerStub) BlessingStorePeerBlessings(ctx __ipc.ServerContext) (map[security.BlessingPattern]security.WireBlessings, error) {
	return s.impl.BlessingStorePeerBlessings(ctx)
}

func (s implAgentServerStub) BlessingStoreDebugString(ctx __ipc.ServerContext) (string, error) {
	return s.impl.BlessingStoreDebugString(ctx)
}

func (s implAgentServerStub) BlessingRootsAdd(ctx __ipc.ServerContext, i0 []byte, i1 security.BlessingPattern) error {
	return s.impl.BlessingRootsAdd(ctx, i0, i1)
}

func (s implAgentServerStub) BlessingRootsRecognized(ctx __ipc.ServerContext, i0 []byte, i1 string) error {
	return s.impl.BlessingRootsRecognized(ctx, i0, i1)
}

func (s implAgentServerStub) BlessingRootsDebugString(ctx __ipc.ServerContext) (string, error) {
	return s.impl.BlessingRootsDebugString(ctx)
}

func (s implAgentServerStub) Globber() *__ipc.GlobState {
	return s.gs
}

func (s implAgentServerStub) Describe__() []__ipc.InterfaceDesc {
	return []__ipc.InterfaceDesc{AgentDesc}
}

// AgentDesc describes the Agent interface.
var AgentDesc __ipc.InterfaceDesc = descAgent

// descAgent hides the desc to keep godoc clean.
var descAgent = __ipc.InterfaceDesc{
	Name:    "Agent",
	PkgPath: "v.io/core/veyron/security/agent/server",
	Methods: []__ipc.MethodDesc{
		{
			Name: "Bless",
			InArgs: []__ipc.ArgDesc{
				{"key", ``},               // []byte
				{"wit", ``},               // security.WireBlessings
				{"extension", ``},         // string
				{"caveat", ``},            // security.Caveat
				{"additionalCaveats", ``}, // []security.Caveat
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessSelf",
			InArgs: []__ipc.ArgDesc{
				{"name", ``},    // string
				{"caveats", ``}, // []security.Caveat
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "Sign",
			InArgs: []__ipc.ArgDesc{
				{"message", ``}, // []byte
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.Signature
				{"", ``}, // error
			},
		},
		{
			Name: "MintDischarge",
			InArgs: []__ipc.ArgDesc{
				{"tp", ``},                // __vdlutil.Any
				{"caveat", ``},            // security.Caveat
				{"additionalCaveats", ``}, // []security.Caveat
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // __vdlutil.Any
				{"", ``}, // error
			},
		},
		{
			Name: "PublicKey",
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // []byte
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingsByName",
			InArgs: []__ipc.ArgDesc{
				{"name", ``}, // security.BlessingPattern
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // []security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingsInfo",
			InArgs: []__ipc.ArgDesc{
				{"blessings", ``}, // security.WireBlessings
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // []string
				{"", ``}, // error
			},
		},
		{
			Name: "AddToRoots",
			InArgs: []__ipc.ArgDesc{
				{"blessing", ``}, // security.WireBlessings
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStoreSet",
			InArgs: []__ipc.ArgDesc{
				{"blessings", ``}, // security.WireBlessings
				{"forPeers", ``},  // security.BlessingPattern
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStoreForPeer",
			InArgs: []__ipc.ArgDesc{
				{"peerBlessings", ``}, // []string
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStoreSetDefault",
			InArgs: []__ipc.ArgDesc{
				{"blessings", ``}, // security.WireBlessings
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStoreDefault",
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStorePeerBlessings",
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // map[security.BlessingPattern]security.WireBlessings
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingStoreDebugString",
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // string
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingRootsAdd",
			InArgs: []__ipc.ArgDesc{
				{"root", ``},    // []byte
				{"pattern", ``}, // security.BlessingPattern
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingRootsRecognized",
			InArgs: []__ipc.ArgDesc{
				{"root", ``},     // []byte
				{"blessing", ``}, // string
			},
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // error
			},
		},
		{
			Name: "BlessingRootsDebugString",
			OutArgs: []__ipc.ArgDesc{
				{"", ``}, // string
				{"", ``}, // error
			},
		},
	},
}

func (s implAgentServerStub) Signature(ctx __ipc.ServerContext) (__ipc.ServiceSignature, error) {
	// TODO(toddw): Replace with new Describe__ implementation.
	result := __ipc.ServiceSignature{Methods: make(map[string]__ipc.MethodSignature)}
	result.Methods["AddToRoots"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "blessing", Type: 74},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 75},
		},
	}
	result.Methods["Bless"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "key", Type: 66},
			{Name: "wit", Type: 74},
			{Name: "extension", Type: 3},
			{Name: "caveat", Type: 67},
			{Name: "additionalCaveats", Type: 68},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 74},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessSelf"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "name", Type: 3},
			{Name: "caveats", Type: 68},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 74},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingRootsAdd"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "root", Type: 66},
			{Name: "pattern", Type: 77},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingRootsDebugString"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 3},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingRootsRecognized"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "root", Type: 66},
			{Name: "blessing", Type: 3},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStoreDebugString"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 3},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStoreDefault"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 74},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStoreForPeer"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "peerBlessings", Type: 61},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 74},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStorePeerBlessings"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 79},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStoreSet"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "blessings", Type: 74},
			{Name: "forPeers", Type: 77},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 74},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingStoreSetDefault"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "blessings", Type: 74},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingsByName"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "name", Type: 77},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 78},
			{Name: "", Type: 75},
		},
	}
	result.Methods["BlessingsInfo"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "blessings", Type: 74},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 61},
			{Name: "", Type: 75},
		},
	}
	result.Methods["MintDischarge"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "tp", Type: 76},
			{Name: "caveat", Type: 67},
			{Name: "additionalCaveats", Type: 68},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 76},
			{Name: "", Type: 75},
		},
	}
	result.Methods["PublicKey"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 66},
			{Name: "", Type: 75},
		},
	}
	result.Methods["Sign"] = __ipc.MethodSignature{
		InArgs: []__ipc.MethodArgument{
			{Name: "message", Type: 66},
		},
		OutArgs: []__ipc.MethodArgument{
			{Name: "", Type: 70},
			{Name: "", Type: 75},
		},
	}

	result.TypeDefs = []__vdlutil.Any{
		__wiretype.NamedPrimitiveType{Type: 0x32, Name: "byte", Tags: []string(nil)}, __wiretype.SliceType{Elem: 0x41, Name: "", Tags: []string(nil)}, __wiretype.StructType{
			[]__wiretype.FieldType{
				__wiretype.FieldType{Type: 0x42, Name: "ValidatorVOM"},
			},
			"v.io/core/veyron2/security.Caveat", []string(nil)},
		__wiretype.SliceType{Elem: 0x43, Name: "", Tags: []string(nil)}, __wiretype.NamedPrimitiveType{Type: 0x3, Name: "v.io/core/veyron2/security.Hash", Tags: []string(nil)}, __wiretype.StructType{
			[]__wiretype.FieldType{
				__wiretype.FieldType{Type: 0x42, Name: "Purpose"},
				__wiretype.FieldType{Type: 0x45, Name: "Hash"},
				__wiretype.FieldType{Type: 0x42, Name: "R"},
				__wiretype.FieldType{Type: 0x42, Name: "S"},
			},
			"v.io/core/veyron2/security.Signature", []string(nil)},
		__wiretype.StructType{
			[]__wiretype.FieldType{
				__wiretype.FieldType{Type: 0x3, Name: "Extension"},
				__wiretype.FieldType{Type: 0x42, Name: "PublicKey"},
				__wiretype.FieldType{Type: 0x44, Name: "Caveats"},
				__wiretype.FieldType{Type: 0x46, Name: "Signature"},
			},
			"v.io/core/veyron2/security.Certificate", []string(nil)},
		__wiretype.SliceType{Elem: 0x47, Name: "", Tags: []string(nil)}, __wiretype.SliceType{Elem: 0x48, Name: "", Tags: []string(nil)}, __wiretype.StructType{
			[]__wiretype.FieldType{
				__wiretype.FieldType{Type: 0x49, Name: "CertificateChains"},
			},
			"v.io/core/veyron2/security.WireBlessings", []string(nil)},
		__wiretype.NamedPrimitiveType{Type: 0x1, Name: "error", Tags: []string(nil)}, __wiretype.NamedPrimitiveType{Type: 0x1, Name: "anydata", Tags: []string(nil)}, __wiretype.NamedPrimitiveType{Type: 0x3, Name: "v.io/core/veyron2/security.BlessingPattern", Tags: []string(nil)}, __wiretype.SliceType{Elem: 0x4a, Name: "", Tags: []string(nil)}, __wiretype.MapType{Key: 0x4d, Elem: 0x4a, Name: "", Tags: []string(nil)}}

	return result, nil
}
