/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include #include #include #include "cmSbomObject.h" class cmSbomSerializer; using Datetime = std::string; using MediaType = std::string; using SemVer = std::string; struct cmSpdxExternalIdentifier { cm::optional SpdxId; cm::optional ExternalIdentifierType; cm::optional Identifier; cm::optional Comment; cm::optional IdentifierLocation; cm::optional IssuingAuthority; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxExternalRef { cm::optional SpdxId; cm::optional ExternalRefType; cm::optional Locator; cm::optional ContentType; cm::optional Comment; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxCreationInfo { cm::optional SpdxId; cm::optional SpecVersion; cm::optional Comment; cm::optional Created; std::vector CreatedBy; std::vector CreatedUsing; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxIntegrityMethod { cm::optional SpdxId; cm::optional Comment; enum HashAlgorithmId { ADLER32, BLAKE2B256, BLAKE2B384, BLAKE2B512, BLAKE3, MD2, MD4, MD5, MD6, SHA1, SHA224, SHA256, SHA384, SHA512, SHA3_256, SHA3_384, SHA3_512, }; cmSpdxIntegrityMethod() = default; cmSpdxIntegrityMethod(cmSpdxIntegrityMethod const&) = default; cmSpdxIntegrityMethod(cmSpdxIntegrityMethod&&) = default; cmSpdxIntegrityMethod& operator=(cmSpdxIntegrityMethod const&) = default; cmSpdxIntegrityMethod& operator=(cmSpdxIntegrityMethod&&) = default; virtual void Serialize(cmSbomSerializer&) const; virtual ~cmSpdxIntegrityMethod() = default; }; struct cmSpdxChecksum { cm::optional SpdxId; cmSpdxIntegrityMethod::HashAlgorithmId Algorithm; std::string ChecksumValue; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxElement { cm::optional SpdxId; cm::optional Name; cm::optional Summary; cm::optional Description; cm::optional Comment; cm::optional CreationInfo; cm::optional VerifiedUsing; std::vector ExternalRef; std::vector ExternalIdentifier; cm::optional Extension; cmSpdxElement() = default; cmSpdxElement(cmSpdxElement const&) = default; cmSpdxElement(cmSpdxElement&&) = default; cmSpdxElement& operator=(cmSpdxElement const&) = default; cmSpdxElement& operator=(cmSpdxElement&&) = default; virtual ~cmSpdxElement() = default; virtual void Serialize(cmSbomSerializer&) const; }; struct cmSpdxTool final : cmSpdxElement { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxAgent : cmSpdxElement { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxOrganization final : cmSpdxAgent { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxPerson final : cmSpdxAgent { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxSoftwareAgent final : cmSpdxAgent { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxPositiveIntegerRange { cm::optional SpdxId; cm::optional BeginIntegerRange; cm::optional EndIntegerRange; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxRelationship : cmSpdxElement { enum RelationshipTypeId { DESCRIBES, CONTAINS, DEPENDS_ON, OTHER }; cm::optional From; std::vector To; cm::optional RelationshipType; cm::optional StartTime; cm::optional EndTime; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxLifecycleScopedRelationship final : cmSpdxRelationship { enum ScopeId { BUILD, DESIGN, RUNTIME, TEST }; cm::optional Scope; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxArtifact : cmSpdxElement { enum SupportTypeId { COMMUNITY, COMMERCIAL, NONE }; std::vector OriginatedBy; cm::optional SuppliedBy; cm::optional BuiltTime; cm::optional ReleaseTime; cm::optional ValidUntilTime; cm::optional StandardName; cm::optional Support; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxIndividualElement final : cmSpdxElement { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxAnnotation final : cmSpdxElement { enum AnnotationTypeId { REVIEW, OTHER }; cm::optional AnnotationType; cm::optional ContentType; cm::optional Statement; cm::optional Element; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxExternalMap { cm::optional SpdxId; cm::optional ExternalSpdxId; cm::optional VerifiedUsing; cm::optional LocationHistory; cm::optional DefiningArtifact; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxNamespaceMap { cm::optional SpdxId; cm::optional Prefix; cm::optional Namespace; void Serialize(cmSbomSerializer&) const; }; struct cmSpdxElementCollection : cmSpdxElement { std::vector Elements; std::vector RootElements; std::vector ProfileConformance; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxPackageVerificationCode final : cmSpdxIntegrityMethod { cm::optional Algorithm; cm::optional HashValue; cm::optional PackageVerificationCodeExcludedFile; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxHash final : cmSpdxIntegrityMethod { HashAlgorithmId HashAlgorithm; std::string HashValue; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxBundle : cmSpdxElementCollection { cm::optional Context; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxBom : cmSpdxBundle { void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxSbom final : cmSpdxBom { enum TypeId { ANALYZED, BUILD, DEPLOYED, DESIGN, RUNTIME, SOURCE, TEST }; cm::optional> Types; cm::optional LifecycleScope; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxSoftwareArtifact : cmSpdxArtifact { enum PurposeId { APPLICATION, ARCHIVE, CONTAINER, DATA, DEVICE, FIRMWARE, FILE, INSTALL, LIBRARY, MODULE, OPERATING_SYSTEM, SOURCE }; cm::optional PrimaryPurpose; cm::optional> AdditionalPurpose; cm::optional CopyrightText; cm::optional AttributionText; cm::optional ContentIdentifier; cm::optional ArtifactSize; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxPackage final : cmSpdxSoftwareArtifact { cm::optional DownloadLocation; cm::optional Homepage; cm::optional PackageVersion; cm::optional PackageUrl; cm::optional SourceInfo; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxDocument final : cmSpdxElementCollection { cm::optional ExternalMap; cm::optional NamespaceMap; std::string DataLicense; void Serialize(cmSbomSerializer& serializer) const override; }; struct cmSpdxContentIdentifier final : cmSpdxIntegrityMethod { cm::optional ContentIdentifierType; cm::optional ContentValue; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxFile final : cmSpdxArtifact { enum FileKindId { DIRECTORY, FILE }; cm::optional ContentType; cm::optional FileType; void Serialize(cmSbomSerializer&) const override; }; struct cmSpdxSnippet final : cmSpdxSoftwareArtifact { cm::optional ByteRange; cm::optional LineRange; cm::optional SnippetFromFile; void Serialize(cmSbomSerializer&) const override; }; struct cmSbomDocument { cm::optional Context; std::vector Graph; void Serialize(cmSbomSerializer&) const; };