check-blacklist-hashes.awk 1.0 KB

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