var unit = require('../unit.js');

unit.register("Packet testing", function() {

	var openpgp = require('../../');

	var armored_key =
		'-----BEGIN PGP PRIVATE KEY BLOCK-----\n' +
		'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
		'\n' +
		'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\n' +
		'YRlci72GHhlyos8YHA==\n' +
		'=KXkj\n' +
		'-----END PGP PRIVATE KEY BLOCK-----';


	var tests = [function() {
		var message = new openpgp.packet.list();

		var literal = new openpgp.packet.literal();
		literal.setText('Hello world');
		
		var enc = new openpgp.packet.symmetrically_encrypted();
		message.push(enc);
		enc.packets.push(literal);

		var key = '12345678901234567890123456789012',
			algo = 'aes256';

		enc.encrypt(algo, key);



		var msg2 = new openpgp.packet.list();
		msg2.read(message.write());

		msg2[0].decrypt(algo, key);

		return new unit.result('Symmetrically encrypted packet', 
			msg2[0].packets[0].data == literal.data);

	}, function() {
		var key = '12345678901234567890123456789012',
			algo = 'aes256';

		var literal = new openpgp.packet.literal(),
			enc = new openpgp.packet.sym_encrypted_integrity_protected(),
			msg = new openpgp.packet.list();

		msg.push(enc);
		literal.setText('Hello world!');
		enc.packets.push(literal);
		enc.encrypt(algo, key);
		


		var msg2 = new openpgp.packet.list();
		msg2.read(msg.write());

		msg2[0].decrypt(algo, key);

		return new unit.result('Sym. encrypted integrity protected packet', 
			msg2[0].packets[0].data == literal.data);
	
	}, function() {
			
		var msg = 
			'-----BEGIN PGP MESSAGE-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'jA0ECQMCpo7I8WqsebTJ0koBmm6/oqdHXJU9aPe+Po+nk/k4/PZrLmlXwz2lhqBg\n' +
			'GAlY9rxVStLBrg0Hn+5gkhyHI9B85rM1BEYXQ8pP5CSFuTwbJ3O2s67dzQ==\n' +
			'=VZ0/\n' +
			'-----END PGP MESSAGE-----';



		var msgbytes = openpgp.armor.decode(msg).data;

		var parsed = new openpgp.packet.list();
		parsed.read(msgbytes);

		parsed[0].decrypt('test');

		var key = parsed[0].sessionKey;
		parsed[1].decrypt(parsed[0].sessionKeyAlgorithm, key);
		var compressed = parsed[1].packets[0];

		var result = compressed.packets[0].data;

		return new unit.result('Sym encrypted session key with a compressed packet',
			result == 'Hello world!\n');

	}, function() {
	
		var rsa = new openpgp.crypto.publicKey.rsa(),
			mpi = rsa.generate(512, "10001")

		var mpi = [mpi.n, mpi.ee, mpi.d, mpi.p, mpi.q, mpi.u];

		mpi = mpi.map(function(k) {
				var mpi = new openpgp.mpi();
				mpi.fromBigInteger(k);
				return mpi;
		});

		var enc = new openpgp.packet.public_key_encrypted_session_key(),
			msg = new openpgp.packet.list(),
			msg2 = new openpgp.packet.list();

		enc.sessionKey = '12345678901234567890123456789012';
		enc.publicKeyAlgorithm = 'rsa_encrypt';
		enc.sessionKeyAlgorithm = 'aes256';
		enc.publicKeyId.bytes = '12345678';
		enc.encrypt({ mpi: mpi });

		msg.push(enc);

		msg2.read(msg.write());

		msg2[0].decrypt({ mpi: mpi });

		return new unit.result('Public key encrypted symmetric key packet', 
			msg2[0].sessionKey == enc.sessionKey &&
			msg2[0].sessionKeyAlgorithm == enc.sessionKeyAlgorithm);
	}, function() {
		var armored_key = 
			'-----BEGIN PGP PRIVATE KEY BLOCK-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'lQHYBFF33iMBBAC9YfOYahJlWrVj2J1TjQiZLunWljI4G9e6ARTyD99nfOkV3swh\n' +
			'0WaOse4Utj7BfTqdYcoezhCaQpuExUupKWZqmduBcwSmEBfNu1XyKcxlDQuuk0Vk\n' +
			'viGC3kFRce/cJaKVFSRU8V5zPgt6KQNv/wNz7ydEisaSoNbk51vQt5oGfwARAQAB\n' +
			'AAP5AVL8xWMuKgLj9g7/wftMH+jO7vhAxje2W3Y+8r8TnOSn0536lQvzl/eQyeLC\n' +
			'VK2k3+7+trgO7I4KuXCXZqgAbEi3niDYXDaCJ+8gdR9qvPM2gi9NM71TGXZvGE0w\n' +
			'X8gIZfqLTQWKm9TIS/3tdrth4nwhiye0ASychOboIiN6VIECAMbCQ4/noxGV6yTK\n' +
			'VezsGSz+iCMxz2lV270/Ac2C5WPk+OlxXloxUXeEkGIr6Xkmhhpceed2KL41UC8Y\n' +
			'w5ttGIECAPPsahniKGyqp9CHy6W0B83yhhcIbmLlaVG2ftKyUEDxIggzOlXuVrue\n' +
			'z9XRd6wFqwDd1QMFW0uUyHPDCIFPnv8CAJaDFSZutuWdWMt15NZXjfgRgfJuDrtv\n' +
			'E7yFY/p0el8lCihOT8WoHbTn1PbCYMzNBc0IhHaZKAtA2pjkE+wzz9ClP7QbR2Vv\n' +
			'cmdlIDxnZW9yZ2VAZXhhbXBsZS5jb20+iLkEEwECACMFAlF33iMCGwMHCwkIBwMC\n' +
			'AQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBcqs36fwJCXRbvA/9LPiK6WFKcFoNBnLEJ\n' +
			'mS/CNkL8yTpkslpCP6+TwJMc8uXqwYl9/PW2+CwmzZjs6JsvTzMcR/ZbfZJuSW6Y\n' +
			'EsLNejsSpgcY9aiewGtE+53e5oKYnlmVMTWOPywciIgMvXlzdGhxcwqJ8u0hT+ug\n' +
			'9CjcAfuX9yw85LwXtdGwNh7J8Q==\n' +
			'=lKiS\n' +
			'-----END PGP PRIVATE KEY BLOCK-----';

		key = new openpgp.packet.list();
		key.read(openpgp.armor.decode(armored_key).data);
		key = key[0];

		var enc = new openpgp.packet.public_key_encrypted_session_key(),
			secret = '12345678901234567890123456789012';

		enc.sessionKey = secret;
		enc.publicKeyAlgorithm = 'rsa_encrypt';
		enc.sessionKeyAlgorithm = 'aes256';
		enc.publicKeyId.bytes = '12345678';

		enc.encrypt(key);

		enc.decrypt(key);

		return new unit.result('Secret key packet (reading, unencrpted)',
			enc.sessionKey == secret);
	}, function() {

		var armored_key =
			'-----BEGIN PGP PRIVATE KEY BLOCK-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'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\n' +
			'=FSwA\n' +
			'-----END PGP PRIVATE KEY BLOCK-----';

		var armored_msg = 
			'-----BEGIN PGP MESSAGE-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'hIwDFYET+7bfx/ABA/95Uc9942Tg8oqpO0vEu2eSKwPALM3a0DrVdAiFOIK/dJmZ\n' +
			'YrtPRw3EEwHZjl6CO9RD+95iE27tPbsICw1K43gofSV/wWsPO6vvs3eftQYHSxxa\n' +
			'IQbTPImiRaJ73Mf7iM3CNtQM4iUBsx1HnUGl+rtD0nz3fLm6i3CjwiNQWW42I9JH\n' +
			'AWv8EvvpxZ8X2ClFfSW3UVBoROHe9CAWHM/40nGutAZK8MIgmUI4xqkLFBbqqTyx\n' +
			'/cDSC4Q+sv65UX4urbfc7uJuk1Cpj54=\n' +
			'=iSaK\n' +
			'-----END PGP MESSAGE-----';


		var key = new openpgp.packet.list();
		key.read(openpgp.armor.decode(armored_key).data);
		key = key[3];

		var msg = new openpgp.packet.list();
		msg.read(openpgp.armor.decode(armored_msg).data);

		msg[0].decrypt(key);
		msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey);

		var text = msg[1].packets[0].packets[0].data;


		return new unit.result('Public key encrypted packet (reading, GPG)',
			text == 'Hello world!');
	}, function() {

		var passphrase = 'hello',
			algo = 'aes256';

		var literal = new openpgp.packet.literal(),
			key_enc = new openpgp.packet.sym_encrypted_session_key(),
			enc = new openpgp.packet.sym_encrypted_integrity_protected(),
			msg = new openpgp.packet.list();

		msg.push(key_enc);
		msg.push(enc);

		key_enc.sessionKeyAlgorithm = algo;
		key_enc.decrypt(passphrase);

		var key = key_enc.sessionKey;

		literal.setText('Hello world!');
		enc.packets.push(literal);
		enc.encrypt(algo, key);


		var msg2 = new openpgp.packet.list();
		msg2.read(msg.write());

		msg2[0].decrypt(passphrase);
		var key2 = msg2[0].sessionKey;
		msg2[1].decrypt(msg2[0].sessionKeyAlgorithm, key2);


		return new unit.result('Sym encrypted session key reading/writing', 
			msg2[1].packets[0].data == literal.data);
	
	}, function() {
		var armored_msg = 
			'-----BEGIN PGP MESSAGE-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'hIwD95D9aHS5fxEBA/98CwH54XZmwobOmHUcvWcDDQysBEC4uf7wASiGcRbejDaO\n' +
			'aJqcrK/3k8sBQMO7yOhvrCRqqpGDqnmx7IaaKLnZS7nYAZoHEsK9UyG0hDa8Cfbo\n' +
			'CP4xZVcgIvIfAW/in1LeT2td0QcQNbeewBmPea+vQEEvRgIP10tlE7MK8Ay48dJH\n' +
			'AagMgNYg7MBUjpuOCVrjM1pWja8uzbULfYhTq3IJ8H3QhbdT+k9khY9f0aJPEeYi\n' +
			'dVv6DK9uviMGc/DsVCw5K8lQRLlkcHc=\n' +
			'=pR+C\n' +
			'-----END PGP MESSAGE-----';

		var key = new openpgp.packet.list();
		key.read(openpgp.armor.decode(armored_key).data);
		key = key[3];
		key.decrypt('test');

		var msg = new openpgp.packet.list();
		msg.read(openpgp.armor.decode(armored_msg).data);

		msg[0].decrypt(key);
		msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey);

		var text = msg[1].packets[0].packets[0].data;



		return new unit.result('Secret key encryption/decryption test',
			text == 'Hello world!');
	}, function() {
	

		var key = new openpgp.packet.list();
		key.read(openpgp.armor.decode(armored_key).data);


		var verified = key[2].verify(key[0],
			{
				userid: key[1],
				key: key[0]
			});

		verified = verified && key[4].verify(key[0],
			{
				key: key[0],
				bind: key[3],
			})


		return new unit.result('Secret key reading with signature verification.',
			verified == true);
	}, function() {

		var armored_msg = 
			'-----BEGIN PGP MESSAGE-----\n' +
			'Version: GnuPG v2.0.19 (GNU/Linux)\n' +
			'\n' +
			'hIwD95D9aHS5fxEBA/4/X4myvH+jB1HYNeZvdK+WsBNDMfLsBGOf205Rxr3vSob/\n' +
			'A09boj8/9lFaipqu+AEdQKEjCB8sZ+OY0WiQPEPpuhG+mVqDqEiPFkdpcqNtS0VV\n' +
			'pwqplHo6QnH2MHfxprZHYuwcEC9ynJCxJ6kSCD8Xs99h+PjxNNw7NhMjkF+N69LA\n' +
			'NwGPtbLx2/r2nR4gO8gV92A2RQCOwPP7ZV+6fXgWIs+mhyCHFP3xUP5DaFCNM8mo\n' +
			'PN97i659ucxF6IbOoK56FEaUbOPTD6xdyhWamxKfMsIb0UJgVUNhGaq+VlvOJxaB\n' +
			'iRcnY5UxsypKgtqfcKIseb21MIo4vcNdogyxBIDlAO472Zfxn0udzr6W2aQ77+NK\n' +
			'FE1O0kCXS+DTFOYYVD7X8rXGSglQsdXJmHd89sdYFQkO7D7bOLdRJuXgdgH2czCs\n' +
			'UBGuHZzsGbTdyKvpVBuS3rnyHHBk6oCnsm1Nl7eLs64VkZUxjEUbq5pb4dlr1pw2\n' +
			'ztpmpAnRcmM=\n' +
			'=htrB\n' +
			'-----END PGP MESSAGE-----'

		var key = new openpgp.packet.list();
		key.read(openpgp.armor.decode(armored_key).data);
		key[3].decrypt('test')

		var msg = new openpgp.packet.list();
		msg.read(openpgp.armor.decode(armored_msg).data);


		msg[0].decrypt(key[3]);
		msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey);

		var payload = msg[1].packets[0].packets



		var verified = payload[2].verify(key[0], payload[1]);



		return new unit.result('Reading a signed, encrypted message.',
			verified == true);
	}, function() {
		var key = new openpgp.packet.list();
		key.push(new openpgp.packet.secret_key);

		var rsa = new openpgp.crypto.publicKey.rsa(),
			mpi = rsa.generate(512, "10001")


		var mpi = [mpi.n, mpi.ee, mpi.d, mpi.p, mpi.q, mpi.u];

		mpi = mpi.map(function(k) {
				var mpi = new openpgp.mpi();
				mpi.fromBigInteger(k);
				return mpi;
		});

		key[0].mpi = mpi;

		key[0].encrypt('hello');

		var raw = key.write();

		var key2 = new openpgp.packet.list();
		key2.read(raw);
		key2[0].decrypt('hello');
	
	
		return new unit.result('Writing and encryptio of a secret key packet.',
			key[0].mpi.toString() == key2[0].mpi.toString());
	}, function() {

		var key = new openpgp.packet.secret_key();

		var rsa = new openpgp.crypto.publicKey.rsa,
			mpi = rsa.generate(512, "10001")

		var mpi = [mpi.n, mpi.ee, mpi.d, mpi.p, mpi.q, mpi.u];

		mpi = mpi.map(function(k) {
				var mpi = new openpgp.mpi();
				mpi.fromBigInteger(k);
				return mpi;
		});

		key.mpi = mpi;

		var signed = new openpgp.packet.list(),
			literal = new openpgp.packet.literal(),
			signature = new openpgp.packet.signature();

		literal.setText('Hello world');

		signature.hashAlgorithm = 'sha256';
		signature.publicKeyAlgorithm = 'rsa_sign';
		signature.signatureType = 'binary';

		signature.sign(key, literal);

		signed.push(literal);
		signed.push(signature);

		var raw = signed.write();

		var signed2 = new openpgp.packet.list();
		signed2.read(raw);

		var verified = signed2[1].verify(key, signed2[0]);
	
	
		return new unit.result('Writing and verification of a signature packet.',
			verified == true);
	}];



	tests.reverse();

	var results = [];

	for(var i in tests) {
		results.push(tests[i]());
	}
	
	
	return results;
});