#!/usr/local/bin/perl -w

use strict;
use Getopt::Long;

use PGP::UserId;
use PGP::CmdLine;
use PGP::RandomStream;
use PGP::PublicKeyRing;
use PGP::SecretKeyRing;
use PGP::PublicKeyRingEntry;
use PGP::SecretKeyRingEntry;
use PGP::SecretKeyCertificate;


my $size = 1024;
my $name;
my $public_file = "pubring.pgp";
my $secret_file = "secring.pgp";
my $passphrase;

my %opts = (
	'-size=i' => \$size,
	'-id=s' => \$name,
	'-public_file=s' => \$public_file,
	'-secret_file=s' => \$secret_file,
	'-passphrase=s' => \$passphrase,
);

sub usage
{
    my $progname = $0;
	$progname =~ s,.*/,,;
	die "Usage: $progname [-public_file=<filename>] [-secret_file=<filename>] [-passphrase=<passphrase>] [-size=1024] -id=<your name>\n";
}

GetOptions(%opts) || usage "Options Failed" ;
defined $name || usage();


#
#	Create a random input stream
#
my $ris = new PGP::RandomStream;
ref($ris) || die $ris;
$ris->goodSeed();

my $ui = new PGP::CmdLine;


my $skc = generate PGP::SecretKeyCertificate(
			-size => $size,
			-ris => $ris
		);
ref($skc) || die $skc;

unless (defined $passphrase)
{
	$passphrase = $ui->getNewPassphrase();
}

$skc->encrypt($passphrase, $ris);


my $id = new PGP::UserId "$name";
ref $id || die $id;
my $key = new PGP::SecretKeyRingEntry $skc;
ref $key || die $key;
$key->addId($id);

my $kr = PGP::SecretKeyRing->open($secret_file);
ref $kr || die $kr;
$kr->add($key);
$kr->update($secret_file);


my $pkc = $skc->publicKeyCertificate();
ref $pkc || die $pkc;

my $key = new PGP::PublicKeyRingEntry $pkc;
ref $key || die $key;
$key->addId($id);

$kr = PGP::PublicKeyRing->open($public_file);
ref $kr || die $kr;
$kr->add($key);
$kr->update($public_file);
