robrichards / wse-php

Libraries for adding WS-* support to ext/soap in PHP
129 stars 92 forks source link

Error for encrypt Data by using public key #58

Open priyesh-shukla opened 3 years ago

priyesh-shukla commented 3 years ago

Hi,

I have started the webservice integration for Income Tax bulk ITR but i am not able to encrypt the data by using public key of income tax getting following error.

Fatal error: Uncaught Exception: Unknown key size for type "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"

robrichards commented 3 years ago

Make sure you are using the latest versions of xmlseclibs and wse-php. If you are still getting an error you will need to paste your code as the only time you should see that is if you are trying to generate a session key using the above key type - which is incompatible.

priyesh-shukla commented 3 years ago

Hi Please see my code below I am not able to sign soap request; `function finalSubmitITR(){ $login = 'ERIA101854'; $password = 'QWERTY@1'; $xmlFile = $_POST['itrxml']; $doc = new DOMDocument(); $doc->load($xmlFile); // Create a new Security object $objDSig = new XMLSecurityDSig(); // Use the c14n exclusive canonicalization $objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N); // Sign using SHA-256 $objDSig->addReference( $doc, XMLSecurityDSig::SHA256, array('http://www.w3.org/2000/09/xmldsig#enveloped-signature') );

// Create a new (private) Security key
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, array('type'=>'private'));

//If key has a passphrase, set it using
$objKey->passphrase = 'myitr1234';

// Load the private key
$objKey->loadKey('./app/controllers/myitr-privatekey.pem', TRUE);

// Sign the XML file
$objDSig->sign($objKey);
$tout = ('./app/controllers/myitr-privatekey.pem');
// Add the associated public key to the signature
$objDSig->add509Cert(file_get_contents($tout));

// Append the signature to the XML
$objDSig->appendSignature($doc->documentElement);
// Save the signed XML

/* $siteKey = new XMLSecurityKey(XMLSecurityKey::RSA_OAEP_MGF1P, array('type' => 'public')); $siteKey->loadKey('./app/controllers/EfilingDSC.cer', true, true);

    $options = array("KeyInfo" => array("X509SubjectKeyIdentifier" => true));
    $objWSSE->encryptSoapDoc($siteKey, $objKey, $options);

    $retVal = parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);

    $doc = new DOMDocument();
    $doc->loadXML($retVal);

    $options = array("keys" => array("private" => array("key" => PRIVATE_KEY, "isFile" => true, "isCert" => false)));
    $objWSSE->decryptSoapDoc($doc, $options);*/
$doc->save($xmlFile);
$zipFileName = str_replace('.xml','',$xmlFile);
        $zipArchive = new ZipArchive();  
        if ($zipArchive->open($zipFileName.'.zip', (ZipArchive::CREATE | ZipArchive::OVERWRITE)) !== true)
            die("Failed to create archive\n");
        $zipArchive->addGlob($xmlFile);
        if ($zipArchive->status != ZIPARCHIVE::ER_OK)
            echo "Failed to write files to zip\n";
        $zipArchive->close();

ini_set("soap.wsdl_cache_enabled", "1");
$wsdl = 'https://services.incometaxindiaefiling.gov.in/e-FilingSecWS/ditsecws/BulkItrService?wsdl';
$client = new SoapClient($wsdl, array( 
        "cache_wsdl"=>WSDL_CACHE_NONE,
        "soap_version" => SOAP_1_1,
        'trace' => 1,
        'encoding' => 'UTF-8'
    )
);

$client->__setSoapHeaders([new WsseAuthHeader($login, $password)]);
$requestId = "ERIA101854-".rand(100000,999999);
$codif = file_get_contents( $zipFileName.'.zip');

$xml_base64 = base64_encode($codif);

//$request = array('DitRequest' => array('_' => '', 'uniqueRequestId'=>$requestId, 'dataHandler' => $xml_base64)); $request = ' <soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:dit="https://incometaxindiaefiling.gov.in/ditsecws" xmlns:req="https://incometaxindiaefiling.gov.in/ditsecws/request">

VUVzREJCUUFBQUFJQVBkWU1GSGpTYlVUMkFZQUFLQVhBQUJLQUFBQVlYQndMM1Z3Ykc5aFpITXZVSEpwZVdWemFDQlRhSFZyYkdFdmVHMXNMekUyTFRBNUxUSXdNakF2UjBsUVVGTXlOelkxUzE5SlZGSXRNVjh5TURJd1gwNWZPRGMwTVM1NGJXenRXRnR6MmpnVWZ2ZXY4UERjeE5qa0FoM0hYVEFoWlpvRU5vU2szWmVPWWd2UTFNaXNaQ0QwMSsrUlpCdExOcDArN2tNNzdWVG4rODQ1MHJub1l2eFA3K3ZFM21IR1NVcHZXdTU1dTJWakdxVXhvY3ViMXZ4NWROWnQyVHhETkVaSlN2Rk5pNmF0VDRGbDUzOTh5anNmeDg5UE5uaWgvQ05JTjYxVmxtMCtPZzRCTDJ1Y29YZENZNEx3Z2lUZzhueVo3czRKZGRhSTBKWXkrbDBEbm1IV0t1ZnhmczhNbHVZV1J1K2NsRWI3L2Y1ODN6bFAyZEx4Mm0zWCtmcHdQNHRXZUkzT0NCWFJScmdWV0JDY0o0SnpZUmd5akRKSTBaZ3VVaEJucnk4cVpZOXBBRG56blNvZ2FLbVA0OEVobUwyNjdYYmJjeTh1aE5ZUnQzeVl0RmxOSTQ1NjRIMElZT0MxdmZaWnUzZm1YaDFWQzg3eXh4UVN0Y2FRQzNZSVNYWUloamhaRWQrcDRaWS9KRXZNc3lCODNaT0grZFh1NGV1UDUzNzNOWHY5aHl3WjZ5YWozaUpjdlUzdkprOG8rM3V6ZE9kaC84YnluZHdLUmtaU1JpbGJmOC96SmNhUGFJMERrTTljM3lsbG1CWHppSkdOTUF3QXRzYzBUcmk5UWp1b0d3aWltdmFDcFd0N2hoSlk2d2Q3aXFuSTdBZDdnZFlrT2RnYkpkdlFsTGFNQ3BZRHk2cTR0ZncrNTVqek5hYlpONHlZVEpudkdDRFVTZFljS2hmQVAxWEhFbEV4VkxsQ3R0U3dDSFVLaFU4cFN2SXNxRWt3enFNZEVjWXpPWjR5Y3NCOEJjWWxCQ3ZZTWpHYXNBbGJTbWkyMnY1SUVDekVKS3hpL2FYcmFmOHh1QnRQcHpQdit1cnlpKzhJR2VhUFkwZ0loOUVUNWlTR3pZeWhKNmRKbXRtUHFYMEp0YWppbG4rZlJpaUJmcGl3UHBRemVNUjdPKzhZZzRGTklJWG5kRThuYkVoNHhraVVGZTNWeUVGOEdYUmxtTVk0YVBjZ3FGSUNaK21XWnRDS1F1ckJxcW95eEVhb0hMbXdLNjQ4aUMyWE5idUg5STBrTmVzY3RYdzFnQ0M3WGUvcXN1UDFYRkFzUWN1L2hWTW9LZEsxVWRYaE12MVhuZXUvbG9JOWgyNzBIVTFSMUtFY0RpZUR3TzFkOXM3YUx2eUZKZ1JaT040azZRR3pFS0pkcHV3UVRHK0ZFd09FVXFGNGhSQWdMSVlGZGJ4dXUrTjVGMjNQdTRZNU5BNG1OZHBzSk04NWtkQ3RxblcyWlJSQVBNTlI0TW9xVnhHb0JONUI0NittTE4wUjJENXVweGM4UWtYcXFHaHYzYmxvOU85cVp3NXh2STNFSGhQNEhVczVWN3MwNkZ6QzhRV2JwSXJCcERwWjRoRE12MXVZTU1QOEJTVmI2QTRab0k2Qkdrc1hKT05qbWhzS0xRT0NMQ2JKbmthMzczaTl5ZWJjYlFQMG5HWW9xZUZnM1V5SWt0YXhSNXdaeXo4aTRoVExFd0hhVjBHdW9JT0dFa0dOYWtUc3JGdHhqR1Z3S1lyRHFaL3NBU1ppdlkyNHlnczBJQkg5OEl6ZXBSdGxjSUlSMTRJbzN3ak9WUWdoNkxUVlNuUTBUNXdDSjR2UDB6SmxGYWh3TmNsV014WUZwWk5jMW9LK3ZDWVFuaDZ4d3ZMbUFlZkt1bHlSQVZ2K25ETmxQYWR4dUVLYmwzRmZkck4wMTIySHduMUZxbEtoUVlZR1BjejNKSnl5czF0RFZlZDBNM2RnS3J1RFpzL3NoRmRXVlI5cVNrT05NamlESEJpc3RnbzlJaTJHVzRNenlMN0I5blY2WU5EYXJIY2FlYWRSQm1lUWZZUHQ2M1JvMEZvdDV4bzVyMUxQejdwaklXdjB3S0FIeFQ3SXU2MXk1Qlhib2M3QUVkTGNxSDk2OTAvdi92OTd0NkZMSytkK2VUaFhNYkE2OVM2UU9OdytZYnJlYkRPVVA4bWxNYUJUZEVCdjhFRHpMa3VYRlZROFpkN2dpZFM5N3VjYVJ4bDhsSW9UcW5BWlZ4MkZLeFVXSktjT3hWTk4zS1VhVUZ4QTZQMmVJSGdTaWkraTh2cXBnc2Q4OTZySjdxa1hnbWx2UW1VZU0zanp3eUlyTjJxQnlFKzIrbmpPdmM1Rlg5MnZPbVFxRGVwS2c1cFNXRmNTWFhnUHlWS3Z2UkhHZ0kyRVdoMjBLcllxSnBIelpNdk53R3B3MFNiMWRoQkZJN0VhWVo2UCsvRk9mSDBESkJ4V0pGQWJ6dVFrOEI4SW9STENtU3hRc2poKzIrVzJkZkRZZ3ZsMGxmWXJGK0JVaFlIV21xQStNSHJWT1VieGhCZGJlaHdNMWFQMktBaHY5RWMvaXNTWHlqQkw1TDVyZ0VvLzRsTTAzaVo0T0piRjNQRnN1SUdjSHRaU2QzYmdJVW9pVlptVFhJMkNTNnJSSk1lMU9RdEJIWVV5VTBONFY4cGRQdWVBaG9pdnlpUTJVSTFHOEU3RTdFRitFVFphSHZsRzh4TldoZkp0UXBZRWFuUEM2QVJkaVR3Lzkwc3B2N1ZnSUJwcWhOWXpGbVkvNldlTWttd2xPVXBTQmwrLzVDZW1vd1F0ZzIraTkwd3diMUlhaitSdkdHV0Rsb0RsSzVkanlxY01yMmR5THFIV0JJc3ZBTHo3REhpNGluN01OMGZ0UnR5WVhGdGRiU1U2QzhzeVoxY0prRXM3UVRVdjcyajNDeGErMm5GTUlxalVlODNzQkFPeklRWmJuRGVXNGlSWG1za1Y1VU10M0FyZmdKcEJWcjAxRXMzcnJNeitpOHdYR2sycDE3a1R5enFWZk5QNG1PT2E0U2tLcnRwOFYvWFg0aUNiTE9BeElDMGFjVXZlb1NmM2s2TnZ2UmZNeUlKRXhhVXh4QkY4ZnlQdFJ6Nk1RYW42QzV0dEZ6K2ltUXFXUDBMaWVGRy90SDBwOVNxbzV0WDhoYzJnNU1PcHVxQVFiVkFrcnYyWjc1UmpxRWlDSWx6OFVLWUVNRFZDY3lxL05qdjV6K3FCOVI5UVN3RUNGQU1VQUFBQUNBRDNXREJSNDBtMUU5Z0dBQUNnRndBQVNnQUFBQUFBQUFBQUFBQUF0b0VBQUFBQVlYQndMM1Z3Ykc5aFpITXZVSEpwZVdWemFDQlRhSFZyYkdFdmVHMXNMekUyTFRBNUxUSXdNakF2UjBsUVVGTXlOelkxUzE5SlZGSXRNVjh5TURJd1gwNWZPRGMwTVM1NGJXeFFTd1VHQUFBQUFBRUFBUUI0QUFBQVFBY0FBQUFB '; echo $request = soapRequestXml($request); return; //$request = array('DitRequest' => array('_' => '', 'uniqueRequestId'=>$requestId, 'dataHandler' => $xml_base64)); // $results = $client->__soapCall('uploadBulkItr', array($request)); try { $results = $client->uploadBulkItr($request); } catch(Exception $e) { // error handling goes here // $sta = base64_decode($results); echo "

REQUEST:\n" . $client->__getLastRequest() . "

"; echo "RESPONSE:\n" . $client->__getLastResponse() . "

"; echo "RESPONSE HEADERS:\n" . $client->__getLastResponseHeaders() . "

"; die("Error: ". $e->getMessage()."\n"); } // $results = $client->uploadBulkItr($param1,$request); $sta = base64_decode($results); echo "

REQUEST:\n" . $client->__getLastRequest() . "

"; // echo "REQUEST HEADERS:\n" . $client->__getLastRequestHeaders() . "

"; // echo "RESPONSE:\n" . $client->__getLastResponse() . "

"; echo "RESPONSE HEADERS:\n" . $client->__getLastResponseHeaders() . "

"; // echo "Var Dump: "; var_dump($results); //print_r($results); // it; echo "guruji"; } function soapRequestXml($request){ $doc = new DOMDocument('1.0'); $doc->loadXML($request); $objWSSE = new WSSESoap($doc); $objWSSE->addTimestamp(); $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private')); $objKey->loadKey('./app/controllers/private-key.pem', true); $options = array("insertBefore" => false); $objWSSE->signSoapDoc($objKey, $options); $token = $objWSSE->addBinaryToken(file_get_contents('./app/controllers/incometax.pem')); $objWSSE->attachTokentoSig($token); $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_OAEP_MGF1P, array('type' => 'public')); $objKey->generateSessionKey(); $options = array("KeyInfo" => array("X509SubjectKeyIdentifier" => true)); $objWSSE->encryptSoapDoc($objKey, $options); $doc = new DOMDocument(); $doc->loadXML($retVal); $options = array("keys" => array("private" => array("key" => './app/controllers/private-key.pem', "isFile" => true, "isCert" => false))); $objWSSE->decryptSoapDoc($doc, $options); return $doc->saveXML(); }`