pyfva
Cliente para conectar instituciones con BCCR FVA.
Abstrae la comunicación entre los servicios SOAP del BCCR y python creando clientes de fácil uso, por ejemplo si se desea autenticar a una persona se realizaría como
from pyfva.clientes.autenticador import ClienteAutenticador
authclient = ClienteAutenticador(1,1) # negocio, entidad
if authclient.validar_servicio():
data = authclient.solicitar_autenticacion('08-0888-0888')
else:
# warnings.warn("Auth BCCR No disponible", RuntimeWarning)
data = authclient.DEFAULT_ERROR
Enlaces de interés
Los siguientes enlaces son de proyectos de interés relacionados con el desarrollo de firma digital.
Instalación
Instale mediante pypi
pip install pyfva[soap]
o usando el repositorio
pip install git+https://github.com/solvo/pyfva.git
en caso de solo querer los servicios Rest
pip install pyfva
Documentación
Por supuesto la documentoación está aquí
Parámetros de ambiente
Los siguientes parámetros pueden ser modificados usando variables de entorno o variables en django settings.
Los valores por defecto son:
FVA_HOST = “http://bccr.fva.cr/”
RECEPTOR_HOST = ‘http://bccr.fva.cr/’
Ambos son direcciones del esquema, deben ser iguales al esquema del servicio WSDL.
STUB_SCHEME = ‘http’
STUB_HOST = “localhost:8001”
Dirección y protocolo donde se ubica el servicio FVA.
DEFAULT_BUSSINESS = 1
DEFAULT_ENTITY = 1
Números de identificación en el servicio FVA. (en el simulador no son usados).
RECEPTOR_CLIENT = ‘pyfva.receptor.client’
Cliente para recibir las respuestas del FVA.
Configurando entorno del BCCR externo
Las siguientes configuraciones son requeridas, los archivos deben estar en formato PEM
REQUESTS_CA_BUNDLE=/<ruta de archivo>/ca_nacional_de_CR.pem
REQUESTS_CA_PATH=/<ruta de archivo>/ca_nacional_de_CR.pem
REQUESTS_CERT_PATH=/<ruta de archivo>/bccr_agent.pem
REQUESTS_KEY_PATH=/<ruta de archivo>/bccr_agent_key.pem
STUB_SCHEME = ‘https’
STUB_HOST = “firmadorexterno.bccr.fi.cr”
Para realizar pruebas de conexión es importante configurar una comunicación por ssl, los siguientes comándos pueden ser de ayuda
Unifica la cadena de certificados de confianza
Puede descargarse desde
Convierta los archivos a PEM
openssl x509 -in 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.cer' -out 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.pem' -inform DER
openssl x509 -in 'CA SINPE - PERSONA JURIDICA v2.cer' -out 'CA SINPE - PERSONA JURIDICA v2.pem' -inform DER
openssl x509 -in 'CA RAIZ NACIONAL - COSTA RICA v2.cer' -out 'CA RAIZ NACIONAL - COSTA RICA v2.pem' -inform DER
cp 'Certificado BANCO CENTRAL DE COSTA RICA (AGENTE ELECTRONICO).cer' 'Certificado BANCO CENTRAL DE COSTA RICA (AGENTE ELECTRONICO).pem'
cp 'CA SINPE - PERSONA JURIDICA v2(1).crt' 'CA SINPE - PERSONA JURIDICA v2(1).pem'
cat 'CA RAIZ NACIONAL - COSTA RICA v2.pem' 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.pem' 'CA SINPE - PERSONA JURIDICA v2.pem' 'CA SINPE - PERSONA JURIDICA v2(1).pem' > ca_nacional_de_CR.pem
Verifique que su certificado está validado por la CA que acaba de crear
openssl verify -verbose -CAfile ca_nacional_de_CR.pem bccr_agent.pem
Verifica que puede realizar una conexión con el BCCR autenticándose con el certificado
curl --http1.1 --cert bccr_agent.pem --key bccr_agent_key.pem --cacert ca_nacional_de_CR.pem https://firmadorexterno.bccr.fi.cr:443/WebServices/Bccr.Fva.Entidades.AmbDePruebas.Sello.Ws.SI/SelladorElectronicoConControlDeLlave.asmx?wsdl
Verifique que puede puede recibir notificaciones
openssl s_server -key bccr_agent_key.pem -cert bccr_agent.pem -CAfile ca_nacional_de_CR.pem -accept 8443 -www -tlsextdebug -debug -cipher ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA:AES128-SHA256:AES256-SHA256 -tls1_2 -named_curve P-256
Las siguientes funciones pueden ser de ayuda para deteminar los cálculos
def get_digest(digest_name):
if 'sha256' == digest_name:
return hashlib.sha256()
elif 'sha384' == digest_name:
return hashlib.sha384()
elif 'sha512' == digest_name:
return hashlib.sha512()
def get_hash_sum(data, algorithm, b64=False):
if type(data) == str:
data = data.encode()
digest = get_digest(algorithm)
digest.update(data)
if b64:
return base64.b64encode(digest.digest()).decode()
hashsum = digest.hexdigest()
return hashsum
Para leer un archivo se puede utilizar algo como esto
with open('/<ruta al archivo>/test.docx', 'rb') as arch:
FI = arch.read()
ARCH = base64.b64encode(FI).decode()
HASH = get_hash_sum(FI, 'sha512', b64=True)
data = stampclient.firme(ARCH, 'msoffice', hash_doc=HASH)
Generar documentación
Instale Sphinx mediante pypi
pip install -U Sphinx sphinx_rtd_theme
Cambiese de directorio y ejecute la creación de códigos
cd docs
bash build_doc.sh
Para regenerar la documentación, si no se tienen cambios en los códigos de error
make html
Correr las pruebas
Cree una carpeta llamada certs en la base del proyecto y ponga ahí los certificados y llaves privadas
ca_nacional_de_CR.pem
bccr_agent.pem
bccr_agent_key.pem
Se necesita correr la aplicación que recibirá las peticiones desde el BCCR
cd demo
./run_receptor.sh
En caso de correrse de forma local no olvidar
python manage.py createcachetable
Luego sobre pyfva se ejecuta
python -m unittest pyfva.tests
Crear y correr con Docker las pruebas
note:: El archivo run_test.sh debe modificar el negocio y la entidad antes de generar la imagen
El receptor escucha el puerto 0.0.0.0:8443/notifica, esto debería estar registrado en central directo con el nombre de dominio adecuado.
Para construir la imagen.
docker build -t pyfva .
Para correr una instancia de pruebas.
docker run --name pyfvatest -v `pwd`/certs:/app/certs -p 8443:8443 pyfva
Para correr las pruebas.
docker exec -ti pyfvatest bash
cd /app
bash run_test.sh
Metadata
Release files for pyfva 0.0.46
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyfva-0.0.46.tar.gz | 55.8 kB | Without provenance | Details for pyfva-0.0.46.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyfva-0.0.46-py3-none-any.whl | Python 3 | none | any | Details for pyfva-0.0.46-py3-none-any.whl |
Total release size: 128.3 kB
Release files / pyfva-0.0.46.tar.gz
| Download URL | pyfva-0.0.46.tar.gz |
|---|---|
| Size | 55.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f086802254b51a5201cf25a16f1a5405945a751f1e636d90aef29e83832566b
|
|
BLAKE2b-256 checksum How to use checksums |
fff67f51da77d28a7ed6f691c683b488efa67536e56a5d8ba0398a1ff1d02f8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / pyfva-0.0.46-py3-none-any.whl
| Download URL | pyfva-0.0.46-py3-none-any.whl |
|---|---|
| Size | 72.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4cf89e86b207bbb60c9dd58cceeb458bcf3b61fdea2e1c71e99a7382575c5802
|
|
BLAKE2b-256 checksum How to use checksums |
19ede71ea6fa6a2b976835afdb26b90aa6368d8674eb5746e87b0cabb3701dc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for pyfva 0.0.46
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.