defaultUBLExtensionsSignedProperties static method

XmlDocument defaultUBLExtensionsSignedProperties({
  1. required String signingTime,
  2. required String certificateHash,
  3. required String certificateIssuer,
  4. required String certificateSerialNumber,
})

Generates the <xades:SignedProperties> XML structure after signed.

Implementation

static XmlDocument defaultUBLExtensionsSignedProperties({
  required String signingTime,
  required String certificateHash,
  required String certificateIssuer,
  required String certificateSerialNumber,
}) {
  final builder = XmlBuilder();
  builder.element(
    'xades:QualifyingProperties',
    attributes: {
      'Target': 'signature',
      'xmlns:xades': 'http://uri.etsi.org/01903/v1.3.2#',
    },
    nest: () {
      builder.element(
        'xades:SignedProperties',
        nest: () {
          builder.attribute(
            'xmlns:xades',
            'http://uri.etsi.org/01903/v1.3.2#',
          );
          builder.attribute('Id', 'xadesSignedProperties');

          builder.element(
            'xades:SignedSignatureProperties',
            nest: () {
              builder.element('xades:SigningTime', nest: signingTime);

              builder.element(
                'xades:SigningCertificate',
                nest: () {
                  builder.element(
                    'xades:Cert',
                    nest: () {
                      builder.element(
                        'xades:CertDigest',
                        nest: () {
                          builder.element(
                            'ds:DigestMethod',
                            nest: () {
                              builder.attribute(
                                'Algorithm',
                                'http://www.w3.org/2001/04/xmlenc#sha256',
                              );
                              builder.text('');
                            },
                          );
                          builder.element(
                            'ds:DigestValue',
                            nest: certificateHash,
                          );
                        },
                      );

                      builder.element(
                        'xades:IssuerSerial',
                        nest: () {
                          builder.element(
                            'ds:X509IssuerName',
                            nest: certificateIssuer,
                          );
                          builder.element(
                            'ds:X509SerialNumber',
                            nest: certificateSerialNumber,
                          );
                        },
                      );
                    },
                  );
                },
              );
            },
          );
        },
      );
    },
  );

  return builder.buildDocument();
}