Documentation
¶
Overview ¶
Package exchange provides high-level interface to generate signed exchanges.
Index ¶
Examples ¶
Constants ¶
const ( DefaultVersion = version.Version1b3 DefaultMIRecordSize = 16384 )
These are the default values in Config.
const (
// See htmltask.ExtractSubContentTypes.
SubContentType = "Webpackager-Sub-Content-Type"
)
These are keys used in ExtraData. They are prefixed with "X-WebPackager" to avoid confusion with real HTTP headers.
Variables ¶
var DefaultCertURL = urlutil.MustParse("/cert.cbor")
DefaultCertURL is the default value for CertURL in Config.
Functions ¶
func ReadExchangeFile ¶
func ReadExchangeFile(filename string) (*signedexchange.Exchange, error)
ReadExchangeFile reads a signed exchange from a file.
Types ¶
type Config ¶
type Config struct {
// Version specifies the signed exchange version. If Version is empty,
// Factory uses DefaultVersion.
Version version.Version
// MIRecordSize specifies Merkle Integrity record size. The value must
// be positive, or zero to use DefaultMIRecordSize. It must not exceed
// 16384 (16 KiB) to be compliant with the specification.
MIRecordSize int
// CertChain specifies the certificate chain. CertChain may not be nil.
CertChain *certchain.AugmentedChain
// CertURL specifies the cert-url parameter in the signature. It can be
// relative, in which case Factory resolves the absolute URL using
// the request URL. It should still usually contain an absolute path
// (e.g. "/cert.cbor", not "cert.cbor"). If CertURL is nil, Factory uses
// DefaultCertURL.
CertURL *url.URL
// PrivateKey specifies the private key used for signing. PrivateKey may
// not be nil.
PrivateKey crypto.PrivateKey
// KeepNonSXGPreloads instructs Factory to include preload link headers
// that don't have the corresponding allowed-alt-sxg with a valid
// header-integrity.
KeepNonSXGPreloads bool
}
Config holds the parameters to produce signed exchanges.
type Factory ¶
type Factory struct {
Config
}
Factory produces and verifies signed exchanges.
func NewFactory ¶
NewFactory creates and initializes a new Factory. It panics if c.CertChain or c.PrivateKey is nil.
func (*Factory) Get ¶
Get returns fty. It implements FactoryProvider and allows Factory to be set directory to ExchangeFactory in webpackager.Config.
func (*Factory) NewExchange ¶
func (fty *Factory) NewExchange(resp *Response, vp ValidPeriod, validityURL *url.URL) (*signedexchange.Exchange, error)
NewExchange generates a signed exchange from resp, vp, and validityURL.
type FactoryProvider ¶
FactoryProvider provides Factory.
type Response ¶
type Response struct {
// Response represents the HTTP response this instance is constructed
// from. Body has been read into Payload and closed. Other fields may
// also be mutated by processors (Header in particular).
*http.Response
// Payload is the content read from Response.Body and possibly modified
// by processors.
Payload []byte
// Preloads represents preload links to add to HTTP headers.
Preloads []*preload.Preload
// ExtraData contains information extracted from this Response and
// used inside the program. Processors extract information and append
// it with an arbitrary key. Subsequent processors, ValidPeriodRules,
// and ValidityURLRules can reference the information using that key.
//
// The signed exchange will not include ExtraData.
ExtraData http.Header
}
Response represents a pre-signed HTTP exchange to make a signed exchange from. It is essentially a wrapper around http.Response. Note the request is accessible through http.Response.
func NewResponse ¶
NewResponse creates and initializes a new Response wrapping resp. The new Response takes the ownership of resp: the caller should not use resp after this call.
func (*Response) AddPreload ¶
AddPreload adds p to resp.Preloads if p is not already in resp.Preloads, and reports whether p was added. It considers Preloads to be equal when their Links are equal.
type ValidPeriod ¶
type ValidPeriod struct {
// contains filtered or unexported fields
}
ValidPeriod represents the period the signed exchange is valid for.
func NewValidPeriod ¶
func NewValidPeriod(date, expires time.Time) ValidPeriod
NewValidPeriod creates and initializes a new ValidPeriod from the date and expires parameters.
func NewValidPeriodWithLifetime ¶
func NewValidPeriodWithLifetime(date time.Time, lifetime time.Duration) ValidPeriod
NewValidPeriodWithLifetime creates and initializes a new ValidPeriod from the date parameter and the lifetime.
func (ValidPeriod) Contains ¶
func (vp ValidPeriod) Contains(t time.Time) bool
Contains reports whether t is neither before the date parameter nor after the expires parameter. In other words, Contains returns true if t is between the date and expires parameters, both inclusive.
Example ¶
package main
import (
"fmt"
"time"
"github.com/google/webpackager/exchange"
)
func main() {
date := time.Date(2019, time.October, 1, 10, 30, 0, 0, time.UTC)
expires := time.Date(2019, time.October, 2, 10, 30, 0, 0, time.UTC)
vp := exchange.NewValidPeriod(date, expires)
fmt.Println(vp.Contains(time.Date(2019, time.October, 1, 10, 29, 0, 0, time.UTC)))
fmt.Println(vp.Contains(time.Date(2019, time.October, 1, 10, 30, 0, 0, time.UTC)))
fmt.Println(vp.Contains(time.Date(2019, time.October, 1, 22, 30, 0, 0, time.UTC)))
fmt.Println(vp.Contains(time.Date(2019, time.October, 2, 10, 30, 0, 0, time.UTC)))
fmt.Println(vp.Contains(time.Date(2019, time.October, 2, 10, 31, 0, 0, time.UTC)))
}
Output: false true true true false
func (ValidPeriod) Date ¶
func (vp ValidPeriod) Date() time.Time
Date returns the date parameter, when the signed exchange is produced.
func (ValidPeriod) Expires ¶
func (vp ValidPeriod) Expires() time.Time
Expires returns the expires parameter, when the signed exchange gets expired.
func (ValidPeriod) Lifetime ¶
func (vp ValidPeriod) Lifetime() time.Duration
Lifetime returns the duration between the date and expires parameters.
func (ValidPeriod) String ¶
func (vp ValidPeriod) String() string
String returns a human-readable string.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package exchangetest provides utilities for exchange testing.
|
Package exchangetest provides utilities for exchange testing. |
|
Package vprule defines how to determine the validity period of signed exchanges.
|
Package vprule defines how to determine the validity period of signed exchanges. |