All notable changes to this project will be documented in this file.
- Fixed
- Encode quotation mark in URLs (via #477)
- Docs
- Fixed typos in DocBlocks (via #466)
- Style
- Applied latest PHP Coding Standards (via #465)
- Misc
- Fetched latest schema definition files for offline usage (via #467)
- Changed
- Updated SPDX license list to
v3.24.0
(via #439)
- Updated SPDX license list to
- Changed
- Added
- Namespace
\CycloneDX\Core\Enums
- Namespace
\CycloneDX\Core\Models\License
- Namespace
Added basic support for CycloneDX Specification-1.6.
- Changed
- Method
\CycloneDX\Core\Spec\SpecFactory::makeForVersion()
supports CycloneDX Specification-1.6 now (#421 via #422) - Classes
\CycloneDX\Core\Serialization\{DOM,JSON}\Normalizers\*
support CycloneDX Specification-1.6 now (#421 via #422) - Classes
\CycloneDX\Core\Validation\Validators\*
support CycloneDX Specification-1.6 now (#421 via #422)
- Method
- Added
- Style
- Applied latest PHP Coding Standards (via #415)
- Documentation
- Rendered (API) docs are hosted on readthedocs (#8 via #414)
- Added
- Migration/fixup of URL(
iri-reference
) when normalizing to JSON (via #380)
- Migration/fixup of URL(
- Misc
- Fixed
- fixed a possible JSON schema validation issue regarding "version" property (via #352)
- BREAKING
- Style
- Applied latest PHP Coding Standards (via #341)
Added support for CycloneDX Specification-1.5.
- Changed
- Method
\CycloneDX\Core\Spec\SpecFactory::makeForVersion()
supports CycloneDX Specification-1.5 now (#193 via #255) - Classes
\CycloneDX\Core\Serialization\{DOM,JSON}\Normalizers\*
support CycloneDX Specification-1.5 now (#193 via #255) - Classes
\CycloneDX\Core\Validation\Validators\*
support CycloneDX Specification-1.5 now (#193 via #255)
- Method
- Added
- Namespace
\CycloneDX\Core\Enums
- Enum
ComponentType
got new cases (#193 via #255)
New:Data
,DeviceDriver
,MachineLearningModel
,Platform
- Enum
ExternalReferenceType
got new cases (#193 via #255)
New:AdversaryModel
,Attestation
,CertificationReport
,CodifiedInfrastructure
,ComponentAnalysisReport
,Configuration
,DistributionIntake
,DynamicAnalysisReport
,Evidence
,ExploitabilityStatement
,Formulation
,Log
,MaturityReport
,ModelCard
,POAM
,PentestReport
,QualityMetrics
,RiskAssessment
,RuntimeAnalysisReport
,SecurityContact
,StaticAnalysisReport
,ThreatModel
,VulnerabilityAssertion
- Enum
- Namespace
\CycloneDX\Core\Spec
- Namespace
- Misc
- Changed
- Class
\CycloneDX\Core\Serialization\JsonSerializer
- Class
\CycloneDX\Core\Serialization\XmlSerializer
- Class
- Style
- Fixed
- Docs
- Fixed link to CycloneDX-specification in README (via #288)
- Fixed
- Changed
- Added
- Published generator for BOM's SerialNumber:
\CycloneDX\Core\Utils\BomUtility::randomSerialNumber()
(#277 via #278)
The code was donated from cyclonedx-php-composer.
- Published generator for BOM's SerialNumber:
- BREAKING
- Removed support for PHP v7.3 (#6 via #125)
- Removed support for PHP v7.4 (#114 via #125)
- Removed support for PHP v8.0 (via #204)
- Changed models' aggregation properties to be no longer optional (#66 via #131)
- Changed models to be less restrictive (#247 via #249)
- Streamlined repository data structures to follow a common method naming scheme (via #131)
- Enumeration-like classes were converted to native PHP Enumerations (#140, #256 via #204, #257)
- Added
- Misc
- Overall
- BREAKING: enforced the use of concrete UnionTypes instead of protocols/interfaces/abstracts (#114 via #125)
Affected the usages of no longer public\CycloneDX\Core\Models\License\AbstractDisjunctiveLicense
and methods that used license-related classes. This was possible due to PHP8's UnionType language feature. - Changed some methods to no longer throw
\InvalidArgumentException
(via #125)
PhpDoc annotations were updated, so that code analysis tools should pick up. This was possible by enforcing correct typing on PHP8 language level. - BREAKING: every occurrence of
{M,m}etaData
with a capital "D" was renamed to{M,m}etadata
with a small "d" (#133 via #131, #149)
This affects class names, method names, variable names, property names, file names, documentation - everything.
- BREAKING: enforced the use of concrete UnionTypes instead of protocols/interfaces/abstracts (#114 via #125)
\CycloneDX\Core\Collections
namespace\CycloneDX\Core\Enum
namespaceClassification
classExternalReferenceType
classHashAlgorithm
class
CycloneDX\Core\Factories
namespaceLicenseFactory
class- BREAKING: check whether something is a valid SPDX Expression is now complete, was best effort implementation (#247 via #249)
This affects all methods that potentially would createLicenseExpression
models.
Utilizescomposer/spdx-licenses
. - BREAKING: changed constructor method
__construct()
(via #249) - BREAKING: removed method
makeDisjunctiveFromExpression()
(#163 vial #166) - BREAKING: removed method
setSpdxLicenseValidator()
(via #249) - BREAKING: renamed method
getSpdxLicenseValidator()
->getLicenseIdentifiers()
(via #249) - BREAKING: renamed method
makeDisjunctiveWithId()
->makeSpdxLicense()
(#164 vial #168) - BREAKING: renamed method
makeDisjunctiveWithName()
->makeNamedLicense()
(#164 vial #168) - Added new method
getSpdxLicenses()
(via #249)
- BREAKING: check whether something is a valid SPDX Expression is now complete, was best effort implementation (#247 via #249)
\CycloneDX\Core\Models
namespaceBom
class- BREAKING: changed constructor to no longer accept components (#187 via #188)
- BREAKING: renamed methods
{get,set}ComponentRepository()
->{get,set}Components()
(#133 via #131) - BREAKING: renamed methods
{get,set}ExternalReferenceRepository()
->{get,set}ExternalReferences()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: renamed methods
{get,set}MetaData()
->{get,set}Metadata()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - Added new methods
{get,set}Properties()
(#228 via #229) - Added new methods
{get,set}SerialNumber()
(via #186)
Component
class- BREAKING: renamed methods
{get,set}DependenciesBomRefRepository()
->{get,set}Dependencies()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: renamed methods
{get,set}ExternalReferenceRepository()
->{get,set}ExternalReferences()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: renamed methods
{get,set}HashRepository()
->{get,set}Hashes()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: renamed methods
{get,set}License()
->{get,set}Licenses()
(via #131)
Also changed it work with classLicenseRepository
only, was working with variousModels\License\*
types (#66 via #131) - BREAKING: changed class property
version
to be optional, to reflect CycloneDX v1.4 (#27 via #118, #131)
This affects constructor arguments, and affects methods{get,set}Version()
. - BREAKING: changed property
type
to be of type\CycloneDX\Core\Enum\ComponentType
(#140 via #204)
This affects constructor arguments, and affects methods{get,set}Type()
. - Added new methods
{get,set}Author()
([#184] via #185) - Added new methods
{get,set}Copyright()
(#238 via #239) - Added new methods
{get,set}Evidence()
(#238 via #241) - Added new methods
{get,set}Properties()
(#228 via #165)
- BREAKING: renamed methods
- Added new class
ComponentEvidence
(#238 via #241) ExternalReference
class- BREAKING: renamed methods
{get,set}HashRepository()
->{get,set}Hashes()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: changed property
type
to be of type\CycloneDX\Core\Enum\ExternalReferenceType
(#140 via #204)
This affects constructor arguments, and affects methods{get,set}Type()
.
- BREAKING: renamed methods
Licenses
namespaceAbstractDisjunctiveLicense
DisjunctiveLicenseWithName
classDisjunctiveLicenseWithId
class- BREAKING: renamed class to
SpdxLicense
(#164 via #168) - BREAKING: removed factory method
makeValidated()
(#247 via #249) To assert valid values use\CycloneDX\Core\Factories\LicenseFactory::makeSpdxLicense()
. - Changed: constructor
__construct()
is public now, was private (#247 via #249) - Added new method
setId()
(#247 via #249)
- BREAKING: renamed class to
LicenseExpression
class
MetaData
class- BREAKING: renamed class to
Metadata
(#133 via #131)
Even though PHP is case-insensitive with class names, autoloaders may be case-sensitive. Therefore, this is considered a breaking change. - BREAKING: changed methods
{get,set}Tools()
so that their parameter & return type is non-nullable, was nullable (#66 via #131) - Added new methods
{get,set}Properties()
(#228 via #165) - Added new methods
{get,set}Timestamp()
(via #180, #181)
- BREAKING: renamed class to
- Added new class
Property
(#228 via #165) Tool
class- BREAKING: renamed methods
{get,set}ExternalReferenceRepository()
->{get,set}ExternalReferences()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131) - BREAKING: renamed methods
{get,set}HashRepository()
->{get,set}Hashes()
(#133 via #131)
Also changed parameter & return type to non-nullable, was nullable (#66 via #131)
- BREAKING: renamed methods
\CycloneDX\Core\Repositories
namespace- Overall:
DisjunctiveLicenseRepository
class- BREAKING: renamed the class to
\CycloneDX\Core\Collections\LicenseRepository
(via #131) - BREAKING: added the capability to also aggregate instances of class
Models\LicenseExpression
(via #131)
Therefore, various getters and setters and the constructor changed their signatures, was usage of\CycloneDX\Core\Models\License\AbstractDisjunctiveLicense
only.
- BREAKING: renamed the class to
HashRepository
class- BREAKING: renamed to
\CycloneDX\Core\Collections\HashDictionary
(#133 via #131) - BREAKING: renamed all methods and changed all method signatures to match the overall streamlined scheme (#133 via #131)
- BREAKING: changed all method signatures to enable handling of native PHP Enumeration type
\CycloneDX\Core\Enum\HashAlgorithm
(#140 via #204)
- BREAKING: renamed to
\CycloneDX\Core\Serialize
namespace- Overall
SerializerInterface
interfaceBaseSerializer
abstract class- BREAKING: complete redesign (via #155)
{Json,Xml}Serializer
class- BREAKING: complete redesign (via #155)
{DOM,JSON}\NormalizerFactory
classes- BREAKING: removed method
makeForLicenseExpression()
(via #131) - BREAKING: removed method
makeForDisjunctiveLicense()
(via #131) - BREAKING: removed method
makeForDisjunctiveLicenseRepository()
(via #131) - BREAKING: removed method
makeForHashRepositonary()
- usemakeForHashDictionary()
instead (#133 via #131) - BREAKING: removed method
setSpec()
(via #131) - Added new method
makeForComponentEvidence()
(#238 via #241) - Added new method
makeForHashDictionary()
(#133 via #131) - Added new method
makeForLicense()
(via #131) - Added new method
makeForLicenseRepository()
(via #131)
- BREAKING: removed method
{DOM,JSON}\Normalizers
namespaces- BREAKING: removed classes
DisjunctiveLicenseNormalizer
- useLicenseNormalizer
instead (via #131) - BREAKING: removed classes
LicenseExpressionNormalizer
- useLicenseNormalizer
instead (via #131) - BREAKING: removed classes
DisjunctiveLicenseRepositoryNormalizer
(via #131) - BREAKING: renamed classes
HashRepositoryNormalizer
->HashDictionaryNormalizer
(#133 via #131)
Also changed signatures to acceptModels\HashDictionary
instead ofModels\HashRepository
- BREAKING: changed signatures of class
HashNormalizer
to accept native PHP Enumeration type\CycloneDX\Core\Enum\HashAlgorithm
(#140 via #204) - Added new classes
ComponentEvidenceNormalizer
that can normalizeComponentEvidence
(#238 via #241) - Added new classes
LicenseNormalizer
that can normalize every existing license model (via #131) - Added new classes
LicenseRepositoryNormalizer
that can normalizeLicenseRepository
(via #131) ExternalReferenceNormalizer
classes- Changed the method
normalize()
to actually throw\DomainException
when\ExternalReference
's type was not supported by the spec (via #65)
This is considered a non-breaking change, because the behaviour was already documented in the API, even though there was no need for an implementation before.
- Changed the method
ExternalReferenceNormalizer
classes
- BREAKING: removed classes
JSON\Normalizers\BomNormalizer
class- Changed: method
normalize()
's result data may contain the$schema
string (via #155)
- Changed: method
JSON\Normalizers\ExternalReferenceNormalizer
class- BREAKING: method
normalize()
may throw\UnexpectedValueException
when the url is invalid to format "ini-reference" (via #151)
- BREAKING: method
\CycloneDX\Core\Spdx
namespace- BREAKING: renamed the class
License
->LicenseIdentifiers
(#133 via #143, #249) - BREAKING: renamed method
getLicense()
->fixLicense()
(via #249) - BREAKING: renamed method
getLicenses()
->getKnownLicenses()
, and removed keys from return value (via #249) - BREAKING: renamed method
validate()
->isKnownLicense()
(via #249)
- BREAKING: renamed the class
\CycloneDX\Core\Spec
namespace\CycloneDX\Core\Validation
namespaceBaseValidator
class- BREAKING: removed deprecated method
setSpec()
(via #144)
- BREAKING: removed deprecated method
ValidatorInterface
interfaceValidators\{Json,JsonStrict,Xml}Validator
classesValidators\{Json,JsonStrict}Validator
classes
Maintenance Release.
- Legal:
- Transferred copyright to OWASP Foundation. (via #121)
Maintenance release.
- Docs:
- Added "Responsibilities", "Capabilities" and "Usage" sections to README. (via #115)
- Maintenance release.
- Changed
- Use version 9b04a94 of CycloneDX specification for XML and JSON schema validation. (via #105)
- Use SPDX license enumeration from version 9b04a94 of CycloneDX specification. (via #105)
- Style
- Fixe some whitespaces. (via #82)
- Changed
- Use version 82bf9e3 of CycloneDX specification for XML and JSON schema validation. (via #79)
- Use SPDX license enumeration from version 82bf9e3 of CycloneDX specification. (via #79)
- Fixed
- Return type of
CycloneDX\Core\Serialize\SerializerInterface::serialize()
and implementations/usage are documented asnon-empty-string
, were undocumentedstring
before. (via #70)
- Return type of
- Fixed
CycloneDX\Core\Validation\ValidatorInterface::validateString()
and implementations are documented asnon-empty-string
, were undocumentedstring
before. (via #63)
- Fixed
- XML serializer & DOM normalizer no longer generate invalid
XML::anyURI
. (via #34)
- XML serializer & DOM normalizer no longer generate invalid
- Changed
- JSON result does no longer have slashes escaped in strings. (via #33)
Old:"http:\/\/exampe.com"
New:"http://exampe.com"
- JSON result does no longer have slashes escaped in strings. (via #33)
- Added
- Prevention of information-loss on metadata-component's ExternalReferences,
when normalizing to a specification that does not support
bom.metadata
(via #26)
- Prevention of information-loss on metadata-component's ExternalReferences,
when normalizing to a specification that does not support
- Added
- Support for ExternalReferences in BOM and Component (via #17)
- Fixed
CycloneDX\Core\Models\License\AbstractDisjunctiveLicense::setUrl()
no longer restricts the argument to be a valid URL.
Per schema definitionlicenseType.url
should be a URI, not a URL. See #18
- Changed
CycloneDX\Core\Models\License\AbstractDisjunctiveLicense::setUrl()
no longer throwsInvalidArgumentException
if the argument is not a URL (via #19)
- Fixed
- Psalm-annotation of
CycloneDX\Core\Enums\Classification::isValidValue()
(via #10)
- Psalm-annotation of
Removed composer's conflict
constraint.
This was done to enable some workflows with package forks/mirrors that don't have proper version detection.
See #9
Initial release.
Split the library from
/src/Core
of cyclonedx-php-composer (346e6200fb2f5086061b15c2ee44f540893ce97d)