Convertir formato de checksums de BSD a Coreutils

2020/06/12

Los checksum generados por sha256 de BSD -particularmente de OpenBSD-, aparte de utilizar la representación hexadecimales igual a los generados por sha256sum de coreutils permiten que su salida utilice la notación base64 que no es soportada por la versión de coreutils.

Es posible convertir un archivo con checksums generados por la versión de BSD utilizando la representación de base64 a una representación hexadecimal (que pueda utilizarse con coreutils) utilizarse el siguiente programa awk:

$ cat > convert.awk <<'END'
#!/bin/awk -f
{
    printf("%s %s %s ", $1, $2, $3);
    system("echo '" $4 "' | base64 -d | od -t x1 -An | tr -d ' \n'");
    printf("\n")
}
END
$ chmod +x convert.awk

Nota: El programa anterior utiliza cuatro procesos por linea del archivo de entrada, por lo que no es muy eficiente y solo se recomienda utilizar con archivos de entrada pequeños. Como ventaja, es una construcción en shell que requiere compilar o instalar librerías para poder ser utilizada.

Ejemplo de uso

Verificar con sha256sum de coreutils el archivo SHA256 creado con sha256 de openbsd utilizando notación base64:

$ wget 'http://firmware.openbsd.org/firmware/6.7/SHA256'
$ ./convert.awk < SHA256 > SHA256SUM