security: UUID based caveat registration (Step 3/3)

More background in:
https://vanadium-review.googlesource.com/#/c/2635/
(Commit: 514b0ece4f0777911574ade2744995639acf3ec6)

In this final step, the ValidatorVOM field is gone.

Renaming/re-organizing packages (e.g., renaming v.io/core/veyron2/security to
v.io/core/security) should now be possible without breaking any existing
blessings out there.

Change-Id: I3ebae4f832d65f25a9bcb7004e1d5e35919f9137
diff --git a/services/identity/revocation/revocation_test.go b/services/identity/revocation/revocation_test.go
index 4dd214d..2aa0291 100644
--- a/services/identity/revocation/revocation_test.go
+++ b/services/identity/revocation/revocation_test.go
@@ -53,19 +53,19 @@
 	}
 
 	var impetus security.DischargeImpetus
-	if _, err = discharger.Discharge(ctx, tp, impetus); err != nil {
+	if _, err = discharger.Discharge(ctx, caveat, impetus); err != nil {
 		t.Fatalf("failed to get discharge: %s", err)
 	}
 	if err = revoker.Revoke(tp.ID()); err != nil {
 		t.Fatalf("failed to revoke: %s", err)
 	}
-	if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
+	if discharge, err := discharger.Discharge(ctx, caveat, impetus); err == nil || discharge != nil {
 		t.Fatalf("got a discharge for a revoked caveat: %s", err)
 	}
 	if err = revoker.Revoke(tp.ID()); err != nil {
 		t.Fatalf("failed to revoke again: %s", err)
 	}
-	if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
+	if discharge, err := discharger.Discharge(ctx, caveat, impetus); err == nil || discharge != nil {
 		t.Fatalf("got a discharge for a doubly revoked caveat: %s", err)
 	}
 }
diff --git a/services/security/discharger.vdl b/services/security/discharger.vdl
index 7d4b527..42f2d1c 100644
--- a/services/security/discharger.vdl
+++ b/services/security/discharger.vdl
@@ -9,7 +9,5 @@
   // this caveat.
   //
   // TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
-  // TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
-  // security.Caveat.ValidatorVOM goes away.
-  Discharge(Caveat any, Impetus security.DischargeImpetus) (Discharge any | error)
+  Discharge(Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge any | error)
 }
diff --git a/services/security/discharger.vdl.go b/services/security/discharger.vdl.go
index e0f7d09..3b4f123 100644
--- a/services/security/discharger.vdl.go
+++ b/services/security/discharger.vdl.go
@@ -24,9 +24,7 @@
 	// this caveat.
 	//
 	// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
-	// TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
-	// security.Caveat.ValidatorVOM goes away.
-	Discharge(ctx *context.T, Caveat vdl.AnyRep, Impetus security.DischargeImpetus, opts ...ipc.CallOpt) (Discharge vdl.AnyRep, err error)
+	Discharge(ctx *context.T, Caveat security.Caveat, Impetus security.DischargeImpetus, opts ...ipc.CallOpt) (Discharge vdl.AnyRep, err error)
 }
 
 // DischargerClientStub adds universal methods to DischargerClientMethods.
@@ -58,7 +56,7 @@
 	return veyron2.GetClient(ctx)
 }
 
-func (c implDischargerClientStub) Discharge(ctx *context.T, i0 vdl.AnyRep, i1 security.DischargeImpetus, opts ...ipc.CallOpt) (o0 vdl.AnyRep, err error) {
+func (c implDischargerClientStub) Discharge(ctx *context.T, i0 security.Caveat, i1 security.DischargeImpetus, opts ...ipc.CallOpt) (o0 vdl.AnyRep, err error) {
 	var call ipc.Call
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Discharge", []interface{}{i0, i1}, opts...); err != nil {
 		return
@@ -79,9 +77,7 @@
 	// this caveat.
 	//
 	// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
-	// TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
-	// security.Caveat.ValidatorVOM goes away.
-	Discharge(ctx ipc.ServerContext, Caveat vdl.AnyRep, Impetus security.DischargeImpetus) (Discharge vdl.AnyRep, err error)
+	Discharge(ctx ipc.ServerContext, Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge vdl.AnyRep, err error)
 }
 
 // DischargerServerStubMethods is the server interface containing
@@ -119,7 +115,7 @@
 	gs   *ipc.GlobState
 }
 
-func (s implDischargerServerStub) Discharge(ctx ipc.ServerContext, i0 vdl.AnyRep, i1 security.DischargeImpetus) (vdl.AnyRep, error) {
+func (s implDischargerServerStub) Discharge(ctx ipc.ServerContext, i0 security.Caveat, i1 security.DischargeImpetus) (vdl.AnyRep, error) {
 	return s.impl.Discharge(ctx, i0, i1)
 }
 
@@ -142,9 +138,9 @@
 	Methods: []ipc.MethodDesc{
 		{
 			Name: "Discharge",
-			Doc:  "// Discharge is called by a principal that holds a blessing with a third\n// party caveat and seeks to get a discharge that proves the fulfillment of\n// this caveat.\n//\n// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.\n// TODO(ataly,ashankar): Type of Caveat should become security.Caveat once\n// security.Caveat.ValidatorVOM goes away.",
+			Doc:  "// Discharge is called by a principal that holds a blessing with a third\n// party caveat and seeks to get a discharge that proves the fulfillment of\n// this caveat.\n//\n// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.",
 			InArgs: []ipc.ArgDesc{
-				{"Caveat", ``},  // vdl.AnyRep
+				{"Caveat", ``},  // security.Caveat
 				{"Impetus", ``}, // security.DischargeImpetus
 			},
 			OutArgs: []ipc.ArgDesc{
diff --git a/services/security/discharger/discharger.go b/services/security/discharger/discharger.go
index e32b8fc..a61aea1 100644
--- a/services/security/discharger/discharger.go
+++ b/services/security/discharger/discharger.go
@@ -8,36 +8,16 @@
 	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/security"
 	"v.io/core/veyron2/vdl"
-	"v.io/core/veyron2/vom"
 )
 
 // dischargerd issues discharges for all caveats present in the current
 // namespace with no additional caveats iff the caveat is valid.
 type dischargerd struct{}
 
-func (dischargerd) Discharge(ctx ipc.ServerContext, caveatAny vdl.AnyRep, _ security.DischargeImpetus) (vdl.AnyRep, error) {
-	// TODO(ashankar): When security.Caveat.ValidatorVOM goes away
-	// (before the release), then this whole "if..else if" block below
-	// should vanish, we'll start with the:
-	// tp := caveat.ThirdPartyDetails()
-	// line (and "caveatAny vdl.AnyRep" will become "caveat security.Caveat")
-	var caveat security.Caveat
-	if c, ok := caveatAny.(security.Caveat); ok {
-		caveat = c
-	} else if tp, ok := caveatAny.(security.ThirdPartyCaveat); ok {
-		// This whole block is a temporary hack that works
-		// because there is only a single valid implementation
-		// of security.ThirdPartyCaveat.
-		// It will go away before the release. See TODO above.
-		copy(caveat.Id[:], security.PublicKeyThirdPartyCaveatX.Id[:])
-		var err error
-		if caveat.ParamVom, err = vom.Encode(tp); err != nil {
-			return nil, fmt.Errorf("hack error: %v", err)
-		}
-	}
+func (dischargerd) Discharge(ctx ipc.ServerContext, caveat security.Caveat, _ security.DischargeImpetus) (vdl.AnyRep, error) {
 	tp := caveat.ThirdPartyDetails()
 	if tp == nil {
-		return nil, fmt.Errorf("type %T(%v) does not represent a third party caveat")
+		return nil, fmt.Errorf("Caveat %v does not represent a third party caveat", caveat)
 	}
 	if err := tp.Dischargeable(ctx); err != nil {
 		return nil, fmt.Errorf("third-party caveat %v cannot be discharged for this context: %v", tp, err)