function parse_EncInfoAgl(blob) {
	var KeyData = ["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];
	blob.l+=4;
	var xml = blob.read_shift(blob.length - blob.l, 'utf8');
	var o = {};
	xml.replace(tagregex, function xml_agile(x) {
		var y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;
			case '<encryption': case '</encryption>': break;
			case '<keyData': KeyData.forEach(function(k) { o[k] = y[k]; }); break;
			case '<dataIntegrity': o.encryptedHmacKey = y.encryptedHmacKey; o.encryptedHmacValue = y.encryptedHmacValue; break;
			case '<keyEncryptors>': case '<keyEncryptors': o.encs = []; break;
			case '</keyEncryptors>': break;

			case '<keyEncryptor': o.uri = y.uri; break;
			case '</keyEncryptor>': break;
			case '<encryptedKey': o.encs.push(y); break;
			default: throw y[0];
		}
	});
	return o;
}
function parse_EncInfoAgl(blob) {
	var KeyData = ["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];
	blob.l+=4;
	var xml = blob.read_shift(blob.length - blob.l, 'utf8');
	var o = {};
	xml.replace(tagregex, function xml_agile(x) {
		var y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;
			case '<encryption': case '</encryption>': break;
			case '<keyData': KeyData.forEach(function(k) { o[k] = y[k]; }); break;
			case '<dataIntegrity': o.encryptedHmacKey = y.encryptedHmacKey; o.encryptedHmacValue = y.encryptedHmacValue; break;
			case '<keyEncryptors>': case '<keyEncryptors': o.encs = []; break;
			case '</keyEncryptors>': break;

			case '<keyEncryptor': o.uri = y.uri; break;
			case '</keyEncryptor>': break;
			case '<encryptedKey': o.encs.push(y); break;
			default: throw y[0];
		}
	});
	return o;
}
function parse_EncInfoAgl ( blob ) { var KeyData = [ "saltSize" , "blockSize" , "keyBits" , "hashSize" , "cipherAlgorithm" , "cipherChaining" , "hashAlgorithm" , "saltValue" ] ; blob . l += 4 ; var xml = blob . read_shift ( blob . length - blob . l , 'utf8' ) ; var o = { } ; xml . replace ( tagregex , function xml_agile ( x ) { var y = parsexmltag ( x ) ; switch ( strip_ns ( y [ 0 ] ) ) { case '<?xml' : break ; case '<encryption' : case '</encryption>' : break ; case '<keyData' : KeyData . forEach ( function ( k ) { o [ k ] = y [ k ] ; } ) ; break ; case '<dataIntegrity' : o . encryptedHmacKey = y . encryptedHmacKey ; o . encryptedHmacValue = y . encryptedHmacValue ; break ; case '<keyEncryptors>' : case '<keyEncryptors' : o . encs = [ ] ; break ; case '</keyEncryptors>' : break ; case '<keyEncryptor' : o . uri = y . uri ; break ; case '</keyEncryptor>' : break ; case '<encryptedKey' : o . encs . push ( y ) ; break ; default : throw y [ 0 ] ; } } ) ; return o ; }
/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption)
/ * [ MS - OFFCRYPTO ] 2 . 3 . 4 . 10 EncryptionInfo Stream ( Agile Encryption )
Parse the XML tag