JustPaste.it

Nuevas notas sobre la conformacion en memoria de los chips de Vot.Ar

Anterior: https://justpaste.it/lw65

ESTRUCTURA DE DATOS EN EL CHIP (idem anterior):
    BLOQUES: 28
    BYTES X BLOQUES: 4
    MODELO:
      BLOQUE#    BYTES       
        [00]...KK TT TT LL
        [01]...CC CC CC CC
        [02]...DD DD DD DD
        [03]...DD DD DD DD
        [04]...DD DD DD DD
        [05]...DD DD DD DD
        [06]...DD DD DD DD
        [07]...DD DD DD DD
        [08]...DD DD DD DD
        [09]...DD DD DD DD
        [0A]...DD DD DD DD
        [0B]...DD DD DD DD
        [0C]...DD DD DD DD
        [0D]...DD DD DD DD
        [0E]...DD DD DD DD
        [0F]...DD DD DD DD
        [10]...DD DD DD DD
        [11]...DD DD DD DD
        [12]...DD DD DD DD
        [13]...DD DD DD DD
        [14]...DD DD DD DD
        [15]...DD DD DD DD
        [16]...DD DD DD DD
        [17]...DD DD DD DD
        [18]...DD DD DD DD
        [19]...DD DD DD DD
        [1A]...DD DD DD DD
        [1B]...WW WW WW WW

Esa es la disposición en memoria del chip de los datos.
    REFERENCIAS:
        KK:    Token (1 Byte): Debe elegirse de una tabla.  Valores: 1C; (no encontre otro valor posible)
        TT:    Tipo Tarjeta (2 Bytes en Big Endian): Debe elegirse de una tabla. Valores:
          COD_TAG_VACIO = '\x00\x00'
          COD_TAG_VOTO = '\x00\x01'
          COD_TAG_USUARIO_MSA = '\x00\x02'
          COD_TAG_PRESIDENTE_MESA = '\x00\x03'
          COD_TAG_RECUENTO = '\x00\x04'
          COD_TAG_APERTURA = '\x00\x05'
          COD_TAG_DEMO = '\x00\x06'
          COD_TAG_VIRGEN = '\x00\x07'
          COD_TAG_INICIO = '\x00\x7F' (transmisión)
          COD_TAG_ADDENDUM = '\x00\x80'
          COD_TAG_DESCONOCIDO = '\xff\xff'
        LL:    Longitud de datos (1 Byte): Es la cant de bytes del tipo DD.
        CC:    CRC32 (4Bytes ordenados en Big Endian): CRC32(DD).
        DD:    Datos (MAX 100 Bytes): Datos.
        WW:     Verif (4 Bytes): Debe elegirse de una tabla. Valores: 57 5F 4F 4B (W_OK); (no encontre otro valor posible)
        De hecho, el soft NO verifica en absoluto este valor, ni tampoco lo escribe.
        Aparentemente, es usado por MSA para testear los chips antes de entregar las boletas.
        Todas las boletas que vi en blanco tenian este código.  Probe si la máquina permitia votar en una boleta que no tuviera este valor y funciono sin problemas.

BOLETAS ESPECIALES
Querés ser técnico? O presidente de mesa?
Te encargas de capacitacion y la empresa no les proveyó de boletas especiales?
las boletas especiales poseen simplemente el valor de TOKEN y el ID de tipo de tarjeta, el resto puede o no estar en blanco, da lo mismo.  Quizá resulte conveniente dejarlo en blanco.
De esta manera, la boleta especial de presidente de mesa es:
[00] 1C 03 00 00
El resto en 0 :D

La de técnico sería:
[00] 1C 02 00 00

Y así siguiendo...

DISPOSICION DE LOS DATOS
Para el voto, los datos se disponen de la siguiente manera:

    COMIENZO DE LOS DATOS
    Se identifica comenzando en el primer bloque de datos [02] la zona o
    distrito y ciudad donde transcurren las elecciones, seguido de un valor
    separador 0x2E y un número que no logré identificar el siginificado.
    Quizá sea identificador de colegio dentro del distrito.
    De esta manera: "02CABA 1" donde el espacio entre CABA y 1 es 0x2E
    (atenti que no es el ASCII de espacio 0x20).

    VOTO
    El voto se genera indicando la categoría seguida del nro identificador
    de la persona votada.  
    Estos identificadores se encuentran en:
    /cdrom/msa/app/datos_json/<nombre_de_la_eleccion>/<ciudad>.<nro>/Candidatos.json
    El valor correspondiente es "codigo", sin incluir el "cod_lista".
    Ej.:
    {
        "asistida": "Mohamed Salem, Ramon",
        "cod_categoria": "DIP",
        "cod_lista": "102",
        "codigo": "102.5337",
        "nombre": "Mohamed Salem, Ramon",
        "numero_de_orden": 1,
        "sexo": "M",
        "titular": true
     }
    El código para ese candidato es 5337.
    Si el código es menor a 4 digitos, se completa con un espacio (0x20) en
    los primeros caracteres, p.e.: " 233"

    Y las categorias en:
    /cdrom/msa/app/datos_json/<nombre_de_la_eleccion>/<ciudad>.<nro>/Categorias.json
    El valor correspondiente es "codigo": COM JEF LEG en estas elecciones

    VOTO EN BLANCO
    El voto en blanco se genera dejando un espacio (0x20) entre la
    categoría y el string BLC (0x 42 4C 43), y luego continúa la próx
    categoría.
    P.E.:    COM BLCDIP BLCJEF BLC
        Este sería un voto en blanco en todas las categorías

    P.E.:    COM5320DIP5521JEF BLC
        Este sería un voto en blanco para JEFe de gob.

    
    EJEMPLO DE VOTO
    BLOQUE#      BYTES       
        [00]...1C 01 00 1D
        [01]...79 36 3E 7E
        [02]...30 32 43 41    02CA
        [03]...42 41 2E 31    BA 1
        [04]...43 4F 4D 35    COM5
       [05]...33 32 31 44    321D
        [06]...49 50 20 35    IP 5
        [07]...31 31 4A 45    11JE
        [08]...46 20 42 4C    F BL
        [09]...43 00 00 00    C
        [0A]...00 00 00 00
        [0B]...00 00 00 00
        [0C]...00 00 00 00
        [0D]...00 00 00 00
        [0E]...00 00 00 00
        [0F]...00 00 00 00
        [10]...00 00 00 00
        [11]...00 00 00 00
        [12]...00 00 00 00
        [13]...00 00 00 00
        [14]...00 00 00 00
        [15]...00 00 00 00
        [16]...00 00 00 00
        [17]...00 00 00 00
        [18]...00 00 00 00
        [19]...00 00 00 00
        [1A]...00 00 00 00
        [1B]...57 5F 4F 4B    W_OK

    Recordar que el Tipo de Tarjeta y el CRC32 se escriben al reves
    En este ejemplo serian, respectivamente, 0001 y 7E3E3679