github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/crypto/measure.go (about)

     1  // Copyright 2017-2019 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package crypto
     6  
     7  import (
     8  	"io/ioutil"
     9  	"log"
    10  
    11  	tss "github.com/u-root/u-root/pkg/tss"
    12  )
    13  
    14  const (
    15  	// BlobPCR type in PCR 7
    16  	BlobPCR uint32 = 7
    17  	// BootConfigPCR type in PCR 8
    18  	BootConfigPCR uint32 = 8
    19  	// ConfigDataPCR type in PCR 8
    20  	ConfigDataPCR uint32 = 8
    21  	// NvramVarsPCR type in PCR 9
    22  	NvramVarsPCR uint32 = 9
    23  )
    24  
    25  // TryMeasureData measures a byte array with additional information
    26  func TryMeasureData(pcr uint32, data []byte, info string) error {
    27  	tpm, err := tss.NewTPM()
    28  	if err != nil {
    29  		log.Printf("Cannot open TPM: %v", err)
    30  		return err
    31  	}
    32  	log.Printf("Measuring blob: %v", info)
    33  	if err := tpm.Measure(data, pcr); err != nil {
    34  		return err
    35  	}
    36  	tpm.Close()
    37  	return nil
    38  }
    39  
    40  // TryMeasureFiles measures a variable amount of files
    41  func TryMeasureFiles(files ...string) error {
    42  	tpm, err := tss.NewTPM()
    43  	if err != nil {
    44  		return err
    45  	}
    46  	for _, file := range files {
    47  		log.Printf("Measuring file: %v", file)
    48  		data, err := ioutil.ReadFile(file)
    49  		if err != nil {
    50  			continue
    51  		}
    52  		if err := tpm.Measure(data, BlobPCR); err != nil {
    53  			return err
    54  		}
    55  	}
    56  	tpm.Close()
    57  	return nil
    58  }