Merge ""veyron/runtimes/google/rt": Make VeyronCredentials take precendence over an agent"
diff --git a/security/util.go b/security/util.go
index 75e5757..f7cff3f 100644
--- a/security/util.go
+++ b/security/util.go
@@ -12,7 +12,6 @@
 	"io/ioutil"
 
 	"v.io/core/veyron2/security"
-	"v.io/core/veyron2/vom"
 )
 
 const ecPrivateKeyPEMType = "EC PRIVATE KEY"
@@ -92,17 +91,3 @@
 
 	return pem.Encode(w, pemKey)
 }
-
-// ThirdPartyCaveats returns the set of security.ThirdPartyCaveats
-// that could be successfully decoded from the provided caveat bytes.
-func ThirdPartyCaveats(caveats ...security.Caveat) []security.ThirdPartyCaveat {
-	var tpCaveats []security.ThirdPartyCaveat
-	for _, c := range caveats {
-		var t security.ThirdPartyCaveat
-		if err := vom.Decode(c.ValidatorVOM, &t); err != nil {
-			continue
-		}
-		tpCaveats = append(tpCaveats, t)
-	}
-	return tpCaveats
-}
diff --git a/security/util_test.go b/security/util_test.go
index e39e356..c04e384 100644
--- a/security/util_test.go
+++ b/security/util_test.go
@@ -7,9 +7,6 @@
 	"crypto/rand"
 	"reflect"
 	"testing"
-
-	"v.io/core/veyron2/security"
-	"v.io/core/veyron2/vdl"
 )
 
 func TestLoadSavePEMKey(t *testing.T) {
@@ -64,63 +61,3 @@
 		t.Fatalf("expected(nil, PassphraseError), instead got (%v, %v)", loadedKey, err)
 	}
 }
-
-// fpCaveat implements security.CaveatValidator.
-type fpCaveat struct{}
-
-func (fpCaveat) Validate(security.Context) error { return nil }
-
-// tpCaveat implements security.ThirdPartyCaveat.
-type tpCaveat struct{}
-
-func (tpCaveat) Validate(security.Context) (err error)             { return }
-func (tpCaveat) ID() (id string)                                   { return }
-func (tpCaveat) Location() (loc string)                            { return }
-func (tpCaveat) Requirements() (r security.ThirdPartyRequirements) { return }
-func (tpCaveat) Dischargeable(security.Context) (err error)        { return }
-
-func TestCaveatUtil(t *testing.T) {
-	type C []security.Caveat
-	type V []security.CaveatValidator
-	type TP []security.ThirdPartyCaveat
-
-	newCaveat := func(v security.CaveatValidator) security.Caveat {
-		c, err := security.NewCaveat(v)
-		if err != nil {
-			t.Fatalf("failed to create Caveat from validator %T: %v", v, c)
-		}
-		return c
-	}
-
-	var (
-		fp      fpCaveat
-		tp      tpCaveat
-		invalid = security.Caveat{ValidatorVOM: []byte("invalid")}
-	)
-	testdata := []struct {
-		caveats    []security.Caveat
-		validators []security.CaveatValidator
-		tpCaveats  []security.ThirdPartyCaveat
-	}{
-		{nil, nil, nil},
-		{C{newCaveat(fp)}, V{fp}, nil},
-		{C{newCaveat(tp)}, V{tp}, TP{tp}},
-		{C{newCaveat(fp), newCaveat(tp)}, V{fp, tp}, TP{tp}},
-	}
-	for _, d := range testdata {
-		// Test ThirdPartyCaveats.
-		if got := ThirdPartyCaveats(d.caveats...); !reflect.DeepEqual(got, d.tpCaveats) {
-			t.Errorf("ThirdPartyCaveats(%v): got: %#v, want: %#v", d.caveats, got, d.tpCaveats)
-			continue
-		}
-		if got := ThirdPartyCaveats(append(d.caveats, invalid)...); !reflect.DeepEqual(got, d.tpCaveats) {
-			t.Errorf("ThirdPartyCaveats(%v, invalid): got: %#v, want: %#v", d.caveats, got, d.tpCaveats)
-			continue
-		}
-	}
-}
-
-func init() {
-	vdl.Register(&fpCaveat{})
-	vdl.Register(&tpCaveat{})
-}
diff --git a/services/identity/auditor/blessing_auditor.go b/services/identity/auditor/blessing_auditor.go
index 071ca25..cd540e9 100644
--- a/services/identity/auditor/blessing_auditor.go
+++ b/services/identity/auditor/blessing_auditor.go
@@ -6,7 +6,6 @@
 	"strings"
 	"time"
 
-	vsecurity "v.io/core/veyron/security"
 	"v.io/core/veyron/security/audit"
 	"v.io/core/veyron2/security"
 	"v.io/core/veyron2/vom"
@@ -126,8 +125,10 @@
 }
 
 func revocationCaveatID(caveats []security.Caveat) string {
-	for _, tpcav := range vsecurity.ThirdPartyCaveats(caveats...) {
-		return tpcav.ID()
+	for _, cav := range caveats {
+		if tp := cav.ThirdPartyDetails(); tp != nil {
+			return tp.ID()
+		}
 	}
 	return ""
 }
diff --git a/services/identity/revocation/revocation_test.go b/services/identity/revocation/revocation_test.go
index 3f6e357..4dd214d 100644
--- a/services/identity/revocation/revocation_test.go
+++ b/services/identity/revocation/revocation_test.go
@@ -11,7 +11,6 @@
 	"v.io/core/veyron2"
 	"v.io/core/veyron2/context"
 	"v.io/core/veyron2/security"
-	"v.io/core/veyron2/vom"
 )
 
 func revokerSetup(t *testing.T, ctx *context.T) (dischargerKey security.PublicKey, dischargerEndpoint string, revoker RevocationManager, closeFunc func()) {
@@ -48,26 +47,25 @@
 	if err != nil {
 		t.Fatalf("failed to create revocation caveat: %s", err)
 	}
-	var cav security.ThirdPartyCaveat
-	if err := vom.Decode(caveat.ValidatorVOM, &cav); err != nil {
-		t.Fatalf("failed to create decode tp caveat: %s", err)
+	tp := caveat.ThirdPartyDetails()
+	if tp == nil {
+		t.Fatalf("failed to extract third party details from caveat %v", caveat)
 	}
 
 	var impetus security.DischargeImpetus
-
-	if _, err = discharger.Discharge(ctx, cav, impetus); err != nil {
+	if _, err = discharger.Discharge(ctx, tp, impetus); err != nil {
 		t.Fatalf("failed to get discharge: %s", err)
 	}
-	if err = revoker.Revoke(cav.ID()); err != nil {
+	if err = revoker.Revoke(tp.ID()); err != nil {
 		t.Fatalf("failed to revoke: %s", err)
 	}
-	if discharge, err := discharger.Discharge(ctx, cav, impetus); err == nil || discharge != nil {
+	if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
 		t.Fatalf("got a discharge for a revoked caveat: %s", err)
 	}
-	if err = revoker.Revoke(cav.ID()); err != nil {
+	if err = revoker.Revoke(tp.ID()); err != nil {
 		t.Fatalf("failed to revoke again: %s", err)
 	}
-	if discharge, err := discharger.Discharge(ctx, cav, impetus); err == nil || discharge != nil {
+	if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
 		t.Fatalf("got a discharge for a doubly revoked caveat: %s", err)
 	}
 }