Source code for pdftools_sdk.crypto.providers.swisscom_sig_srv.session

from __future__ import annotations
import io
from typing import List, Iterator, Tuple, Optional, Any, TYPE_CHECKING, Callable
from ctypes import *
from datetime import datetime
from numbers import Number
from pdftools_sdk.internal import _lib
from pdftools_sdk.internal.utils import _string_to_utf16, _utf16_to_string
from pdftools_sdk.internal.streams import _StreamDescriptor, _NativeStream
from pdftools_sdk.internal.native_base import _NativeBase
from pdftools_sdk.internal.native_object import _NativeObject

import pdftools_sdk.internal
import pdftools_sdk.crypto.providers.provider

if TYPE_CHECKING:
    from pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration import SignatureConfiguration
    from pdftools_sdk.crypto.providers.swisscom_sig_srv.step_up import StepUp
    from pdftools_sdk.crypto.providers.swisscom_sig_srv.timestamp_configuration import TimestampConfiguration
    from pdftools_sdk.http_client_handler import HttpClientHandler

else:
    SignatureConfiguration = "pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration.SignatureConfiguration"
    StepUp = "pdftools_sdk.crypto.providers.swisscom_sig_srv.step_up.StepUp"
    TimestampConfiguration = "pdftools_sdk.crypto.providers.swisscom_sig_srv.timestamp_configuration.TimestampConfiguration"
    HttpClientHandler = "pdftools_sdk.http_client_handler.HttpClientHandler"


[docs] class Session(pdftools_sdk.crypto.providers.provider.Provider): """ The Swisscom Signing Service When signing with this provider, these errors can occur: - :class:`pdftools_sdk.permission_error.PermissionError` : The server did not accept the SSL client certificate or the Claimed Identity string. - :class:`pdftools_sdk.permission_error.PermissionError` : The requested requested distinguished name of the on-demand certificate is not allowed (:meth:`pdftools_sdk.crypto.providers.swisscom_sig_srv.session.Session.create_signature_for_on_demand_identity` ). - :class:`pdftools_sdk.retry_error.RetryError` : The signing request could not be processed on time by the service. The service may be overloaded. - :class:`ValueError` : The key identity of the Claimed Identity string is invalid or not allowed. - :class:`pdftools_sdk.http_error.HttpError` : If a network error occurs or the service is not operational. When signing with step-up authorization, these errors can also occur. - :class:`pdftools_sdk.permission_error.PermissionError` : The user canceled the authorization request or failed to enter correct authentication data (password, OTP). """
[docs] def __init__(self, url: str, http_client_handler: HttpClientHandler): """ Args: url (str): The service endpoint base URL. Example: `https://ais.swisscom.com` httpClientHandler (pdftools_sdk.http_client_handler.HttpClientHandler): The SSL configuration with the client certificate and trust store. Use :meth:`pdftools_sdk.http_client_handler.HttpClientHandler.set_client_certificate` to set your SSL client certificate "clientcert.p12" of your Swisscom Signing Service account. Raises: pdftools_sdk.http_error.HttpError: If a network error occurs. pdftools_sdk.permission_error.PermissionError: If the SSL client certificate is rejected. """ from pdftools_sdk.http_client_handler import HttpClientHandler if not isinstance(url, str): raise TypeError(f"Expected type {str.__name__}, but got {type(url).__name__}.") if not isinstance(http_client_handler, HttpClientHandler): raise TypeError(f"Expected type {HttpClientHandler.__name__}, but got {type(http_client_handler).__name__}.") _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_NewW.argtypes = [c_wchar_p, c_void_p] _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_NewW.restype = c_void_p ret_val = _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_NewW(_string_to_utf16(url), http_client_handler._handle) if ret_val is None: _NativeBase._throw_last_error(False) super()._initialize(ret_val)
[docs] def create_signature_for_static_identity(self, identity: str, name: str) -> SignatureConfiguration: """ Create a signature configuration for a static certificate. Args: identity (str): The Claimed Identity string as provided by Swisscom: `‹customer name›:‹key identity›` Example: `"ais-90days-trial:static-saphir4-ch"` name (str): Name of the signer. This parameter is not used for certificate selection, but for the signature appearance and signature description in the PDF only. Example: `"Signing Service TEST account"` Returns: pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration.SignatureConfiguration: """ from pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration import SignatureConfiguration if not isinstance(identity, str): raise TypeError(f"Expected type {str.__name__}, but got {type(identity).__name__}.") if not isinstance(name, str): raise TypeError(f"Expected type {str.__name__}, but got {type(name).__name__}.") _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForStaticIdentityW.argtypes = [c_void_p, c_wchar_p, c_wchar_p] _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForStaticIdentityW.restype = c_void_p ret_val = _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForStaticIdentityW(self._handle, _string_to_utf16(identity), _string_to_utf16(name)) if ret_val is None: _NativeBase._throw_last_error(False) return SignatureConfiguration._create_dynamic_type(ret_val)
[docs] def create_signature_for_on_demand_identity(self, identity: str, distinguished_name: str, step_up: Optional[StepUp]) -> SignatureConfiguration: """ Create a signature configuration for an on-demand certificate Args: identity (str): The Claimed Identity string as provided by Swisscom: `‹customer name›:‹key identity›` Example: `"ais-90days-trial:OnDemand-Advanced4"` distinguishedName (str): The requested distinguished name of the on-demand certificate. Example: `"cn=Hans Muster,o=ACME,c=CH"` stepUp (Optional[pdftools_sdk.crypto.providers.swisscom_sig_srv.step_up.StepUp]): Options for step-up authorization using Mobile ID. Returns: pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration.SignatureConfiguration: """ from pdftools_sdk.crypto.providers.swisscom_sig_srv.step_up import StepUp from pdftools_sdk.crypto.providers.swisscom_sig_srv.signature_configuration import SignatureConfiguration if not isinstance(identity, str): raise TypeError(f"Expected type {str.__name__}, but got {type(identity).__name__}.") if not isinstance(distinguished_name, str): raise TypeError(f"Expected type {str.__name__}, but got {type(distinguished_name).__name__}.") if step_up is not None and not isinstance(step_up, StepUp): raise TypeError(f"Expected type {StepUp.__name__} or None, but got {type(step_up).__name__}.") _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForOnDemandIdentityW.argtypes = [c_void_p, c_wchar_p, c_wchar_p, c_void_p] _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForOnDemandIdentityW.restype = c_void_p ret_val = _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateSignatureForOnDemandIdentityW(self._handle, _string_to_utf16(identity), _string_to_utf16(distinguished_name), step_up._handle if step_up is not None else None) if ret_val is None: _NativeBase._throw_last_error(False) return SignatureConfiguration._create_dynamic_type(ret_val)
[docs] def create_timestamp(self, identity: str) -> TimestampConfiguration: """ Create a time-stamp configuration Args: identity (str): The Claimed Identity string as provided by Swisscom: `‹customer name›` Example: `"ais-90days-trial"` Returns: pdftools_sdk.crypto.providers.swisscom_sig_srv.timestamp_configuration.TimestampConfiguration: """ from pdftools_sdk.crypto.providers.swisscom_sig_srv.timestamp_configuration import TimestampConfiguration if not isinstance(identity, str): raise TypeError(f"Expected type {str.__name__}, but got {type(identity).__name__}.") _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateTimestampW.argtypes = [c_void_p, c_wchar_p] _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateTimestampW.restype = c_void_p ret_val = _lib.PdfToolsCryptoProvidersSwisscomSigSrv_Session_CreateTimestampW(self._handle, _string_to_utf16(identity)) if ret_val is None: _NativeBase._throw_last_error(False) return TimestampConfiguration._create_dynamic_type(ret_val)
@staticmethod def _create_dynamic_type(handle): return Session._from_handle(handle) @classmethod def _from_handle(cls, handle): """ Internal factory method for constructing an instance using an internal handle. This method creates an instance of the class by bypassing the public constructor. """ instance = Session.__new__(cls) # Bypass __init__ instance._initialize(handle) return instance def _initialize(self, handle): super()._initialize(handle)