blob: f63d5f0d7475e68244f69f3b527f8867014ce128 [file] [log] [blame]
/*
Wrapper APIs for in-toto attestation Statement layer protos.
*/
package v1
import "errors"
const StatementTypeUri = "https://in-toto.io/Statement/v1"
var (
ErrInvalidStatementType = errors.New("wrong statement type")
ErrSubjectRequired = errors.New("at least one subject required")
ErrDigestRequired = errors.New("at least one digest required")
ErrPredicateTypeRequired = errors.New("predicate type required")
ErrPredicateRequired = errors.New("predicate object required")
)
func (s *Statement) Validate() error {
if s.GetType() != StatementTypeUri {
return ErrInvalidStatementType
}
if s.GetSubject() == nil || len(s.GetSubject()) == 0 {
return ErrSubjectRequired
}
// check all resource descriptors in the subject
subject := s.GetSubject()
for _, rd := range subject {
if err := rd.Validate(); err != nil {
return err
}
// v1 statements require the digest to be set in the subject
if len(rd.GetDigest()) == 0 {
return ErrDigestRequired
}
}
if s.GetPredicateType() == "" {
return ErrPredicateTypeRequired
}
if s.GetPredicate() == nil {
return ErrPredicateRequired
}
return nil
}