QDigitSign is a class library that implements the Digital Signature primitives as defined in the EU and international regulations for Qualified Digital Signature. QDigitSign supports PKCS#7, CAdES, PAdES and XAdES formats, Timestamp protocol, CRL and OCSP verifications and any PKCS#11 token/HSM. It is available for C/C++, .NET Framework, Java, iOS, Android, Delphi, VB6 etc.

Download Trial Buy


QDigitSign is compliant with any PKCS#11 smart card / token / HSM

It supports the following formats:

  • PKCS#7
  • CAdES
  • PAdES (PDF Signature)
  • XAdES
  • DER, B64 and PEM

It implements the following protocols:

  • Timestamp
  • OCSP verification
  • CRL Download and verification

It is available in the following languages:

  • C#
  • VB.NET
  • C/C++
  • Java
  • Delphi
  • VB 6

Supported Platforms:

  • Windows
  • Linux
  • Unix
  • HP-UX
  • iOS
  • Android
  • Windows Phone

Sample Code (C#)

// By the ATR try to find the matching PKCS#11 Module
string cryptokiPath = DigitalSigner.GetMathingCryptokiPath();

DigitalSigner dsign = new DigitalSigner(cryptokiPath);

// Open a session with the first available token 
// login
// Signer Certificate selection

// SimpleCertificateSelector allow to select the signer certificate in the token
// QualifiedCertificateSelector select automatically the qualified certificate

CertificateSelector certSelector = 
    new SimpleCertificateSelector();

string text = "text to sign";
byte[] bufferToSign = Encoding.Default.GetBytes(text);
// Applies CADES signature
SignedDocument signedDocument = 
    dsign.Sign(bufferToSign, certSelector, true, false);

// verifica la firma
bool b = signedDocument.Verify();


Sample Code (C)

int ret;

// set optional config file if any
ret = qdigitsign_set(QDIGITSIGN_OPT_CONFIG_FILE, "config.conf");

// set log file
ret = qdigitsign_set(QDIGITSIGN_OPT_LOG_FILE, "log.log");

// set log level

// set the license if any
ret = qdigitsign_set(QDIGITSIGN_OPT_LICENSEE, "<licensee>");
ret = qdigitsign_set(QDIGITSIGN_OPT_PRODUCTKEY, "<productkey");

// initialize the signature engine
ctx = qdigitsign_sign_init();

// set PKCS#11 module
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_PKCS11, "smaoscki");

// set CAdES option   
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_CADES, 1);

// set the smart card PIN
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_PIN, "1234");

// set the certificate alias (i.e. the Label in PKCS#11 speaking)
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_ALIAS, "signature");

// set the file to sign
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_INPUTFILE, "test.docx");

// set the optional TSA information
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_TSA_URL, "<tsaurl>");
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_TSA_USERNAME, "<username>");
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_TSA_PASSWORD, "<password>");

// set optional output file
ret = qdigitsign_sign_set(ctx, QDIGITSIGN_OPT_OUTPUTFILE, "test.txt.p7m");

// set the filetype

// Sign
ret = qdigitsign_sign_sign(ctx);

// cleanup after signing