#!/usr/ug/bin/perl5
#			vim:fo=croql:cin:com=\:#

use strict;
use Getopt::Std;
use vars qw($opt_i $opt_v $opt_k);


getopt('');

$/= 0x100;
my $f;
for $f (@ARGV) {
	open(F, $f) || die "can't open $f";
	binmode(F);

	my $file= <>;
	my $magic= substr($file, 0, 4);
	$file= substr($file, 4);
	my($id, $idp);
	if ($magic eq "\x68\x13\x0\x1") {
		print "version 1 private key\n" if defined($opt_v);
		$file =~ /([^\0]*\0)(.*)/;
		$id= $1;
		$idp= $1;
	}
	else {
		print "version 2 private key\n" if defined($opt_v);
		my $chars= unpack("N", $file);
		$file= substr($file, 4);
		$id= substr($file, 0, 2 * $chars);
		$idp= $id;
	}

	$idp =~ s/\0//g;
	my $key= substr($file, length($id));

	printf "%s\n", $idp if defined($opt_i);
	print "\n" if ((defined($opt_i) || defined($opt_v)) && !defined($opt_k));

	if (!defined($opt_k)) {
		my($i, $j);
		$j= 0;
		for $i (unpack("C*", $key)) {
			printf "\n" if ($j % 16 == 0) && $j;
			printf "%07o ", $j if ($j % 16 == 0);
			printf("%02x ", $i);
			$j++;
		}
	}

	print "\n";
}

