@REM $Id DoTests.bat $
@REM $Date: 2022-03-09T11:51Z $
@PROMPT $G$S
@ECHO.
@ECHO DOING TESTS WITH FIRMASAT...
FirmaSAT LIBINFO

@ECHO.
@ECHO CHECK THAT XML STRUCTURE IS OK...
FirmaSAT XMLOK cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO FORM THE PIPE STRING (CADENA ORIGINAL)...
FirmaSAT PIPESTRING cfdv40-ejemplo.xml 
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO CREATE THE SIGNATURE (SELLO) AS A STRING...
FirmaSAT MAKESIG -k emisor.key -p 12345678a cfdv40-ejemplo.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO SIGN AN XML FILE...
FirmaSAT SIGNXML -s @ -k emisor.key -p 12345678a -c emisor.cer -i cfdv40-ejemplo.xml -o cfdv40_new-signed.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO VERIFY THAT THE SIGNATURE IN THE NEW SIGNED FILE WE CREATED IS OK...
FirmaSAT VERIFYSIG cfdv40_new-signed.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO VERIFY AN EXISTING SIGNATURE...
FirmaSAT VERIFYSIG cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO DISPLAY AN ATTRIBUTE FROM AN XML FILE...
FirmaSAT ATTRIBUTE -d -a Sello -e Comprobante -i cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO DISPLAY SOME CERTIFICATE PROPERTIES...
FirmaSAT NUMBERCERT cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

FirmaSAT QUERYCERT -q notAfter emisor.cer
@IF ERRORLEVEL 1 goto ERROR

FirmaSAT QUERYCERT -q notBefore emisor.cer
@IF ERRORLEVEL 1 goto ERROR

FirmaSAT CERTSTRING emisor.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO COMPUTE THE DIGEST OF THE CADENA ORIGINAL...
FirmaSAT FORMDIGEST cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO EXTRACT THE DIGEST FROM THE SIGNATURE FIELD...
FirmaSAT EXTRACTDIGEST cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO CHECK THAT KEY AND CERTIFICATE MATCH...
FirmaSAT KEYCHECK -k emisor.key -p 12345678a emisor.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT KEYCHECK -k pac.key -p 12345678a pac.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO DISPLAY THE COMPROBANTE VERSION NUMBER...
FirmaSAT RECEIPTVERSION cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO OLDER VERSION...
FirmaSAT RECEIPTVERSION cfdv33a-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO GET PRIVATE KEY AS A BASE64 STRING...
FirmaSAT GETKEYSTRING -p 12345678a emisor.key
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO MAKE A PFX FILE FROM PRIVATE KEY AND CERT...
FirmaSAT WRITEPFX -o archivo_new-pfx.txt -n clavedesalida -k emisor.key -p 12345678a -c emisor.cer -s @
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO GET ATTRIBUTE FROM INDEXED ELEMENTS...
FirmaSAT ATTRIBUTE -d -a Descripcion -e cfdi:Concepto[1] -i cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT ATTRIBUTE -d -a Descripcion -e cfdi:Concepto[2] -i cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT ATTRIBUTE -d -a Descripcion -e cfdi:Concepto[3] -i cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO GET ATTRIBUTES USING UTF-8-ENCODED NAMES AND VALUES...
FirmaSAT ATTRIBUTE -d -e cfdi:Emisor -a Nombre cfdv40-ejemplo-signed-tfd.xml
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT ATTRIBUTE -d -e nomina12:Receptor -a Antigüedad cfdv40-nomina12.xml
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT ATTRIBUTE -d -e nomina12:CompensacionSaldosAFavor -a Año cfdv40-nomina12.xml
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT ATTRIBUTE -d -e iedu:instEducativas -a CURP cfdv40-ejemplo-niño.xml
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO USING STRICT AND LOOSE OPTIONS FOR XMLOK...
@ECHO.
@ECHO Expecting error -28 here (Bad attribute .. @CURP .. is too long)...
FirmaSAT XMLOK cfdv40-iedu-badcurp.xml
:: NB No test for error.

@ECHO.
@ECHO But using loose (-l) option is OK...
FirmaSAT XMLOK -l cfdv40-iedu-badcurp.xml
@IF ERRORLEVEL 1 goto ERROR


@ECHO.
@ECHO CREATE CADENA ORIGINAL DEL TIMBRE FISCAL DIGITAL (TFD)...
FirmaSAT PIPESTRING -f cfdv40-ejemplo-signed-tfd.xml 
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO COMPUTE THE DIGEST FOR TIMBRE FISCAL DIGITAL (TFD)...
FirmaSAT FORMDIGEST -f cfdv40-ejemplo-signed-tfd.xml 
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO COMPUTE THE SIGNATURE (SELLOSAT) FOR TIMBRE FISCAL DIGITAL (TFD)...
FirmaSAT MAKESIG -f -i cfdv40-ejemplo-signed-tfd.xml -k pac.key -p 12345678a
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO USE QUERYCERT COMMAND...
FirmaSAT QUERYCERT -q serialNumber emisor.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q serialNumber pac.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q rfc emisor.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q organizationName emisor.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO QUERY KEY SIZE OF CERTIFICATES...
FirmaSAT QUERYCERT -q keySize emisor1024.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q keySize emisor.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q keySize AC4_SAT.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO QUERY SIGNATURE ALGORITHM IN CERTIFICATES...
FirmaSAT QUERYCERT -q sigAlg emisor.cer
@IF ERRORLEVEL 1 goto ERROR
FirmaSAT QUERYCERT -q sigAlg emisor1024.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO SAVE KEY WITH NEW PASSWORD (AND IN PEM TEXTUAL FORM)...
FirmaSAT NEWKEY -k emisor.key -p 12345678a -n 87654321b -m -o emisor_new-key.pem
@IF ERRORLEVEL 1 goto ERROR
TYPE emisor_new-key.pem

@ECHO.
@ECHO CHECK NEW KEY STILL MATCHES OLD CERTIFICATE...
FirmaSAT KEYCHECK -k emisor_new-key.pem -p 87654321b emisor.cer
@IF ERRORLEVEL 1 goto ERROR

@ECHO.
@ECHO USE 'FOR' LOOP TO CHECK XML FILES ARE OK (OR NOT)...
FOR %%f IN (cfdv40*.xml) DO @ECHO %%f & FirmaSAT XMLOK %%f

@ECHO.
@ECHO ALL DONE.

@goto DONE
:ERROR
@ECHO Error occurred!

:DONE
@PROMPT $P$G