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 не включена в пакет и должна быть получена отдельно.
- Перейдите на pki.gov.kz/en/get-sdk-3 и запросите SDK
- Скачайте SDK и найдите файл
libkalkancryptwr-64.so.2.0.2в папкеC/Linux/C/libs/v2.0.2 (Сертифицированная версия) - Скопируйте библиотеку в локальную папку вашего проекта, например:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7ded1ccb64ab8ab6900524370a8b6a6595513d18ff267d1d6b60c61a3de4c41
|
|
| MD5 |
80de7ddc583ed56ba02fb89b30b5b94f
|
|
| BLAKE2b-256 |
cf63620d5605f3cb1f804438f38bd59af87e872ca19c30adc0c1131dbe164dcc
|
File details
Details for the file kalkan_xml_signer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kalkan_xml_signer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d7310af856e9ad5520fa72bad6d320a9f7ad68f88260e4411a8edafa94d5cb6
|
|
| MD5 |
77f37c4526d0754e2300596096dbcde7
|
|
| BLAKE2b-256 |
8cfb7c167e359b4f0b2bcbc85a21bd7bf0999dc08c1a868a4a6f14528da01bd3
|