Skip to main content

XML signing using KalkanCrypt library (Kazakhstan PKI)

Project description

kalkan-xml-signer

Python-библиотека для подписи XML документов с использованием KalkanCrypt (Kazakhstan PKI).

Работает через ctypes-обёртку над нативной библиотекой libkalkancryptwr-64.so.2.0.2, предоставляемой НУЦ РК.

Поддерживаемые ОС: только Debian-подобные дистрибутивы Linux (Debian, Ubuntu, Astra Linux и т.д.).

Installation

pip install kalkan-xml-signer

Prerequisites

1. Получение библиотеки KalkanCrypt SDK

Библиотека libkalkancryptwr-64.so.2.0.2 не включена в пакет и должна быть получена отдельно.

  1. Перейдите на pki.gov.kz/en/get-sdk-3 и запросите SDK
  2. Скачайте SDK и найдите файл libkalkancryptwr-64.so.2.0.2 в папке C/Linux/C/libs/v2.0.2 (Сертифицированная версия)
  3. Скопируйте библиотеку в локальную папку вашего проекта, например:
your-project/
├── libs/
│   └── libkalkancryptwr-64.so.2.0.2
├── certs/
│   └── your_cert.p12
└── main.py

2. Установка корневых сертификатов НУЦ РК

После установки пакета выполните:

sudo kalkan-install-certs

Эта команда установит корневые сертификаты НУЦ РК в системное хранилище (/etc/ssl/certs/).

3. Сертификат для подписи

Для подписи XML вам понадобится сертификат формата PKCS#12 (.p12), выданный НУЦ РК.

Usage

from kalkan_xml_signer import XMLSigner

with XMLSigner(
    lib_path="libs/libkalkancryptwr-64.so.2.0.2",
    cert_path="certs/your_cert.p12",
    cert_password="your_password",
) as signer:
    signed_xml = signer.sign_xml("<root><data>test</data></root>")
    print(signed_xml)

With timestamp

Для добавления метки времени от сервера TSA НУЦ РК:

with XMLSigner(
    lib_path="libs/libkalkancryptwr-64.so.2.0.2",
    cert_path="certs/your_cert.p12",
    cert_password="your_password",
    tsa_url="http://tsp.pki.gov.kz:80",
) as signer:
    signed_xml = signer.sign_xml(
        xml="<root><data>test</data></root>",
        flags=XMLSigner.KC_WITH_TIMESTAMP,
    )

Manual init/finalize

signer = XMLSigner(lib_path="libs/libkalkancryptwr-64.so.2.0.2")
signer.init()
signer.load_certificate("certs/your_cert.p12", "password")
signed_xml = signer.sign_xml("<root/>")
signer.finalize()

Docker

FROM python:3.12-slim-bookworm

RUN apt-get update && apt-get install -y --no-install-recommends libltdl7 libpcsclite1 && rm -rf /var/lib/apt/lists/*

# Копируем библиотеку KalkanCrypt
COPY libs/libkalkancryptwr-64.so.2.0.2 /usr/lib/libkalkancryptwr-64.so.2.0.2

# Устанавливаем пакет
RUN pip install kalkan-xml-signer

# Устанавливаем корневые сертификаты НУЦ РК
RUN kalkan-install-certs

COPY . /app
WORKDIR /app

В коде указываете путь к библиотеке в контейнере:

with XMLSigner(
    lib_path="/usr/lib/libkalkancryptwr-64.so.2.0.2",
    cert_path="certs/your_cert.p12",
    cert_password="your_password",
) as signer:
    signed_xml = signer.sign_xml("<root><data>test</data></root>")

Requirements

  • Python >= 3.10
  • Linux (библиотека KalkanCrypt доступна только для Linux)
  • Нативная библиотека libkalkancryptwr-64.so (запросить SDK)
  • Сертификат PKCS#12 (.p12), выданный НУЦ РК

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kalkan_xml_signer-0.1.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kalkan_xml_signer-0.1.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file kalkan_xml_signer-0.1.0.tar.gz.

File metadata

  • Download URL: kalkan_xml_signer-0.1.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for kalkan_xml_signer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b7ded1ccb64ab8ab6900524370a8b6a6595513d18ff267d1d6b60c61a3de4c41
MD5 80de7ddc583ed56ba02fb89b30b5b94f
BLAKE2b-256 cf63620d5605f3cb1f804438f38bd59af87e872ca19c30adc0c1131dbe164dcc

See more details on using hashes here.

File details

Details for the file kalkan_xml_signer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for kalkan_xml_signer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0d7310af856e9ad5520fa72bad6d320a9f7ad68f88260e4411a8edafa94d5cb6
MD5 77f37c4526d0754e2300596096dbcde7
BLAKE2b-256 8cfb7c167e359b4f0b2bcbc85a21bd7bf0999dc08c1a868a4a6f14528da01bd3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page