Documentation
¶
Index ¶
- Constants
- Variables
- func Canonicalize(data []byte) ([]byte, error)
- func CanonicalizeValue(value any) ([]byte, error)
- func Classify(err error) (ResultCode, ErrorCode)
- func EqualHash(left, right string) bool
- func FormatDecimal(value float64, scale int) (string, error)
- func FormatTimestamp(value time.Time) (string, error)
- func FormatTimestampMillis(value int64) (string, error)
- func HashArtifactBytes(data []byte, contract string, version int, role, selfHashField string) (string, []byte, error)
- func HashArtifactValue(contract string, version int, role, selfHashField string, value any) (string, []byte, error)
- func HashCanonical(contract string, version int, canonicalization, role string, payload []byte) (string, error)
- func HashRaw(contract string, version int, role string, payload []byte) (string, error)
- func HashRawReader(contract string, version int, role string, length int64, reader io.Reader) (string, error)
- func HashValue(contract string, version int, role string, value any) (string, []byte, error)
- func ValidateDecimal(value string, scale int) error
- func ValidateHash(value string) error
- func ValidateRelativePath(value string) error
- func ValidateTimestamp(value string) error
- type ContractError
- type ContractHeader
- type ErrorCode
- type Kind
- type Limits
- type Member
- type ResultCode
- type ValidationResult
- type Value
Constants ¶
View Source
const ( CanonicalJSONVersion = "ak.canonical.json.v1" CanonicalRawVersion = "ak.canonical.raw.v1" HashAlgorithm = "sha256" HashPrefix = "sha256:" MaxSafeInteger int64 = 9007199254740991 )
View Source
const SchemaSetHash = "sha256:659fe8c948d522801ddf7082d4dd19e6203e8293b0c02b4d44005f98ca874c62"
Variables ¶
View Source
var DefaultLimits = Limits{
MaxDocumentBytes: 1_048_576,
MaxNestingDepth: 64,
MaxFieldCount: 20_000,
MaxArrayLength: 10_000,
MaxStringBytes: 65_536,
}
Functions ¶
func Canonicalize ¶
func CanonicalizeValue ¶
func Classify ¶
func Classify(err error) (ResultCode, ErrorCode)
func FormatTimestampMillis ¶
func HashArtifactBytes ¶
func HashArtifactValue ¶
func HashCanonical ¶
func HashRawReader ¶
func ValidateDecimal ¶
func ValidateHash ¶
func ValidateRelativePath ¶
func ValidateTimestamp ¶
Types ¶
type ContractError ¶
type ContractError struct {
Result ResultCode
Code ErrorCode
Path string
Offset int
Err error
}
func (*ContractError) Error ¶
func (e *ContractError) Error() string
func (*ContractError) Unwrap ¶
func (e *ContractError) Unwrap() error
type ContractHeader ¶
type ContractHeader struct {
SchemaName string `json:"schema_name"`
SchemaVersion int `json:"schema_version"`
Canonicalization string `json:"canonicalization"`
HashAlgorithm string `json:"hash_algorithm"`
ArtifactRole string `json:"artifact_role"`
}
func NewHeader ¶
func NewHeader(schemaName string, schemaVersion int, artifactRole string) ContractHeader
func RegisteredSchemas ¶
func RegisteredSchemas() ([]ContractHeader, error)
type ErrorCode ¶
type ErrorCode string
const ( CodeNone ErrorCode = "NONE" CodeDocumentTooLarge ErrorCode = "DOCUMENT_TOO_LARGE" CodeNestingTooDeep ErrorCode = "NESTING_TOO_DEEP" CodeTooManyFields ErrorCode = "TOO_MANY_FIELDS" CodeArrayTooLong ErrorCode = "ARRAY_TOO_LONG" CodeStringTooLong ErrorCode = "STRING_TOO_LONG" CodeInvalidUTF8 ErrorCode = "INVALID_UTF8" CodeBOM ErrorCode = "BYTE_ORDER_MARK" CodeUnexpectedEOF ErrorCode = "UNEXPECTED_EOF" CodeUnexpectedToken ErrorCode = "UNEXPECTED_TOKEN" CodeInvalidEscape ErrorCode = "INVALID_ESCAPE" CodeInvalidUnicode ErrorCode = "INVALID_UNICODE" CodeNonNFC ErrorCode = "NON_NFC_STRING" CodeDuplicateKey ErrorCode = "DUPLICATE_KEY" CodeTrailingData ErrorCode = "TRAILING_DATA" CodeInvalidNumber ErrorCode = "INVALID_NUMBER" CodeFloatingPointForbidden ErrorCode = "FLOATING_POINT_FORBIDDEN" CodeUnsafeInteger ErrorCode = "UNSAFE_INTEGER" CodeProhibitedNull ErrorCode = "PROHIBITED_NULL" CodeMissingRequiredField ErrorCode = "MISSING_REQUIRED_FIELD" CodeUnknownField ErrorCode = "UNKNOWN_FIELD" CodeTypeMismatch ErrorCode = "TYPE_MISMATCH" CodeInvalidConstant ErrorCode = "INVALID_CONSTANT" CodeInvalidEnum ErrorCode = "INVALID_ENUM" CodeInvalidPattern ErrorCode = "INVALID_PATTERN" CodeInvalidLength ErrorCode = "INVALID_LENGTH" CodeInvalidRange ErrorCode = "INVALID_RANGE" CodeDuplicateSetMember ErrorCode = "DUPLICATE_SET_MEMBER" CodeNonCanonicalSetOrder ErrorCode = "NONCANONICAL_SET_ORDER" CodeUnknownContract ErrorCode = "UNKNOWN_CONTRACT" CodeSchemaVersionMismatch ErrorCode = "SCHEMA_VERSION_MISMATCH" CodeCanonicalVersionMismatch ErrorCode = "CANONICALIZATION_VERSION_MISMATCH" CodeHashAlgorithmMismatch ErrorCode = "HASH_ALGORITHM_MISMATCH" CodeArtifactRoleMismatch ErrorCode = "ARTIFACT_ROLE_MISMATCH" CodeInvalidHash ErrorCode = "INVALID_HASH" CodeInvalidTimestamp ErrorCode = "INVALID_TIMESTAMP" CodeInvalidDecimal ErrorCode = "INVALID_DECIMAL" CodeInvalidPath ErrorCode = "INVALID_PATH" CodeNonCanonicalBytes ErrorCode = "NONCANONICAL_BYTES" CodeSelfHashMismatch ErrorCode = "SELF_HASH_MISMATCH" CodeRawHashMismatch ErrorCode = "RAW_HASH_MISMATCH" CodeReferenceHashMismatch ErrorCode = "REFERENCE_HASH_MISMATCH" CodeSemanticViolation ErrorCode = "SEMANTIC_VIOLATION" )
type ResultCode ¶
type ResultCode string
const ( ValidContract ResultCode = "VALID_CONTRACT" InvalidSyntax ResultCode = "INVALID_SYNTAX" InvalidSchema ResultCode = "INVALID_SCHEMA" InvalidCanonicalForm ResultCode = "INVALID_CANONICAL_FORM" HashMismatch ResultCode = "HASH_MISMATCH" CrossReferenceMismatch ResultCode = "CROSS_REFERENCE_MISMATCH" UnsupportedVersion ResultCode = "UNSUPPORTED_VERSION" ResourceLimitExceeded ResultCode = "RESOURCE_LIMIT_EXCEEDED" )
type ValidationResult ¶
type ValidationResult struct {
ResultCode ResultCode
ErrorCode ErrorCode
SchemaName string
SchemaVersion int
ArtifactRole string
CanonicalBytes []byte
DeclaredHash string
RecomputedHash string
}
func ValidateArtifact ¶
func ValidateArtifact(data []byte, requireCanonical bool) (ValidationResult, error)
Click to show internal directories.
Click to hide internal directories.