Digital Signature in PowerPoint

Digital certificate is used to create a password protected powerpoint presentation, marked as created by a particular organization or person. Digital certificate can be obtained by contacting an authorized organization - a certificate authority. After installing digital certificate into the system, it can be used to add a digital signature to the presentation via File -> Info -> Protect Presentation:

todo:image_alt_text

Presentation may contain more than one digital signatures. After the digital signature is added to the presentation, a special message will appear in the PowerPoint:

todo:image_alt_text

To sign presentation or check the authenticity of presentation signatures, Aspose.Slides API provides IDigitalSignature interface, IDigitalSignatureCollection interface and IPresentation.getDigitalSignatures method. Currently, digital signatures are supported for PPTX format only.

Add Digital Signature from PFX Certificate

The code sample below demonstrates how to add digital signature from a PFX certificate:

  1. Open PFX file and pass PFX password to DigitalSignature object.
  2. Add created signature to the presentation object.
  # Opening the presentation file
  $pres = new Presentation();
  try {
    # Create DigitalSignature object with PFX file and PFX password
    $signature = new DigitalSignature("testsignature1.pfx", "testpass1");
    # Comment new digital signature
    $signature->setComments("Aspose.Slides digital signing test.");
    # Add digital signature to presentation
    $pres->getDigitalSignatures()->add($signature);
    # Save presentation
    $pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

Now its possible to check if the presentation was digitally signed and has not been modified:

  # Open presentation
  $pres = new Presentation("SomePresentationSigned.pptx");
  try {
    if (java_values($pres->getDigitalSignatures()->size()) > 0) {
      $allSignaturesAreValid = true;
      echo("Signatures used to sign the presentation: ");
      # Check if all digital signatures are valid
      foreach($pres->getDigitalSignatures() as $signature) {
        echo($signature->getComments() . ", " . $signature->getSignTime()->toString() . " -- " . $signature->isValid() ? "VALID" : "INVALID");
        $allSignaturesAreValid &= $signature->isValid();
      }
      if ($allSignaturesAreValid) {
        echo("Presentation is genuine, all signatures are valid.");
      } else {
        echo("Presentation has been modified since signing.");
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }