// decodeTimestamp decodes and verifies timestamp metadata, and returns the // new snapshot file meta. func (c *Client) decodeTimestamp(b json.RawMessage) (data.FileMeta, error) { timestamp := &data.Timestamp{} if err := signed.Unmarshal(b, timestamp, "timestamp", c.timestampVer, c.db); err != nil { return data.FileMeta{}, ErrDecodeFailed{"timestamp.json", err} } c.timestampVer = timestamp.Version return timestamp.Meta["snapshot.json"], nil }
// decodeSnapshot decodes and verifies snapshot metadata, and returns the new // root and targets file meta. func (c *Client) decodeSnapshot(b json.RawMessage) (data.FileMeta, data.FileMeta, error) { snapshot := &data.Snapshot{} if err := signed.Unmarshal(b, snapshot, "snapshot", c.snapshotVer, c.db); err != nil { return data.FileMeta{}, data.FileMeta{}, ErrDecodeFailed{"snapshot.json", err} } c.snapshotVer = snapshot.Version return snapshot.Meta["root.json"], snapshot.Meta["targets.json"], nil }
// decodeRoot decodes and verifies root metadata. func (c *Client) decodeRoot(b json.RawMessage) error { root := &data.Root{} if err := signed.Unmarshal(b, root, "root", c.rootVer, c.db); err != nil { return ErrDecodeFailed{"root.json", err} } c.rootVer = root.Version c.consistentSnapshot = root.ConsistentSnapshot return nil }
// decodeTargets decodes and verifies targets metadata, sets c.targets and // returns updated targets. func (c *Client) decodeTargets(b json.RawMessage) (data.Files, error) { targets := &data.Targets{} if err := signed.Unmarshal(b, targets, "targets", c.targetsVer, c.db); err != nil { return nil, ErrDecodeFailed{"targets.json", err} } updatedTargets := make(data.Files) for path, meta := range targets.Targets { if local, ok := c.targets[path]; ok { if err := util.FileMetaEqual(local, meta); err == nil { continue } } updatedTargets[path] = meta } c.targetsVer = targets.Version c.targets = targets.Targets return updatedTargets, nil }