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

     1  // Copyright 2020 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 tss
     6  
     7  import (
     8  	"crypto/sha1"
     9  	"fmt"
    10  	"io"
    11  
    12  	tpm1 "github.com/google/go-tpm/tpm"
    13  	tpm2 "github.com/google/go-tpm/tpm2"
    14  	tpmutil "github.com/google/go-tpm/tpmutil"
    15  )
    16  
    17  func nvRead12(rwc io.ReadWriteCloser, index, offset, len uint32, auth string) ([]byte, error) {
    18  	var ownAuth [20]byte //owner well known
    19  	if auth != "" {
    20  		ownAuth = sha1.Sum([]byte(auth))
    21  	}
    22  
    23  	// Get TPMInfo
    24  	indexData, err := tpm1.GetNVIndex(rwc, index)
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	if indexData == nil {
    29  		return nil, fmt.Errorf("index not found")
    30  	}
    31  
    32  	// Check if authData is needed
    33  	// AuthRead 0x00200000 | OwnerRead 0x00100000
    34  	needAuthData := 1 >> (indexData.Permission.Attributes & (nvPerAuthRead | nvPerOwnerRead))
    35  	authread := 1 >> (indexData.Permission.Attributes & nvPerAuthRead)
    36  
    37  	if needAuthData == 0 {
    38  		if authread != 0 {
    39  			return tpm1.NVReadValue(rwc, index, offset, len, ownAuth[:])
    40  		}
    41  		return tpm1.NVReadValueAuth(rwc, index, offset, len, ownAuth[:])
    42  	}
    43  	return tpm1.NVReadValue(rwc, index, offset, len, nil)
    44  }
    45  
    46  func nvRead20(rwc io.ReadWriteCloser, index, authHandle tpmutil.Handle, password string, blocksize int) ([]byte, error) {
    47  	return tpm2.NVReadEx(rwc, index, authHandle, password, blocksize)
    48  }