<?php
//error_reporting(-1);
//error_reporting(E_ALL);
ini_set('error_reporting', "-1");
ini_set('error_reporting', E_ALL);
// EJECUTAR SCRIPT PYTHON CRSEED
//$sem=shell_exec("python semilla.py");

$sem = exec("/usr/bin/python ./python/semilla.py 2>&1");
//print_r($sem); //exit();

if($sem=='') {
	echo "[X] ERROR: falta semilla."; exit(); // error: no retorna valor
}

// CREAR NODO GETTOKEN
$xmlgettkn =<<<XML
<getToken>
	<item>
	<Semilla>$sem</Semilla>
	</item>
</getToken>
XML;

// TROZO DE XML PARA FIRMAR SEMILLA
$signedinfo =<<<XML
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
	<SignedInfo>
		<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
		<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
		<Reference URI="">
			<Transforms>
				<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
			</Transforms>
			<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
			<DigestValue/>
		</Reference>
	</SignedInfo>
	<SignatureValue/>
	<KeyInfo>
		<KeyValue>
			<RSAKeyValue>
				<Modulus/>
				<Exponent/>
			</RSAKeyValue>
		</KeyValue>
		<X509Data>
			<X509Certificate/>
		</X509Data>
	</KeyInfo>
</Signature>
XML;
//echo $sem;exit();

// AGREGAR NODO SIGNEDINFO
$doc = new DOMDocument();

$doc->loadXML($xmlgettkn);						// xml canonizado con semilla
$f = $doc->createDocumentFragment();		// entrar a nodo getToken
$f->appendXML($signedinfo);					// agregar signedinfo a getToken
$doc->documentElement->appendChild($f);		
$xmlsi = $doc->saveXML();					// crear xml con semilla y nodos para firmar
//echo $sem;exit();
//// FIRMAR SEMILLA CON XMLSEC1 USANDO SHELL LINUX
$rnd = rand(1000000,9999999);				// nombre de archivo aleatorio
$xmlsinfirma = $rnd.".xml";					// nombre de xml sin firmar
$xmlconfirma = $rnd."-sig.xml";				// nombre de xml firmado

// guardar xml a un archivo
if(!file_put_contents($xmlsinfirma, $xmlsi, LOCK_EX)) {
	echo "ERROR: file_put_contents: no se puede escribir archivo ($xmlsinfirma)"; exit();
}

// comando para firmar con xmlsec1 (no seguro)
$cmd = 'xmlsec1 --sign --privkey-pem server.key,crt.pem --pwd 6235 '.$xmlsinfirma.' > '.$xmlconfirma; //.'; cat semilla-sig.xml; rm semilla-sig.xml';
echo "$cmd<br>\n";
shell_exec($cmd);							// ejecutar comando

// leer archivo xml firmado
$token = exec("/usr/bin/python ./python/gettoken.py \"$xmlconfirma\" 2>&1");

//echo($token); exit();
//$token = exec("python gettoken.py \"$xmlconfirma\" 2>&1");
if($token=="") {
		echo "[X] ERROR: no hay token."; exit(); // error: no retorna valor
}

// borrar archivos temporales
unlink($xmlsinfirma);
//unlink($xmlconfirma);


?>
<!doctype html>
<html>
<head>
	<title>semilla</title>
</head>
<body>
	<h1>Token <?=$token;?> </h1>
	<pre>
<?php
//echo $xmlsinfirma;
echo $xmlconfirma;

echo $token;
?>
	</pre>
</body>
</html>
