package sigcred import ( "dehub/fs" "dehub/typeobj" ) // Signifier reprsents a single signing method being defined in the Config. Only // one field should be set on each Signifier. type Signifier struct { PGPPublicKey *SignifierPGP `type:"pgp_public_key"` PGPPublicKeyFile *SignifierPGPFile `type:"pgp_public_key_file"` } // MarshalYAML implements the yaml.Marshaler interface. func (s Signifier) MarshalYAML() (interface{}, error) { return typeobj.MarshalYAML(s) } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (s *Signifier) UnmarshalYAML(unmarshal func(interface{}) error) error { return typeobj.UnmarshalYAML(s, unmarshal) } // Interface returns the SignifierInterface instance encapsulated by this // Signifier object. func (s Signifier) Interface() (SignifierInterface, error) { el, _, err := typeobj.Element(s) if err != nil { return nil, err } return el.(SignifierInterface), nil } // SignifierInterface describes the methods that all Signifiers must implement. type SignifierInterface interface { // Sign returns a Credential containing a signature of the given data. // // tree can be used to find the Signifier at a particular snapshot. Sign(fs fs.FS, data []byte) (Credential, error) // Signed returns true if the Signifier was used to sign the Credential. Signed(fs fs.FS, cred Credential) (bool, error) // Verify asserts that the Signifier produced the given Credential for the // given data set, or returns an error. // // tree can be used to find the Signifier at a particular snapshot. Verify(fs fs.FS, data []byte, cred Credential) error }