#!/bin/sh

# mysas - inspired by dan at geek dot com dot au
#
# parses output of "setkey -D" to build argument to tcpdump's -E flag for
# decoding ESP payload.
#
# usage:
#
# tcpdump -vv -s0 -E "`mysas`" esp
#	

setkey -D | perl -e '
 $sa=0;
 while (<>) {
    if (/^[0-9][^\s]*\s([^\s]*)/) {
      $sa++;
      $h{$sa}{dip}=$1;
#      printf ("dip: $1\n");
    } elsif (/spi=\d+\((0x[0-9a-f]*)/) {
      $h{$sa}{spi}=$1;
#      printf ("spi: $1\n");
    } elsif (/^\s+E:\s+([^\s]*)\s+([^\s].*)/) {
      $algo=$1; $secret=$2;
      $secret =~ s/\s+//g;
      $key="$algo-hmac96:0x$secret";
      $h{$sa}{key}=$key;
#      printf ("key: $1\n");
    }
 }

 foreach $sa (sort keys(%h)) {
   $dip=$h{$sa}{dip};
   $spi=$h{$sa}{spi};
   $key=$h{$sa}{key};

#   printf ">>> ($sa:$dip:$spi:$key)\n";
   if (defined($spi) && defined($key) && defined($dip)) {
     $dashe = (defined($dashe) ? $dashe . "," : "") 
       . "$spi\@$dip $key";
     $spi=$dpi=$key=undef;
#     printf "defined dashe: $dashe\n";
   }
 }

# printf "\n";
 printf "$dashe";'
# printf "\n";


