Documentation ¶
Overview ¶
Package testing defines fakes and mocks for the sev-guest device and AMD-SP.
Index ¶
- func CustomVcekExtensions(tcb kds.TCBParts, hwid [64]byte) []pkix.Extension
- func DefaultArk() (*rsa.PrivateKey, error)
- func DefaultAsk() (*rsa.PrivateKey, error)
- func DefaultVcek() (*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 TestCase
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CustomVcekExtensions ¶ added in v0.2.4
CustomVcekExtensions 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 DefaultVcek ¶
func DefaultVcek() (*ecdsa.PrivateKey, error)
DefaultVcek returns a new ECDSA key on the expected curve for a VCEK.
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 Vcek *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 Vcek *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 DefaultCertChain ¶
DefaultCertChain 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 VcekCreationTime time.Time ArkCustom CertOverride AskCustom CertOverride VcekCustom CertOverride HWID [abi.ChipIDSize]byte TCB kds.TCBVersion // Intermediate built certificates Ark *x509.Certificate Ask *x509.Certificate Vcek *x509.Certificate }
AmdSignerBuilder represents toggleable configurations of the VCEK certificate chain.
func (*AmdSignerBuilder) CertChain ¶
func (b *AmdSignerBuilder) CertChain() (*AmdSigner, error)
CertChain 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, per product RootBundles map[string]string }
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.