Documentation
¶
Overview ¶
Package testing defines fakes and mocks for the sev-guest device and AMD-SP.
Index ¶
- Constants
- func CreateRawReport(opts *TestReportOptions) [labi.SnpReportRespReportSize]byte
- func CustomExtensions(tcb kds.TCBParts, hwid []byte, cspid string) []pkix.Extension
- func DefaultArk() (*rsa.PrivateKey, error)
- func DefaultAsk() (*rsa.PrivateKey, error)
- func DefaultAsvk() (*rsa.PrivateKey, error)
- func DefaultVcek() (*ecdsa.PrivateKey, error)
- func DefaultVlek() (*ecdsa.PrivateKey, error)
- func DerivedKeyRequestToString(req *labi.SnpDerivedKeyReqABI) string
- func FindChipTcbCerts(database *kpb.Certificates, chipID []byte) map[uint64][]byte
- func GetKDS(t testing.TB) trust.HTTPSGetter
- func Match(got error, want string) bool
- func TestRawReport(reportData [64]byte) [labi.SnpReportRespReportSize]byte
- func TestUseKDS() bool
- type AmdKeys
- type AmdSigner
- type AmdSignerBuilder
- type CertOverride
- type Device
- type DeviceOptions
- type FakeKDS
- type GetReportResponse
- type GetResponse
- type Getter
- type KeyChoice
- type RootBundle
- type TestCase
- type TestReportOptions
Constants ¶
const ( // KeyChoiceVcek represents the default choice of the VCEK signing the report. KeyChoiceVcek = iota // KeyChoiceVlek represents the choice of the VLEK signing the report. KeyChoiceVlek )
Variables ¶
This section is empty.
Functions ¶
func CreateRawReport ¶ added in v0.8.0
func CreateRawReport(opts *TestReportOptions) [labi.SnpReportRespReportSize]byte
CreateRawReport creates simple raw attestation report with the given configurable data in options. We can't sign the report with AMD keys, and verification isn't the client's responsibility, so we keep the signature zeros. Similarly, we leave the randomly-generated fields zero.
func CustomExtensions ¶ added in v0.8.0
CustomExtensions returns an array of extensions following the KDS specification for the given values.
func DefaultArk ¶
func DefaultArk() (*rsa.PrivateKey, error)
DefaultArk returns a new RSA key with the expected size for an ARK.
func DefaultAsk ¶
func DefaultAsk() (*rsa.PrivateKey, error)
DefaultAsk returns a new RSA key with the expected size for an ASK.
func DefaultAsvk ¶ added in v0.8.0
func DefaultAsvk() (*rsa.PrivateKey, error)
DefaultAsvk returns a new RSA key with the expected size for an ASVK.
func DefaultVcek ¶
func DefaultVcek() (*ecdsa.PrivateKey, error)
DefaultVcek returns a new ECDSA key on the expected curve for a VCEK.
func DefaultVlek ¶ added in v0.8.0
func DefaultVlek() (*ecdsa.PrivateKey, error)
DefaultVlek returns a new ECDSA key on the expected curve for a VLEK.
func DerivedKeyRequestToString ¶ added in v0.2.3
func DerivedKeyRequestToString(req *labi.SnpDerivedKeyReqABI) string
DerivedKeyRequestToString translates a DerivedKeyReqABI into a map key string representation.
func FindChipTcbCerts ¶ added in v0.4.0
func FindChipTcbCerts(database *kpb.Certificates, chipID []byte) map[uint64][]byte
FindChipTcbCerts returns the TcbCerts associated with the given chipID in the database if they exist. If not, returns nil.
func GetKDS ¶ added in v0.4.0
func GetKDS(t testing.TB) trust.HTTPSGetter
GetKDS returns an HTTPSGetter that can produce the expected certificates for a given URL in the test environment.
func TestRawReport ¶ added in v0.2.1
func TestRawReport(reportData [64]byte) [labi.SnpReportRespReportSize]byte
TestRawReport creates simple raw attestation report with the given REPORT_DATA. We can't sign the report with AMD keys, and verification isn't the client's responsibility, so we keep the signature zeros. Similarly, we leave the randomly-generated fields zero.
func TestUseKDS ¶ added in v0.5.0
func TestUseKDS() bool
TestUseKDS returns whether tests should use the network to connect the live AMD Key Distribution service.
Types ¶
type AmdKeys ¶
type AmdKeys struct { Ark *rsa.PrivateKey Ask *rsa.PrivateKey Asvk *rsa.PrivateKey Vcek *ecdsa.PrivateKey Vlek *ecdsa.PrivateKey }
AmdKeys encapsulates the key chain of ARK through ASK down to VCEK.
func DefaultAmdKeys ¶
DefaultAmdKeys returns a key set for ARK, ASK, and VCEK with the expected key type and size.
type AmdSigner ¶
type AmdSigner struct { Ark *x509.Certificate Ask *x509.Certificate Asvk *x509.Certificate Vcek *x509.Certificate Vlek *x509.Certificate Keys *AmdKeys // This identity does not match AMD's notion of an HWID. It is purely to combine expectations of // report data -> KDS URL construction for the fake KDS implementation. HWID [abi.ChipIDSize]byte TCB kds.TCBVersion }
AmdSigner encapsulates a key and certificate chain following the format of AMD-SP's VCEK for signing attestation reports.
func DefaultTestOnlyCertChain ¶ added in v0.8.0
DefaultTestOnlyCertChain creates a test-only certificate chain for a fake attestation signer.
func (*AmdSigner) CertTableBytes ¶
CertTableBytes outputs the certificates in AMD's ABI format.
type AmdSignerBuilder ¶
type AmdSignerBuilder struct { // Keys contains the private keys that will get a certificate chain structure. Keys *AmdKeys Product string ArkCreationTime time.Time AskCreationTime time.Time AsvkCreationTime time.Time VcekCreationTime time.Time VlekCreationTime time.Time ArkCustom CertOverride AskCustom CertOverride AsvkCustom CertOverride VcekCustom CertOverride VlekCustom CertOverride CSPID string HWID [abi.ChipIDSize]byte TCB kds.TCBVersion // Intermediate built certificates Ark *x509.Certificate Ask *x509.Certificate Asvk *x509.Certificate Vcek *x509.Certificate Vlek *x509.Certificate }
AmdSignerBuilder represents toggleable configurations of the VCEK certificate chain.
func (*AmdSignerBuilder) TestOnlyCertChain ¶ added in v0.8.0
func (b *AmdSignerBuilder) TestOnlyCertChain() (*AmdSigner, error)
TestOnlyCertChain creates a test-only certificate chain from the keys and configurables in b.
type CertOverride ¶
type CertOverride struct { // If 0, interpreted as Version, otherwise the ARK cert version number. Version int SerialNumber *big.Int Issuer *pkix.Name Subject *pkix.Name SignatureAlgorithm x509.SignatureAlgorithm PublicKeyAlgorithm x509.PublicKeyAlgorithm KeyUsage x509.KeyUsage // If nil, interpreted as default, otherwise the CRLDistributionPoints for the cert. CRLDistributionPoints []string // If nil, interpreted as default list. Extensions []pkix.Extension }
CertOverride encapsulates certificate aspects that can be overridden when creating a certificate chain.
type Device ¶
type Device struct { ReportDataRsp map[string]any Keys map[string][]byte Certs []byte Signer *AmdSigner SevProduct *spb.SevProduct // contains filtered or unexported fields }
Device represents a sev-guest driver implementation with pre-programmed responses to commands.
func TcDevice ¶
func TcDevice(tcs []TestCase, opts *DeviceOptions) (*Device, error)
TcDevice returns a mock device populated from test cases' inputs and expected outputs.
func (*Device) Ioctl ¶
Ioctl mocks commands with pre-specified responses for a finite number of requests.
func (*Device) Product ¶ added in v0.7.1
func (d *Device) Product() *spb.SevProduct
Product returns the mocked product info or the default.
type DeviceOptions ¶ added in v0.2.4
DeviceOptions specifies customizations for a fake sev-guest device.
type FakeKDS ¶ added in v0.4.0
type FakeKDS struct { Certs *kpb.Certificates // Two CERTIFICATE PEMs for ASK, then ARK or ASVK then ARK, per product RootBundles map[string]RootBundle }
FakeKDS implements the verify.HTTPSGetter interface to provide certificates like AMD KDS, but with certificates cached in a protobuf.
func FakeKDSFromFile ¶ added in v0.4.0
FakeKDSFromFile returns a FakeKDS from a path to a serialized fakekds.Certificates message.
func FakeKDSFromSigner ¶ added in v0.4.0
FakeKDSFromSigner returns a FakeKDS that produces the fake signer's certificates following the AMD KDS REST API expectations.
type GetReportResponse ¶
type GetReportResponse struct { Resp labi.SnpReportRespABI EsResult labi.EsResult FwErr abi.SevFirmwareStatus }
GetReportResponse represents a mocked response to a command request.
type GetResponse ¶ added in v0.7.1
GetResponse controls how often (Occurrences) a certain response should be provided.
type Getter ¶
type Getter struct {
Responses map[string][]GetResponse
}
Getter is a mock for HTTPSGetter interface that sequentially returns the configured responses for the provided URL. Responses are returned as a queue, i.e., always serving from index 0.
func SimpleGetter ¶ added in v0.7.1
SimpleGetter constructs a static server from url -> body responses. For more elaborate tests, construct a custom Getter.
type KeyChoice ¶ added in v0.8.0
type KeyChoice int
KeyChoice represents which key is expected to have signed the report.
type RootBundle ¶ added in v0.8.0
RootBundle represents the two different CA bundles that the KDS can return.
type TestCase ¶
type TestCase struct { Name string Input [64]byte Output [labi.SnpReportRespReportSize]byte OutputProto string FwErr abi.SevFirmwareStatus EsResult labi.EsResult EK KeyChoice WantErr string }
TestCase represents a get_report input/output test case.
type TestReportOptions ¶ added in v0.8.0
type TestReportOptions struct { ReportData []byte SignerInfo abi.SignerInfo }
TestReportOptions represents a few configurables for generating fake reports from particular inputs.