diff options
Diffstat (limited to 'utils/parse_client_ciphers.pl')
-rwxr-xr-x | utils/parse_client_ciphers.pl | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/utils/parse_client_ciphers.pl b/utils/parse_client_ciphers.pl new file mode 100755 index 0000000..bad39e2 --- /dev/null +++ b/utils/parse_client_ciphers.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl + +use strict; +use Data::Dumper; + +my @spec; +my %ciphers; + +# Turn cipher section of page like this https://www.ssllabs.com/ssltest/viewClient.html?name=Android&version=4.0.4 +# into an openssl cipher spec + +foreach my $line ( split /\n/, `../bin/openssl.Linux.x86_64 ciphers -V 'ALL:COMPLEMENTOFALL:\@STRENGTH'`) { + my @fields = split /\s+/, $line; + my $hex = ""; + foreach my $byte ( split /,/, $fields[1] ) { + $byte = lc $byte; + $byte =~ s/^0x//; + $hex .= $byte; + } + $hex =~ s/^0+//; + $ciphers{"0x$hex"} = $fields[3]; +} + +while (<>) { + chomp; + if ( $_ =~ /^(TLS|SSL)/ ) { + if ( $_ !~ /^TLS_EMPTY_RENEGOTIATION_INFO_SCSV/ ) { + $_ =~ /(0x[0-9a-f]+)/; + if ( $1 ) { + push @spec, $ciphers{$1}; + unless ( $ciphers{$1} ) { + die "Unable to find cipher for $1"; + } + } else { + print "** $_\n"; + } + } + } +} +print join ":", @spec; +print "\n"; +my $count = @spec; +print "$count ciphers\n"; + +# vim:ts=5:sw=5:expandtab |