canonicalcontract

package
v0.0.0-...-1fef3ba Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2026 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

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 Canonicalize(data []byte) ([]byte, error)

func CanonicalizeValue

func CanonicalizeValue(value any) ([]byte, error)

func Classify

func Classify(err error) (ResultCode, ErrorCode)

func EqualHash

func EqualHash(left, right string) bool

func FormatDecimal

func FormatDecimal(value float64, scale int) (string, error)

func FormatTimestamp

func FormatTimestamp(value time.Time) (string, error)

func FormatTimestampMillis

func FormatTimestampMillis(value int64) (string, error)

func HashArtifactBytes

func HashArtifactBytes(data []byte, contract string, version int, role, selfHashField string) (string, []byte, error)

func HashArtifactValue

func HashArtifactValue(contract string, version int, role, selfHashField string, value any) (string, []byte, error)

func HashCanonical

func HashCanonical(contract string, version int, canonicalization, role string, payload []byte) (string, error)

func HashRaw

func HashRaw(contract string, version int, role string, payload []byte) (string, error)

func HashRawReader

func HashRawReader(contract string, version int, role string, length int64, reader io.Reader) (string, error)

func HashValue

func HashValue(contract string, version int, role string, value any) (string, []byte, error)

func ValidateDecimal

func ValidateDecimal(value string, scale int) error

func ValidateHash

func ValidateHash(value string) error

func ValidateRelativePath

func ValidateRelativePath(value string) error

func ValidateTimestamp

func ValidateTimestamp(value string) error

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 Kind

type Kind uint8
const (
	KindObject Kind = iota + 1
	KindArray
	KindString
	KindNumber
	KindBoolean
	KindNull
)

type Limits

type Limits struct {
	MaxDocumentBytes int
	MaxNestingDepth  int
	MaxFieldCount    int
	MaxArrayLength   int
	MaxStringBytes   int
}

type Member

type Member struct {
	Key   string
	Value *Value
}

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)

type Value

type Value struct {
	Kind   Kind
	Object []Member
	Array  []*Value
	String string
	Number string
	Bool   bool
}

func Parse

func Parse(data []byte) (*Value, error)

func ParseWithLimits

func ParseWithLimits(data []byte, limits Limits) (*Value, error)

func (*Value) CanonicalBytes

func (v *Value) CanonicalBytes() ([]byte, error)

func (*Value) Member

func (v *Value) Member(name string) (*Value, bool)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL