1*9008a676SMasahiro Yamada#!/usr/bin/awk -f 2*9008a676SMasahiro Yamada# SPDX-License-Identifier: GPL-2.0 3*9008a676SMasahiro Yamada# 4*9008a676SMasahiro Yamada# Copyright © 2020, Microsoft Corporation. All rights reserved. 5*9008a676SMasahiro Yamada# 6*9008a676SMasahiro Yamada# Author: Mickaël Salaün <mic@linux.microsoft.com> 7*9008a676SMasahiro Yamada# 8*9008a676SMasahiro Yamada# Check that a CONFIG_SYSTEM_BLACKLIST_HASH_LIST file contains a valid array of 9*9008a676SMasahiro Yamada# hash strings. Such string must start with a prefix ("tbs" or "bin"), then a 10*9008a676SMasahiro Yamada# colon (":"), and finally an even number of hexadecimal lowercase characters 11*9008a676SMasahiro Yamada# (up to 128). 12*9008a676SMasahiro Yamada 13*9008a676SMasahiro YamadaBEGIN { 14*9008a676SMasahiro Yamada RS = "," 15*9008a676SMasahiro Yamada} 16*9008a676SMasahiro Yamada{ 17*9008a676SMasahiro Yamada if (!match($0, "^[ \t\n\r]*\"([^\"]*)\"[ \t\n\r]*$", part1)) { 18*9008a676SMasahiro Yamada print "Not a string (item " NR "):", $0; 19*9008a676SMasahiro Yamada exit 1; 20*9008a676SMasahiro Yamada } 21*9008a676SMasahiro Yamada if (!match(part1[1], "^(tbs|bin):(.*)$", part2)) { 22*9008a676SMasahiro Yamada print "Unknown prefix (item " NR "):", part1[1]; 23*9008a676SMasahiro Yamada exit 1; 24*9008a676SMasahiro Yamada } 25*9008a676SMasahiro Yamada if (!match(part2[2], "^([0-9a-f]+)$", part3)) { 26*9008a676SMasahiro Yamada print "Not a lowercase hexadecimal string (item " NR "):", part2[2]; 27*9008a676SMasahiro Yamada exit 1; 28*9008a676SMasahiro Yamada } 29*9008a676SMasahiro Yamada if (length(part3[1]) > 128) { 30*9008a676SMasahiro Yamada print "Hash string too long (item " NR "):", part3[1]; 31*9008a676SMasahiro Yamada exit 1; 32*9008a676SMasahiro Yamada } 33*9008a676SMasahiro Yamada if (length(part3[1]) % 2 == 1) { 34*9008a676SMasahiro Yamada print "Not an even number of hexadecimal characters (item " NR "):", part3[1]; 35*9008a676SMasahiro Yamada exit 1; 36*9008a676SMasahiro Yamada } 37*9008a676SMasahiro Yamada} 38