The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 9;
use strict;
use warnings;

sub BEGIN {
    use_ok('Crypt::Keyczar');
    use_ok('Crypt::Keyczar::Util');
    use_ok('Crypt::Keyczar::DsaPublicKey');
    use_ok('Crypt::Keyczar::DsaPrivateKey');
}

my $JSON_PRIV = q|{"publicKey": {"q": "AJJfsQZrhUV8p6TmpPqa084JwX9j", "p": "AIAAAAAAAAXxHhQxJRZ-PPj2BDrHHLV8c8pX6nyOLAW3Bc7CX_SfBiGH2VyImoz6JlAOZi6x_XspxdUvpTjV7J9uO9hwnF31m3SQjdkZW2DQDb5OS1rW_4MGrTJCktKtlZz7f8_5AoO8yHSY2XWNDqrpBEiNvaTX1ttQ59nREiR1", "y": "AGlQuRpbat4drE_fcdSZrEVfS6Fme3tNfUoJVRec1pUhoSo9PBHKFx3lbBmI8Vnub8vuY1nM2yTadOZ8H4-TYxB5JNMVTK7vLNdVcWvUUF9zRZCwps1bl0_Al29X0I1iQYJN6Klxi_QbKaSf5PhfXLVom9bJYp7_TwZCouaab296", "g": "AES5hk-DKXP__t6yDsXIdykf7lhSKHqQCW5H2V5dMg8JkoFBSP7mIvaCHT4IxoxdM2AIpWgcoi5XSrd_hD2sjNa1JHTb9BUh31dHJLym6rTsV12ClN6f78Cjt0oKFIRI__yWn9KM-vLEsjpd10VHlPfbEgKYePCnXFt7Y78G0wGr", "size": 1024}, "size": 1024, "x": "AGLJry5Q0CZo9cH6XRYd2ZZZppwg"}
|;
my $JSON_PUB = q|{"q": "AJJfsQZrhUV8p6TmpPqa084JwX9j", "p": "AIAAAAAAAAXxHhQxJRZ-PPj2BDrHHLV8c8pX6nyOLAW3Bc7CX_SfBiGH2VyImoz6JlAOZi6x_XspxdUvpTjV7J9uO9hwnF31m3SQjdkZW2DQDb5OS1rW_4MGrTJCktKtlZz7f8_5AoO8yHSY2XWNDqrpBEiNvaTX1ttQ59nREiR1", "y": "AGlQuRpbat4drE_fcdSZrEVfS6Fme3tNfUoJVRec1pUhoSo9PBHKFx3lbBmI8Vnub8vuY1nM2yTadOZ8H4-TYxB5JNMVTK7vLNdVcWvUUF9zRZCwps1bl0_Al29X0I1iQYJN6Klxi_QbKaSf5PhfXLVom9bJYp7_TwZCouaab296", "g": "AES5hk-DKXP__t6yDsXIdykf7lhSKHqQCW5H2V5dMg8JkoFBSP7mIvaCHT4IxoxdM2AIpWgcoi5XSrd_hD2sjNa1JHTb9BUh31dHJLym6rTsV12ClN6f78Cjt0oKFIRI__yWn9KM-vLEsjpd10VHlPfbEgKYePCnXFt7Y78G0wGr", "size": 1024}|;
my $MESSAGE = "This is some test data";

my $priv = Crypt::Keyczar::DsaPrivateKey->read($JSON_PRIV);
ok($priv, 'create private key object');
my $engine = $priv->get_engine();
ok($engine, 'create dsa engine');
$engine->update($MESSAGE);
$engine->update(Crypt::Keyczar::FORMAT_BYTES());
my $sign = $engine->sign();
ok($sign, 'sign message');

my $pub = Crypt::Keyczar::DsaPublicKey->read($JSON_PUB);
ok($priv, 'create public key object');
my $pe = $pub->get_engine();
$pe->update($MESSAGE);
$pe->update(Crypt::Keyczar::FORMAT_BYTES());
ok($pe->verify($sign), 'verify message');