xref: /linux/certs/check-blacklist-hashes.awk (revision 9008a676)
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