Sample code for 30+ languages & platforms
PHP

Create Egypt ITIDA CAdES-BES .p7s Signature (File to File)

See more Egypt ITIDA Examples

Demonstrates how to create a .p7s signature that fits Egypt's ITIDA requirements.

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\Cert;
use Chilkat2\Crypt2;
use Chilkat2\JsonObject;

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$crypt = new Crypt2();

$cert = new Cert();

// There are many ways to load the certificate.
// This example was created for a customer using an ePass2003 USB token.
// Assuming the USB token is the only source of a hardware-based private key..
try {
    $cert->LoadFromSmartcard('');

    // Tell the crypt component to use this cert.
    $crypt->SetSigningCert($cert);

    $cmsOptions = new JsonObject();
    $cmsOptions->UpdateBool('DigestData', true);
    $cmsOptions->UpdateBool('OmitAlgorithmIdNull', true);
    $crypt->CmsOptions = $cmsOptions->Emit();

    // The CadesEnabled property applies to all methods that create CMS/PKCS7 signatures.
    // To create a CAdES-BES signature, set this property equal to true.
    $crypt->CadesEnabled = true;

    $crypt->HashAlgorithm = 'sha256';

    $jsonSigningAttrs = new JsonObject();
    $jsonSigningAttrs->UpdateInt('contentType', 1);
    $jsonSigningAttrs->UpdateInt('signingTime', 1);
    $jsonSigningAttrs->UpdateInt('messageDigest', 1);
    $jsonSigningAttrs->UpdateInt('signingCertificateV2', 1);
    $crypt->SigningAttributes = $jsonSigningAttrs->Emit();

    // By default, all the certs in the chain of authentication are included in the signature.
    // If desired, we can choose to only include the signing certificate:
    $crypt->IncludeCertChain = false;

    // Make sure we sign the utf-8 byte representation of the JSON string
    $crypt->Charset = 'utf-8';

    // Create the CAdES-BES signature, which does not contain the data being signed.
    $pathOfFileToSign = 'someDir/someFile';
    $outputPath = 'outDir/someFile.p7s';
    $crypt->CreateP7S($pathOfFileToSign, $outputPath);
} catch (\Chilkat2\Exception $e) {
    echo $e->getMessage(), "\n";
    exit;
}

echo "Success!\n";