File: generate_integrity_header.py

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (59 lines) | stat: -rwxr-xr-x 1,703 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python
# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import base64
import hashlib
import re
import os
import sys


def ComputeIntegrity(input_path):
  hasher = hashlib.sha256()
  with open(input_path, 'rb') as f:
    hasher.update(f.read())
  return base64.b64encode(hasher.digest())


def WriteHeader(input_paths_and_integrity, output_path):
  with open(output_path, 'w') as f:
    f.write('// DO NOT MODIFY THIS FILE DIRECTLY!\n')
    f.write('// IT IS GENERATED BY generate_integrity_header.py\n')
    f.write('// FROM:\n')
    for (input_filename, _) in input_paths_and_integrity:
      f.write('//     * ' + input_filename + '\n')

    f.write('\n')

    for (input_filename, integrity) in input_paths_and_integrity:
      define_name = re.sub('\W', '_', input_filename.upper())
      define_name = define_name + '_INTEGRITY'

      f.write('#define ' + define_name + ' "' + integrity.decode() + '"\n')

      f.write('\n')


def main():
  parser = argparse.ArgumentParser(
      description='Generate a C++ header containing a sha256 checksum of the '
      'input files.')
  parser.add_argument('input_path', help='Path to an input file.', nargs='+')
  parser.add_argument('--output_path', help='Path to an output header file.')
  args = parser.parse_args()

  input_paths = args.input_path
  output_path = args.output_path

  input_paths_and_integrity = [(os.path.basename(path), ComputeIntegrity(path))
                          for path in input_paths]
  WriteHeader(input_paths_and_integrity, output_path)

  return 0


if __name__ == '__main__':
  sys.exit(main())