+ return (u_char *)ext + ntohs(id.h.len);
+}
+
+static u_char *
+isakmp_cert_print(struct isakmp_gen *ext, u_char *ep, u_int32_t phase,
+ u_int32_t doi0, u_int32_t proto0)
+{
+ struct isakmp_pl_cert *p, cert;
+ static char *certstr[] = {
+ "none", "pkcs7", "pgp", "dns",
+ "x509sign", "x509ke", "kerberos", "crl",
+ "arl", "spki", "x509attr",
+ };
+
+ printf("%s:", NPSTR(ISAKMP_NPTYPE_CERT));
+
+ p = (struct isakmp_pl_cert *)ext;
+ safememcpy(&cert, ext, sizeof(cert));
+ printf(" len=%d", ntohs(cert.h.len) - 4);
+ printf(" type=%s", STR_OR_ID((cert.encode), certstr));
+ if (2 < vflag && 4 < ntohs(cert.h.len)) {
+ printf(" ");
+ rawprint((caddr_t)(ext + 1), ntohs(cert.h.len) - 4);
+ }
+ return (u_char *)ext + ntohs(cert.h.len);
+}
+
+static u_char *
+isakmp_cr_print(struct isakmp_gen *ext, u_char *ep, u_int32_t phase,
+ u_int32_t doi0, u_int32_t proto0)
+{
+ struct isakmp_pl_cert *p, cert;
+ static char *certstr[] = {
+ "none", "pkcs7", "pgp", "dns",
+ "x509sign", "x509ke", "kerberos", "crl",
+ "arl", "spki", "x509attr",
+ };
+
+ printf("%s:", NPSTR(ISAKMP_NPTYPE_CR));
+
+ p = (struct isakmp_pl_cert *)ext;
+ safememcpy(&cert, ext, sizeof(cert));
+ printf(" len=%d", ntohs(cert.h.len) - 4);
+ printf(" type=%s", STR_OR_ID((cert.encode), certstr));
+ if (2 < vflag && 4 < ntohs(cert.h.len)) {
+ printf(" ");
+ rawprint((caddr_t)(ext + 1), ntohs(cert.h.len) - 4);
+ }
+ return (u_char *)ext + ntohs(cert.h.len);