#! /usr/bin/perl

# $Id: spnego 42588 2014-11-21 09:19:49Z wsl $
# $URL: https://svn.uvt.nl/its-id/trunk/sources/aselect-perl/doc/spnego $

# Sandbox script to experiment with various SPNEGO functions

use strict;
use warnings FATAL => 'all';

use lib 'lib';

use MIME::Base64;
use Aselect::UI::SPNEGO;
use Data::Dumper;

$Data::Dumper::Indent = 1;
$Data::Dumper::Quotekeys = 0;

my $bigblob = <<'EOF';
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
EOF

my $blob = 'YEkGBisGAQUFAqA/MD2gMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHgYKKwYBBAGCNwICCqIJBAc8c3R1ZmY+';

my $binary = decode_base64($bigblob);
#print encode_base64($binary);

my $spnego = new Aselect::UI::SPNEGO;

my $asn1 = $spnego->asn1;

my $struct = $asn1->decode($binary);
do {
	local $struct->{negToken}{negTokenInit}{mechToken} = ''
		if $struct->{negToken}{negTokenInit}{mechToken};
	print Dumper($struct);
};

my $encoded = $asn1->encode($struct);

die "meh" unless $binary eq $encoded;

#print encode_base64($encoded);

my $force = {
	spnego => '1.3.6.1.5.5.2',
	negToken => {
		negTokenResp => {
			negState => 1,
			supportedMech => '1.2.840.48018.1.2.2',
		}
	}
};

my $init = {
	spnego => '1.3.6.1.5.5.2',
	negToken => {
		negTokenInit => {
			mechTypes => [
				'1.2.840.48018.1.2.2',
				'1.2.840.113554.1.2.2',
			]
		}
	}
};

print encode_base64($asn1->encode($force));
print encode_base64($asn1->encode($init));
