Skip to content

Commit 1a8c0a0

Browse files
authored
Merge pull request #21 from eclipxe13/version-1.2.2
Corregir el número de serie en mayúsculas y mantenimiento (versión 1.2.2)
2 parents f1d8fa6 + 261fe93 commit 1a8c0a0

File tree

14 files changed

+143
-56
lines changed

14 files changed

+143
-56
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@
1717
/phpstan.neon.dist export-ignore
1818
/phpunit.xml.dist export-ignore
1919
/sonar-project.properties export-ignore
20+
21+
# Do not count these files on github code language
22+
/tests/_files/** linguist-detectable=false

.github/workflows/build.yml

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
name: build
22
on:
3+
workflow_dispatch:
34
pull_request:
45
branches: [ "main" ]
56
push:
@@ -17,11 +18,11 @@ jobs:
1718
runs-on: "ubuntu-latest"
1819
steps:
1920
- name: Checkout
20-
uses: actions/checkout@v3
21+
uses: actions/checkout@v4
2122
- name: Setup PHP
2223
uses: shivammathur/setup-php@v2
2324
with:
24-
php-version: '8.2'
25+
php-version: '8.3'
2526
coverage: none
2627
tools: composer-normalize
2728
env:
@@ -34,11 +35,11 @@ jobs:
3435
runs-on: "ubuntu-latest"
3536
steps:
3637
- name: Checkout
37-
uses: actions/checkout@v3
38+
uses: actions/checkout@v4
3839
- name: Setup PHP
3940
uses: shivammathur/setup-php@v2
4041
with:
41-
php-version: '8.2'
42+
php-version: '8.3'
4243
coverage: none
4344
tools: cs2pr, phpcs
4445
env:
@@ -51,30 +52,28 @@ jobs:
5152
runs-on: "ubuntu-latest"
5253
steps:
5354
- name: Checkout
54-
uses: actions/checkout@v3
55+
uses: actions/checkout@v4
5556
- name: Setup PHP
5657
uses: shivammathur/setup-php@v2
5758
with:
58-
php-version: '8.2'
59+
php-version: '8.3'
5960
coverage: none
6061
tools: cs2pr, php-cs-fixer
6162
env:
6263
fail-fast: true
6364
- name: Code style (php-cs-fixer)
6465
run: php-cs-fixer fix --dry-run --format=checkstyle | cs2pr
65-
env:
66-
PHP_CS_FIXER_IGNORE_ENV: 1
6766

6867
phpstan:
6968
name: Code analysis (phpstan)
7069
runs-on: "ubuntu-latest"
7170
steps:
7271
- name: Checkout
73-
uses: actions/checkout@v3
72+
uses: actions/checkout@v4
7473
- name: Setup PHP
7574
uses: shivammathur/setup-php@v2
7675
with:
77-
php-version: '8.2'
76+
php-version: '8.3'
7877
coverage: none
7978
tools: composer:v2, phpstan
8079
env:
@@ -83,7 +82,7 @@ jobs:
8382
id: composer-cache
8483
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
8584
- name: Cache dependencies
86-
uses: actions/cache@v3
85+
uses: actions/cache@v4
8786
with:
8887
path: ${{ steps.composer-cache.outputs.dir }}
8988
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
@@ -98,10 +97,10 @@ jobs:
9897
runs-on: "ubuntu-latest"
9998
strategy:
10099
matrix:
101-
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2']
100+
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
102101
steps:
103102
- name: Checkout
104-
uses: actions/checkout@v3
103+
uses: actions/checkout@v4
105104
- name: Setup PHP
106105
uses: shivammathur/setup-php@v2
107106
with:
@@ -114,7 +113,7 @@ jobs:
114113
id: composer-cache
115114
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
116115
- name: Cache dependencies
117-
uses: actions/cache@v3
116+
uses: actions/cache@v4
118117
with:
119118
path: ${{ steps.composer-cache.outputs.dir }}
120119
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}

.github/workflows/coverage.yml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
name: coverage
22
on:
3+
workflow_dispatch:
34
push:
45
branches: [ "main" ]
56

@@ -14,11 +15,11 @@ jobs:
1415
runs-on: "ubuntu-latest"
1516
steps:
1617
- name: Checkout
17-
uses: actions/checkout@v3
18+
uses: actions/checkout@v4
1819
- name: Setup PHP
1920
uses: shivammathur/setup-php@v2
2021
with:
21-
php-version: '8.2'
22+
php-version: '8.3'
2223
coverage: xdebug
2324
tools: composer:v2
2425
env:
@@ -27,7 +28,7 @@ jobs:
2728
id: composer-cache
2829
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
2930
- name: Cache dependencies
30-
uses: actions/cache@v3
31+
uses: actions/cache@v4
3132
with:
3233
path: ${{ steps.composer-cache.outputs.dir }}
3334
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
@@ -37,7 +38,7 @@ jobs:
3738
- name: Create code coverage
3839
run: vendor/bin/phpunit --testdox --verbose --coverage-xml=build/coverage --coverage-clover=build/coverage/clover.xml --log-junit=build/coverage/junit.xml
3940
- name: Store code coverage
40-
uses: actions/upload-artifact@v3
41+
uses: actions/upload-artifact@v4
4142
with:
4243
name: code-coverage
4344
path: build/coverage
@@ -72,28 +73,28 @@ jobs:
7273
runs-on: "ubuntu-latest"
7374
steps:
7475
- name: Checkout
75-
uses: actions/checkout@v3
76+
uses: actions/checkout@v4
7677
- name: Unshallow clone to provide blame information
7778
run: git fetch --unshallow
7879
- name: Setup PHP
7980
uses: shivammathur/setup-php@v2
8081
with:
81-
php-version: '8.2'
82+
php-version: '8.3'
8283
coverage: none
8384
tools: composer:v2
8485
- name: Get composer cache directory
8586
id: composer-cache
8687
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
8788
- name: Cache dependencies
88-
uses: actions/cache@v3
89+
uses: actions/cache@v4
8990
with:
9091
path: ${{ steps.composer-cache.outputs.dir }}
9192
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
9293
restore-keys: ${{ runner.os }}-composer-
9394
- name: Install project dependencies
9495
run: composer upgrade --no-interaction --no-progress --prefer-dist
9596
- name: Obtain code coverage
96-
uses: actions/download-artifact@v3
97+
uses: actions/download-artifact@v4
9798
with:
9899
name: code-coverage
99100
path: build/coverage

.phive/phars.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phive xmlns="https://phar.io/phive">
3-
<phar name="php-cs-fixer" version="^3.17.0" installed="3.17.0" location="./tools/php-cs-fixer" copy="false"/>
4-
<phar name="phpcs" version="^3.7.2" installed="3.7.2" location="./tools/phpcs" copy="false"/>
5-
<phar name="phpcbf" version="^3.7.2" installed="3.7.2" location="./tools/phpcbf" copy="false"/>
6-
<phar name="phpstan" version="^1.10.15" installed="1.10.15" location="./tools/phpstan" copy="false"/>
7-
<phar name="composer-normalize" version="^2.31.0" installed="2.31.0" location="./tools/composer-normalize" copy="false"/>
3+
<phar name="php-cs-fixer" version="^3.58.1" installed="3.58.1" location="./tools/php-cs-fixer" copy="false"/>
4+
<phar name="phpcs" version="^3.10.1" installed="3.10.1" location="./tools/phpcs" copy="false"/>
5+
<phar name="phpcbf" version="^3.10.1" installed="3.10.1" location="./tools/phpcbf" copy="false"/>
6+
<phar name="phpstan" version="^1.11.4" installed="1.11.4" location="./tools/phpstan" copy="false"/>
7+
<phar name="composer-normalize" version="^2.42.0" installed="2.42.0" location="./tools/composer-normalize" copy="false"/>
88
</phive>

.php-cs-fixer.dist.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
'whitespace_after_comma_in_array' => true,
2323
'no_empty_statement' => true,
2424
'no_extra_blank_lines' => true,
25-
'function_typehint_space' => true,
25+
'type_declaration_spaces' => true,
2626
'trailing_comma_in_multiline' => ['after_heredoc' => true, 'elements' => ['arrays']],
2727
'no_blank_lines_after_phpdoc' => true,
2828
'object_operator_without_whitespace' => true,

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2019 - 2023 PhpCfdi https://www.phpcfdi.com/
3+
Copyright (c) 2019 - 2024 PhpCfdi https://www.phpcfdi.com/
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,31 @@ Notas de tratamiento de archivos `DER`:
119119
Para entender más de los formatos de llaves privadas se puede consultar la siguiente liga:
120120
<https://github.com/kjur/jsrsasign/wiki/Tutorial-for-PKCS5-and-PKCS8-PEM-private-key-formats-differences>
121121

122+
## Acerca de los números de serie
123+
124+
Los certificados contienen un número de serie expresado en notación hexadecimal, por ejemplo, el número
125+
de serie `27 2B` se refiere al certificado número `10027` expresado en decimal.
126+
127+
Para el SAT, sin embargo, se reconoce el número de serie no como el estándar en hexadecimal.
128+
El SAT pide que el número de serie reflejado sea **la expresión hexadecimal convertida a ASCII**.
129+
Luego entonces, el certificado con número de serie `3330303031303030303030333030303233373038`
130+
lo identifica como `30001000000300023708`.
131+
132+
Esta práctica del SAT no es estándar, y no es comúnmente observada. Sin embargo, así ha decidido que se
133+
interpreten el dato de "número de serie" referido en sus certificados emitidos, por ejemplo en el atributo
134+
`Comprobante@NoCertificado`.
135+
136+
Como ejemplo contrario: En el firmado de documentos XML utilizado en el servicio web de descarga masiva,
137+
sí se utiliza la notación decimal (el número hexadecimal convertido a decimal), en lugar de la notación de bytes.
138+
139+
La notación de bytes es problemática porque no todos los caracteres son imprimibles o
140+
cuentan una representación gráfica. La notación hexadecimal es ligeramente problemática
141+
porque tiene muchas variantes como el uso de mayúsculas y minúsculas o el prefijo `0x`.
142+
La notación decimal no tiene problema, se trata simplemente de un entero muy grande,
143+
tan grande que debe tratarse como una cadena de caracteres.
144+
145+
Espero que en algún futuro el SAT reconsidere y utilice una notación decimal, para referirnos al número de serie.
146+
122147
## Leer y exportar archivos PFX
123148

124149
Esta librería soporta obtener el objeto `Credential` desde un archivo PFX (PKCS #12) y vicerversa.

docs/CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,37 @@ versión, aunque sí su incorporación en la rama principal de trabajo. Generalm
1111

1212
## Listado de cambios
1313

14+
### Versión 1.2.2 2024-06-06
15+
16+
Se corrigió el problema de no crear correctamente el número de serie cuando incluía caracteres en mayúsculas.
17+
Anteriormente, se hacía una conversión a minúsculas, ahora se expresa en mayúsculas.
18+
19+
Se agrega el método `SerialNumber::bytesArePrintable(): bool` para identificar que el número de serie de un certificado
20+
contiene solamente caracteres imprimibles en su representación como *bytes*, como en el caso de los números de serie
21+
utilizados por el SAT.
22+
23+
Se refactorizan los métodos `SerialNumber::createFromBytes()` y `SerialNumber::bytes()` para usar las funciones
24+
de PHP `bin2hex` y `hex2bin` respectivamente.
25+
26+
Se agrega documentación en el archivo `README.md` explicando la interpretación del número de serie como hexadecimal,
27+
decimal y *bytes*. Así como el uso específico del SAT.
28+
29+
Se actualiza el año de licencia a 2024.
30+
31+
Se garantiza la compatibilidad con PHP 8.3.
32+
33+
Adicionalmente, se hacen los siguientes cambios internos:
34+
35+
- Se remueven los archivos `test/_files` de la detección de lenguaje de GitHub.
36+
- En los flujos de trabajo de GitHub.
37+
- Se permite la ejecución manual.
38+
- Se agrega PHP 8.3 a la matriz de pruebas.
39+
- Se ejecutan los trabajos en PHP 8.3.
40+
- Se actualizan las acciones de GitHub a la versión 4.
41+
- En el trabajo `php-cs-fixer` se remueve la variable de entorno `PHP_CS_FIXER_IGNORE_ENV`.
42+
- Se corrige `.php-cs-fixer.dist.php` sustituyendo `function_typehint_space` por `type_declaration_spaces`.
43+
- Se actualizan las herramientas de desarrollo.
44+
1445
### Versión 1.2.1 2023-05-24
1546

1647
PHPStan detectó un uso inapropiado de conversión de objeto a cadena de caracteres.

docs/Certificados.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,3 @@ Los certificados están vinculados con un creador, llamado emisor o entidad cert
1111
Con un certificado se pueden realizar pocas acciones, en específico:
1212
- extraer información de quien esté relacionado con el certificado
1313
- obtener la llave pública (para poder verificar un mensaje)
14-
15-
16-

sonar-project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ sonar.sourceEncoding=UTF-8
44
sonar.language=php
55
sonar.sources=src
66
sonar.tests=tests
7-
sonar.exclusions=vendor/,tools/,build/,tests/_files/
7+
sonar.test.exclusions=tests/_files/**/*
88
sonar.working.directory=build/.scannerwork
99
sonar.php.tests.reportPath=build/sonar-junit.xml
1010
sonar.php.coverage.reportPaths=build/sonar-coverage.xml

0 commit comments

Comments
 (0)