// Code generated by github.com/atombender/go-jsonschema, DO NOT EDIT.

package wycheproof

import "encoding/json"
import "fmt"
import "reflect"
import "unicode/utf8"

type AeadTestGroup struct {
	// the IV size in bits
	IvSize int `json:"ivSize"`

	// the keySize in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// the expected size of the tag in bits
	TagSize int `json:"tagSize"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []AeadTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type AeadTestGroupType `json:"type"`
}

type AeadTestGroupType string

const AeadTestGroupTypeAeadTest AeadTestGroupType = "AeadTest"

var enumValues_AeadTestGroupType = []interface{}{
	"AeadTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AeadTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_AeadTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_AeadTestGroupType, v)
	}
	*j = AeadTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AeadTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["ivSize"]; raw != nil && !ok {
		return fmt.Errorf("field ivSize in AeadTestGroup: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in AeadTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in AeadTestGroup: required")
	}
	if _, ok := raw["tagSize"]; raw != nil && !ok {
		return fmt.Errorf("field tagSize in AeadTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in AeadTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in AeadTestGroup: required")
	}
	type Plain AeadTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = AeadTestGroup(plain)
	return nil
}

type AeadTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema AeadTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []AeadTestGroup `json:"testGroups"`
}

type AeadTestSchemaV1JsonSchema string

const AeadTestSchemaV1JsonSchemaAeadTestSchemaV1Json AeadTestSchemaV1JsonSchema = "aead_test_schema_v1.json"

var enumValues_AeadTestSchemaV1JsonSchema = []interface{}{
	"aead_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AeadTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_AeadTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_AeadTestSchemaV1JsonSchema, v)
	}
	*j = AeadTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AeadTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in AeadTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in AeadTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in AeadTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in AeadTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in AeadTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in AeadTestSchemaV1Json: required")
	}
	type Plain AeadTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = AeadTestSchemaV1Json(plain)
	return nil
}

type AeadTestVector struct {
	// additional authenticated data
	Aad string `json:"aad"`

	// A brief description of the test case
	Comment string `json:"comment"`

	// the ciphertext (without iv and tag)
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags"`

	// the nonce
	Iv string `json:"iv"`

	// the key
	Key string `json:"key"`

	// the plaintext
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the authentication tag
	Tag string `json:"tag"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AeadTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["aad"]; raw != nil && !ok {
		return fmt.Errorf("field aad in AeadTestVector: required")
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in AeadTestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in AeadTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in AeadTestVector: required")
	}
	if _, ok := raw["iv"]; raw != nil && !ok {
		return fmt.Errorf("field iv in AeadTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in AeadTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in AeadTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in AeadTestVector: required")
	}
	if _, ok := raw["tag"]; raw != nil && !ok {
		return fmt.Errorf("field tag in AeadTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in AeadTestVector: required")
	}
	type Plain AeadTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = AeadTestVector(plain)
	return nil
}

type AsnSignatureTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The message to sign
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// An ASN encoded signature for msg
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *AsnSignatureTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in AsnSignatureTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in AsnSignatureTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in AsnSignatureTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in AsnSignatureTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in AsnSignatureTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in AsnSignatureTestVector: required")
	}
	type Plain AsnSignatureTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = AsnSignatureTestVector(plain)
	return nil
}

type BlsAggregateVerifySchemaJson struct {
	// The primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// Additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// The number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema BlsAggregateVerifySchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []BlsAggregateVerifyTestGroup `json:"testGroups"`
}

type BlsAggregateVerifySchemaJsonSchema string

const BlsAggregateVerifySchemaJsonSchemaBlsAggregateVerifySchemaJson BlsAggregateVerifySchemaJsonSchema = "bls_aggregate_verify_schema.json"

var enumValues_BlsAggregateVerifySchemaJsonSchema = []interface{}{
	"bls_aggregate_verify_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsAggregateVerifySchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsAggregateVerifySchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsAggregateVerifySchemaJsonSchema, v)
	}
	*j = BlsAggregateVerifySchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsAggregateVerifySchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in BlsAggregateVerifySchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in BlsAggregateVerifySchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in BlsAggregateVerifySchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in BlsAggregateVerifySchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in BlsAggregateVerifySchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in BlsAggregateVerifySchemaJson: required")
	}
	type Plain BlsAggregateVerifySchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsAggregateVerifySchemaJson(plain)
	return nil
}

type BlsAggregateVerifyTestGroup struct {
	// The BLS ciphersuite identifier
	Ciphersuite string `json:"ciphersuite"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []BlsAggregateVerifyTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type BlsAggregateVerifyTestGroupType `json:"type"`
}

type BlsAggregateVerifyTestGroupType string

const BlsAggregateVerifyTestGroupTypeBlsAggregateVerify BlsAggregateVerifyTestGroupType = "BlsAggregateVerify"

var enumValues_BlsAggregateVerifyTestGroupType = []interface{}{
	"BlsAggregateVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsAggregateVerifyTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsAggregateVerifyTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsAggregateVerifyTestGroupType, v)
	}
	*j = BlsAggregateVerifyTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsAggregateVerifyTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["ciphersuite"]; raw != nil && !ok {
		return fmt.Errorf("field ciphersuite in BlsAggregateVerifyTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in BlsAggregateVerifyTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in BlsAggregateVerifyTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in BlsAggregateVerifyTestGroup: required")
	}
	type Plain BlsAggregateVerifyTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsAggregateVerifyTestGroup(plain)
	return nil
}

type BlsAggregateVerifyTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The messages that were signed
	Messages []string `json:"messages"`

	// The compressed public keys
	Pubkeys []string `json:"pubkeys"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The aggregated BLS signature in compressed form
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsAggregateVerifyTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["messages"]; raw != nil && !ok {
		return fmt.Errorf("field messages in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["pubkeys"]; raw != nil && !ok {
		return fmt.Errorf("field pubkeys in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in BlsAggregateVerifyTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in BlsAggregateVerifyTestVector: required")
	}
	type Plain BlsAggregateVerifyTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsAggregateVerifyTestVector(plain)
	return nil
}

type BlsHashToG2SchemaJson struct {
	// The primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// Additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// The number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema BlsHashToG2SchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []BlsHashToG2TestGroup `json:"testGroups"`
}

type BlsHashToG2SchemaJsonSchema string

const BlsHashToG2SchemaJsonSchemaBlsHashToG2SchemaJson BlsHashToG2SchemaJsonSchema = "bls_hash_to_g2_schema.json"

var enumValues_BlsHashToG2SchemaJsonSchema = []interface{}{
	"bls_hash_to_g2_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsHashToG2SchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsHashToG2SchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsHashToG2SchemaJsonSchema, v)
	}
	*j = BlsHashToG2SchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsHashToG2SchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in BlsHashToG2SchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in BlsHashToG2SchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in BlsHashToG2SchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in BlsHashToG2SchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in BlsHashToG2SchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in BlsHashToG2SchemaJson: required")
	}
	type Plain BlsHashToG2SchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsHashToG2SchemaJson(plain)
	return nil
}

type BlsHashToG2TestGroup struct {
	// The domain separation tag used for hash_to_curve
	Dst string `json:"dst"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []BlsHashToG2TestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type BlsHashToG2TestGroupType `json:"type"`
}

type BlsHashToG2TestGroupType string

const BlsHashToG2TestGroupTypeBlsHashToG2 BlsHashToG2TestGroupType = "BlsHashToG2"

var enumValues_BlsHashToG2TestGroupType = []interface{}{
	"BlsHashToG2",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsHashToG2TestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsHashToG2TestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsHashToG2TestGroupType, v)
	}
	*j = BlsHashToG2TestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsHashToG2TestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["dst"]; raw != nil && !ok {
		return fmt.Errorf("field dst in BlsHashToG2TestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in BlsHashToG2TestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in BlsHashToG2TestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in BlsHashToG2TestGroup: required")
	}
	type Plain BlsHashToG2TestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsHashToG2TestGroup(plain)
	return nil
}

type BlsHashToG2TestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// The expected hash-to-curve output point in compressed form
	Expected string `json:"expected"`

	// A list of flags
	Flags []string `json:"flags"`

	// The input message
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsHashToG2TestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in BlsHashToG2TestVector: required")
	}
	if _, ok := raw["expected"]; raw != nil && !ok {
		return fmt.Errorf("field expected in BlsHashToG2TestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in BlsHashToG2TestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in BlsHashToG2TestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in BlsHashToG2TestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in BlsHashToG2TestVector: required")
	}
	type Plain BlsHashToG2TestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsHashToG2TestVector(plain)
	return nil
}

type BlsPublicKey struct {
	// The group the public key belongs to
	Group BlsPublicKeyGroup `json:"group"`

	// The size of the public key in bytes
	KeySize int `json:"keySize"`

	// The compressed public key
	Pk string `json:"pk"`
}

type BlsPublicKeyGroup string

const BlsPublicKeyGroupG1 BlsPublicKeyGroup = "G1"
const BlsPublicKeyGroupG2 BlsPublicKeyGroup = "G2"

var enumValues_BlsPublicKeyGroup = []interface{}{
	"G1",
	"G2",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsPublicKeyGroup) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsPublicKeyGroup {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsPublicKeyGroup, v)
	}
	*j = BlsPublicKeyGroup(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsPublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["group"]; raw != nil && !ok {
		return fmt.Errorf("field group in BlsPublicKey: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in BlsPublicKey: required")
	}
	if _, ok := raw["pk"]; raw != nil && !ok {
		return fmt.Errorf("field pk in BlsPublicKey: required")
	}
	type Plain BlsPublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsPublicKey(plain)
	return nil
}

type BlsSigVerifySchemaJson struct {
	// The primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// Additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// The number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema BlsSigVerifySchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []BlsSigVerifyTestGroup `json:"testGroups"`
}

type BlsSigVerifySchemaJsonSchema string

const BlsSigVerifySchemaJsonSchemaBlsSigVerifySchemaJson BlsSigVerifySchemaJsonSchema = "bls_sig_verify_schema.json"

var enumValues_BlsSigVerifySchemaJsonSchema = []interface{}{
	"bls_sig_verify_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsSigVerifySchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsSigVerifySchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsSigVerifySchemaJsonSchema, v)
	}
	*j = BlsSigVerifySchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsSigVerifySchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in BlsSigVerifySchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in BlsSigVerifySchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in BlsSigVerifySchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in BlsSigVerifySchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in BlsSigVerifySchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in BlsSigVerifySchemaJson: required")
	}
	type Plain BlsSigVerifySchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsSigVerifySchemaJson(plain)
	return nil
}

type BlsSigVerifyTestGroup struct {
	// The BLS ciphersuite identifier, e.g.
	// BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_
	Ciphersuite string `json:"ciphersuite"`

	// PublicKey corresponds to the JSON schema field "publicKey".
	PublicKey BlsPublicKey `json:"publicKey"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type BlsSigVerifyTestGroupType `json:"type"`
}

type BlsSigVerifyTestGroupType string

const BlsSigVerifyTestGroupTypeBlsSigVerify BlsSigVerifyTestGroupType = "BlsSigVerify"

var enumValues_BlsSigVerifyTestGroupType = []interface{}{
	"BlsSigVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsSigVerifyTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_BlsSigVerifyTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_BlsSigVerifyTestGroupType, v)
	}
	*j = BlsSigVerifyTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *BlsSigVerifyTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["ciphersuite"]; raw != nil && !ok {
		return fmt.Errorf("field ciphersuite in BlsSigVerifyTestGroup: required")
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in BlsSigVerifyTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in BlsSigVerifyTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in BlsSigVerifyTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in BlsSigVerifyTestGroup: required")
	}
	type Plain BlsSigVerifyTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = BlsSigVerifyTestGroup(plain)
	return nil
}

type DaeadTestGroup struct {
	// the keySize in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []DaeadTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type DaeadTestGroupType `json:"type"`
}

type DaeadTestGroupType string

const DaeadTestGroupTypeDaeadTest DaeadTestGroupType = "DaeadTest"

var enumValues_DaeadTestGroupType = []interface{}{
	"DaeadTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DaeadTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DaeadTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DaeadTestGroupType, v)
	}
	*j = DaeadTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DaeadTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in DaeadTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in DaeadTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in DaeadTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in DaeadTestGroup: required")
	}
	type Plain DaeadTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DaeadTestGroup(plain)
	return nil
}

type DaeadTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema DaeadTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []DaeadTestGroup `json:"testGroups"`
}

type DaeadTestSchemaV1JsonSchema string

const DaeadTestSchemaV1JsonSchemaDaeadTestSchemaV1Json DaeadTestSchemaV1JsonSchema = "daead_test_schema_v1.json"

var enumValues_DaeadTestSchemaV1JsonSchema = []interface{}{
	"daead_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DaeadTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DaeadTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DaeadTestSchemaV1JsonSchema, v)
	}
	*j = DaeadTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DaeadTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in DaeadTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in DaeadTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in DaeadTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in DaeadTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in DaeadTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in DaeadTestSchemaV1Json: required")
	}
	type Plain DaeadTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DaeadTestSchemaV1Json(plain)
	return nil
}

type DaeadTestVector struct {
	// additional authenticated data
	Aad string `json:"aad"`

	// A brief description of the test case
	Comment string `json:"comment"`

	// the ciphertext including tag
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags,omitempty,omitzero"`

	// the key
	Key string `json:"key"`

	// the plaintext
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DaeadTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["aad"]; raw != nil && !ok {
		return fmt.Errorf("field aad in DaeadTestVector: required")
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in DaeadTestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in DaeadTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in DaeadTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in DaeadTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in DaeadTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in DaeadTestVector: required")
	}
	type Plain DaeadTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DaeadTestVector(plain)
	return nil
}

type DsaP1363TestGroup struct {
	// unencoded EC public key
	PublicKey DsaPublicKey `json:"publicKey"`

	// DER encoded public key
	PublicKeyDer string `json:"publicKeyDer"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// the hash function used for DSA
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type DsaP1363TestGroupType `json:"type"`
}

type DsaP1363TestGroupType string

const DsaP1363TestGroupTypeDsaP1363Verify DsaP1363TestGroupType = "DsaP1363Verify"

var enumValues_DsaP1363TestGroupType = []interface{}{
	"DsaP1363Verify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaP1363TestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DsaP1363TestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DsaP1363TestGroupType, v)
	}
	*j = DsaP1363TestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaP1363TestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in DsaP1363TestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in DsaP1363TestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in DsaP1363TestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in DsaP1363TestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in DsaP1363TestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in DsaP1363TestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in DsaP1363TestGroup: required")
	}
	type Plain DsaP1363TestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DsaP1363TestGroup(plain)
	return nil
}

type DsaP1363VerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema DsaP1363VerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []DsaP1363TestGroup `json:"testGroups"`
}

type DsaP1363VerifySchemaV1JsonSchema string

const DsaP1363VerifySchemaV1JsonSchemaDsaP1363VerifySchemaV1Json DsaP1363VerifySchemaV1JsonSchema = "dsa_p1363_verify_schema_v1.json"

var enumValues_DsaP1363VerifySchemaV1JsonSchema = []interface{}{
	"dsa_p1363_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaP1363VerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DsaP1363VerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DsaP1363VerifySchemaV1JsonSchema, v)
	}
	*j = DsaP1363VerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaP1363VerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in DsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in DsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in DsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in DsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in DsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in DsaP1363VerifySchemaV1Json: required")
	}
	type Plain DsaP1363VerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DsaP1363VerifySchemaV1Json(plain)
	return nil
}

type DsaPublicKey struct {
	// the generator of the multiplicative subgroup
	G string `json:"g"`

	// the key size in bits
	KeySize int `json:"keySize"`

	// the modulus p
	P string `json:"p"`

	// the order of the generator g
	Q string `json:"q"`

	// the key type
	Type DsaPublicKeyType `json:"type"`

	// the public key value
	Y string `json:"y"`
}

type DsaPublicKeyType string

const DsaPublicKeyTypeDsaPublicKey DsaPublicKeyType = "DsaPublicKey"

var enumValues_DsaPublicKeyType = []interface{}{
	"DsaPublicKey",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaPublicKeyType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DsaPublicKeyType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DsaPublicKeyType, v)
	}
	*j = DsaPublicKeyType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaPublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["g"]; raw != nil && !ok {
		return fmt.Errorf("field g in DsaPublicKey: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in DsaPublicKey: required")
	}
	if _, ok := raw["p"]; raw != nil && !ok {
		return fmt.Errorf("field p in DsaPublicKey: required")
	}
	if _, ok := raw["q"]; raw != nil && !ok {
		return fmt.Errorf("field q in DsaPublicKey: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in DsaPublicKey: required")
	}
	if _, ok := raw["y"]; raw != nil && !ok {
		return fmt.Errorf("field y in DsaPublicKey: required")
	}
	type Plain DsaPublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DsaPublicKey(plain)
	return nil
}

type DsaTestGroup struct {
	// unenocded DSA public key
	PublicKey DsaPublicKey `json:"publicKey"`

	// DER encoded public key
	PublicKeyDer string `json:"publicKeyDer"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// the hash function used for DSA
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []AsnSignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type DsaTestGroupType `json:"type"`
}

type DsaTestGroupType string

const DsaTestGroupTypeDsaVerify DsaTestGroupType = "DsaVerify"

var enumValues_DsaTestGroupType = []interface{}{
	"DsaVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DsaTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DsaTestGroupType, v)
	}
	*j = DsaTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in DsaTestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in DsaTestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in DsaTestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in DsaTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in DsaTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in DsaTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in DsaTestGroup: required")
	}
	type Plain DsaTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DsaTestGroup(plain)
	return nil
}

type DsaVerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema DsaVerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []DsaTestGroup `json:"testGroups"`
}

type DsaVerifySchemaV1JsonSchema string

const DsaVerifySchemaV1JsonSchemaDsaVerifySchemaV1Json DsaVerifySchemaV1JsonSchema = "dsa_verify_schema_v1.json"

var enumValues_DsaVerifySchemaV1JsonSchema = []interface{}{
	"dsa_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaVerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_DsaVerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_DsaVerifySchemaV1JsonSchema, v)
	}
	*j = DsaVerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *DsaVerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in DsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in DsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in DsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in DsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in DsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in DsaVerifySchemaV1Json: required")
	}
	type Plain DsaVerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = DsaVerifySchemaV1Json(plain)
	return nil
}

// A test for checking elliptic curve domain parameters.
type EcCurveTest struct {
	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []EcCurveTestTestsElem `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcCurveTestType `json:"type"`
}

type EcCurveTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm EcCurveTestSchemaJsonAlgorithm `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcCurveTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcCurveTest `json:"testGroups"`
}

type EcCurveTestSchemaJsonAlgorithm string

const EcCurveTestSchemaJsonAlgorithmEcCurveTest EcCurveTestSchemaJsonAlgorithm = "EcCurveTest"

var enumValues_EcCurveTestSchemaJsonAlgorithm = []interface{}{
	"EcCurveTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcCurveTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcCurveTestSchemaJsonAlgorithm, v)
	}
	*j = EcCurveTestSchemaJsonAlgorithm(v)
	return nil
}

type EcCurveTestSchemaJsonSchema string

const EcCurveTestSchemaJsonSchemaEcCurveTestSchemaJson EcCurveTestSchemaJsonSchema = "ec_curve_test_schema.json"

var enumValues_EcCurveTestSchemaJsonSchema = []interface{}{
	"ec_curve_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcCurveTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcCurveTestSchemaJsonSchema, v)
	}
	*j = EcCurveTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcCurveTestSchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcCurveTestSchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcCurveTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcCurveTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcCurveTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcCurveTestSchemaJson: required")
	}
	type Plain EcCurveTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcCurveTestSchemaJson(plain)
	return nil
}

type EcCurveTestTestsElem struct {
	// Coefficient a of the curve's Weierstrass equation
	A string `json:"a"`

	// Coefficient b of the curve's Weierstrass equation
	B string `json:"b"`

	// A brief description of the test case
	Comment *string `json:"comment,omitempty,omitzero"`

	// A list of flags
	Flags []string `json:"flags,omitempty,omitzero"`

	// x coordinate of the curve's generator
	Gx string `json:"gx"`

	// y coordinate of the curve's generator
	Gy string `json:"gy"`

	// Cofactor of the curve
	H int `json:"h"`

	// Order of the curve
	N string `json:"n"`

	// Name identifying the elliptic curve
	Name *string `json:"name,omitempty,omitzero"`

	// Object identifier of the ellptic curve
	Oid string `json:"oid"`

	// Prime identifying the field of definition
	P string `json:"p"`

	// Standard containing the domain parameters
	Ref *string `json:"ref,omitempty,omitzero"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTestTestsElem) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["a"]; raw != nil && !ok {
		return fmt.Errorf("field a in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["b"]; raw != nil && !ok {
		return fmt.Errorf("field b in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["gx"]; raw != nil && !ok {
		return fmt.Errorf("field gx in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["gy"]; raw != nil && !ok {
		return fmt.Errorf("field gy in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["h"]; raw != nil && !ok {
		return fmt.Errorf("field h in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["n"]; raw != nil && !ok {
		return fmt.Errorf("field n in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["oid"]; raw != nil && !ok {
		return fmt.Errorf("field oid in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["p"]; raw != nil && !ok {
		return fmt.Errorf("field p in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in EcCurveTestTestsElem: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in EcCurveTestTestsElem: required")
	}
	type Plain EcCurveTestTestsElem
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcCurveTestTestsElem(plain)
	return nil
}

type EcCurveTestType string

const EcCurveTestTypeEcCurveTest EcCurveTestType = "EcCurveTest"

var enumValues_EcCurveTestType = []interface{}{
	"EcCurveTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTestType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcCurveTestType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcCurveTestType, v)
	}
	*j = EcCurveTestType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcCurveTest) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcCurveTest: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcCurveTest: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcCurveTest: required")
	}
	type Plain EcCurveTest
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcCurveTest(plain)
	return nil
}

type EcPublicKey struct {
	// the EC group used by this public key
	Curve string `json:"curve"`

	// the key size in bits
	KeySize int `json:"keySize"`

	// the key type
	Type EcPublicKeyType `json:"type"`

	// encoded public key point
	Uncompressed string `json:"uncompressed"`

	// the x-coordinate of the public key point
	Wx string `json:"wx"`

	// the y-coordinate of the public key point
	Wy string `json:"wy"`
}

type EcPublicKeyType string

const EcPublicKeyTypeEcPublicKey EcPublicKeyType = "EcPublicKey"

var enumValues_EcPublicKeyType = []interface{}{
	"EcPublicKey",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcPublicKeyType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcPublicKeyType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcPublicKeyType, v)
	}
	*j = EcPublicKeyType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcPublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in EcPublicKey: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in EcPublicKey: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcPublicKey: required")
	}
	if _, ok := raw["uncompressed"]; raw != nil && !ok {
		return fmt.Errorf("field uncompressed in EcPublicKey: required")
	}
	if _, ok := raw["wx"]; raw != nil && !ok {
		return fmt.Errorf("field wx in EcPublicKey: required")
	}
	if _, ok := raw["wy"]; raw != nil && !ok {
		return fmt.Errorf("field wy in EcPublicKey: required")
	}
	type Plain EcPublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcPublicKey(plain)
	return nil
}

type EcdhEcpointTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// the encoding of the public key
	Encoding string `json:"encoding"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []EcdhEcpointTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdhEcpointTestGroupType `json:"type"`
}

type EcdhEcpointTestGroupType string

const EcdhEcpointTestGroupTypeEcdhEcpointTest EcdhEcpointTestGroupType = "EcdhEcpointTest"

var enumValues_EcdhEcpointTestGroupType = []interface{}{
	"EcdhEcpointTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhEcpointTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhEcpointTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhEcpointTestGroupType, v)
	}
	*j = EcdhEcpointTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhEcpointTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in EcdhEcpointTestGroup: required")
	}
	if _, ok := raw["encoding"]; raw != nil && !ok {
		return fmt.Errorf("field encoding in EcdhEcpointTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdhEcpointTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdhEcpointTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdhEcpointTestGroup: required")
	}
	type Plain EcdhEcpointTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhEcpointTestGroup(plain)
	return nil
}

type EcdhEcpointTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdhEcpointTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdhEcpointTestGroup `json:"testGroups"`
}

type EcdhEcpointTestSchemaV1JsonSchema string

const EcdhEcpointTestSchemaV1JsonSchemaEcdhEcpointTestSchemaV1Json EcdhEcpointTestSchemaV1JsonSchema = "ecdh_ecpoint_test_schema_v1.json"

var enumValues_EcdhEcpointTestSchemaV1JsonSchema = []interface{}{
	"ecdh_ecpoint_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhEcpointTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhEcpointTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhEcpointTestSchemaV1JsonSchema, v)
	}
	*j = EcdhEcpointTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhEcpointTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdhEcpointTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdhEcpointTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdhEcpointTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdhEcpointTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdhEcpointTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdhEcpointTestSchemaV1Json: required")
	}
	type Plain EcdhEcpointTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhEcpointTestSchemaV1Json(plain)
	return nil
}

type EcdhEcpointTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The private exponent
	Private string `json:"private"`

	// ASN encoded public point
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The shared secret key
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhEcpointTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in EcdhEcpointTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in EcdhEcpointTestVector: required")
	}
	type Plain EcdhEcpointTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhEcpointTestVector(plain)
	return nil
}

type EcdhPemTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// the encoding of the public key
	Encoding string `json:"encoding"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []EcdhPemTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdhPemTestGroupType `json:"type"`
}

type EcdhPemTestGroupType string

const EcdhPemTestGroupTypeEcdhPemTest EcdhPemTestGroupType = "EcdhPemTest"

var enumValues_EcdhPemTestGroupType = []interface{}{
	"EcdhPemTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhPemTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhPemTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhPemTestGroupType, v)
	}
	*j = EcdhPemTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhPemTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in EcdhPemTestGroup: required")
	}
	if _, ok := raw["encoding"]; raw != nil && !ok {
		return fmt.Errorf("field encoding in EcdhPemTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdhPemTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdhPemTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdhPemTestGroup: required")
	}
	type Plain EcdhPemTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhPemTestGroup(plain)
	return nil
}

type EcdhPemTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdhPemTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdhPemTestGroup `json:"testGroups"`
}

type EcdhPemTestSchemaV1JsonSchema string

const EcdhPemTestSchemaV1JsonSchemaEcdhPemTestSchemaV1Json EcdhPemTestSchemaV1JsonSchema = "ecdh_pem_test_schema_v1.json"

var enumValues_EcdhPemTestSchemaV1JsonSchema = []interface{}{
	"ecdh_pem_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhPemTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhPemTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhPemTestSchemaV1JsonSchema, v)
	}
	*j = EcdhPemTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhPemTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdhPemTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdhPemTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdhPemTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdhPemTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdhPemTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdhPemTestSchemaV1Json: required")
	}
	type Plain EcdhPemTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhPemTestSchemaV1Json(plain)
	return nil
}

type EcdhPemTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// Pem encoded private key
	Private string `json:"private"`

	// Pem encoded public key
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The shared secret key
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhPemTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in EcdhPemTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in EcdhPemTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in EcdhPemTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in EcdhPemTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in EcdhPemTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in EcdhPemTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in EcdhPemTestVector: required")
	}
	type Plain EcdhPemTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhPemTestVector(plain)
	return nil
}

type EcdhTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// the encoding of the public key
	Encoding string `json:"encoding"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []EcdhTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdhTestGroupType `json:"type"`
}

type EcdhTestGroupType string

const EcdhTestGroupTypeEcdhTest EcdhTestGroupType = "EcdhTest"

var enumValues_EcdhTestGroupType = []interface{}{
	"EcdhTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhTestGroupType, v)
	}
	*j = EcdhTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in EcdhTestGroup: required")
	}
	if _, ok := raw["encoding"]; raw != nil && !ok {
		return fmt.Errorf("field encoding in EcdhTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdhTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdhTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdhTestGroup: required")
	}
	type Plain EcdhTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhTestGroup(plain)
	return nil
}

type EcdhTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdhTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdhTestGroup `json:"testGroups"`
}

type EcdhTestSchemaV1JsonSchema string

const EcdhTestSchemaV1JsonSchemaEcdhTestSchemaV1Json EcdhTestSchemaV1JsonSchema = "ecdh_test_schema_v1.json"

var enumValues_EcdhTestSchemaV1JsonSchema = []interface{}{
	"ecdh_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhTestSchemaV1JsonSchema, v)
	}
	*j = EcdhTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdhTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdhTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdhTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdhTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdhTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdhTestSchemaV1Json: required")
	}
	type Plain EcdhTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhTestSchemaV1Json(plain)
	return nil
}

type EcdhTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the private key
	Private string `json:"private"`

	// Encoded public key
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The shared secret key
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in EcdhTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in EcdhTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in EcdhTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in EcdhTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in EcdhTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in EcdhTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in EcdhTestVector: required")
	}
	type Plain EcdhTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhTestVector(plain)
	return nil
}

type EcdhWebcryptoTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// the encoding of the public key
	Encoding string `json:"encoding"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []EcdhWebcryptoTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdhWebcryptoTestGroupType `json:"type"`
}

type EcdhWebcryptoTestGroupType string

const EcdhWebcryptoTestGroupTypeEcdhWebcryptoTest EcdhWebcryptoTestGroupType = "EcdhWebcryptoTest"

var enumValues_EcdhWebcryptoTestGroupType = []interface{}{
	"EcdhWebcryptoTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhWebcryptoTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhWebcryptoTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhWebcryptoTestGroupType, v)
	}
	*j = EcdhWebcryptoTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhWebcryptoTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in EcdhWebcryptoTestGroup: required")
	}
	if _, ok := raw["encoding"]; raw != nil && !ok {
		return fmt.Errorf("field encoding in EcdhWebcryptoTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdhWebcryptoTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdhWebcryptoTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdhWebcryptoTestGroup: required")
	}
	type Plain EcdhWebcryptoTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhWebcryptoTestGroup(plain)
	return nil
}

type EcdhWebcryptoTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdhWebcryptoTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdhWebcryptoTestGroup `json:"testGroups"`
}

type EcdhWebcryptoTestSchemaV1JsonSchema string

const EcdhWebcryptoTestSchemaV1JsonSchemaEcdhWebcryptoTestSchemaV1Json EcdhWebcryptoTestSchemaV1JsonSchema = "ecdh_webcrypto_test_schema_v1.json"

var enumValues_EcdhWebcryptoTestSchemaV1JsonSchema = []interface{}{
	"ecdh_webcrypto_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhWebcryptoTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdhWebcryptoTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdhWebcryptoTestSchemaV1JsonSchema, v)
	}
	*j = EcdhWebcryptoTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhWebcryptoTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdhWebcryptoTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdhWebcryptoTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdhWebcryptoTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdhWebcryptoTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdhWebcryptoTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdhWebcryptoTestSchemaV1Json: required")
	}
	type Plain EcdhWebcryptoTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhWebcryptoTestSchemaV1Json(plain)
	return nil
}

type EcdhWebcryptoTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// Private key in webcrypto format
	Private EcdhWebcryptoTestVectorPrivate `json:"private"`

	// Public key in webcrypto format
	Public EcdhWebcryptoTestVectorPublic `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The shared secret key
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// Private key in webcrypto format
type EcdhWebcryptoTestVectorPrivate map[string]interface{}

// Public key in webcrypto format
type EcdhWebcryptoTestVectorPublic map[string]interface{}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdhWebcryptoTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in EcdhWebcryptoTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in EcdhWebcryptoTestVector: required")
	}
	type Plain EcdhWebcryptoTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdhWebcryptoTestVector(plain)
	return nil
}

type EcdsaP1363TestGroup struct {
	// unencoded EC public key
	PublicKey EcPublicKey `json:"publicKey"`

	// DER encoded public key
	PublicKeyDer string `json:"publicKeyDer"`

	// PublicKeyJwk corresponds to the JSON schema field "publicKeyJwk".
	PublicKeyJwk *JsonWebKey `json:"publicKeyJwk,omitempty,omitzero"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// the hash function used for ECDSA
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdsaP1363TestGroupType `json:"type"`
}

type EcdsaP1363TestGroupType string

const EcdsaP1363TestGroupTypeEcdsaP1363Verify EcdsaP1363TestGroupType = "EcdsaP1363Verify"

var enumValues_EcdsaP1363TestGroupType = []interface{}{
	"EcdsaP1363Verify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaP1363TestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdsaP1363TestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdsaP1363TestGroupType, v)
	}
	*j = EcdsaP1363TestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaP1363TestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdsaP1363TestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdsaP1363TestGroup: required")
	}
	type Plain EcdsaP1363TestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdsaP1363TestGroup(plain)
	return nil
}

type EcdsaP1363VerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdsaP1363VerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdsaP1363TestGroup `json:"testGroups"`
}

type EcdsaP1363VerifySchemaV1JsonSchema string

const EcdsaP1363VerifySchemaV1JsonSchemaEcdsaP1363VerifySchemaV1Json EcdsaP1363VerifySchemaV1JsonSchema = "ecdsa_p1363_verify_schema_v1.json"

var enumValues_EcdsaP1363VerifySchemaV1JsonSchema = []interface{}{
	"ecdsa_p1363_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaP1363VerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdsaP1363VerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdsaP1363VerifySchemaV1JsonSchema, v)
	}
	*j = EcdsaP1363VerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaP1363VerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdsaP1363VerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdsaP1363VerifySchemaV1Json: required")
	}
	type Plain EcdsaP1363VerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdsaP1363VerifySchemaV1Json(plain)
	return nil
}

type EcdsaTestGroup struct {
	// unencoded EC public key
	PublicKey EcPublicKey `json:"publicKey"`

	// DER encoded public key
	PublicKeyDer string `json:"publicKeyDer"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// the hash function used for ECDSA
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []AsnSignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EcdsaTestGroupType `json:"type"`
}

type EcdsaTestGroupType string

const EcdsaTestGroupTypeEcdsaVerify EcdsaTestGroupType = "EcdsaVerify"

var enumValues_EcdsaTestGroupType = []interface{}{
	"EcdsaVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdsaTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdsaTestGroupType, v)
	}
	*j = EcdsaTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in EcdsaTestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in EcdsaTestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in EcdsaTestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in EcdsaTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EcdsaTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EcdsaTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EcdsaTestGroup: required")
	}
	type Plain EcdsaTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdsaTestGroup(plain)
	return nil
}

type EcdsaVerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EcdsaVerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EcdsaTestGroup `json:"testGroups"`
}

type EcdsaVerifySchemaV1JsonSchema string

const EcdsaVerifySchemaV1JsonSchemaEcdsaVerifySchemaV1Json EcdsaVerifySchemaV1JsonSchema = "ecdsa_verify_schema_v1.json"

var enumValues_EcdsaVerifySchemaV1JsonSchema = []interface{}{
	"ecdsa_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaVerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EcdsaVerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EcdsaVerifySchemaV1JsonSchema, v)
	}
	*j = EcdsaVerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EcdsaVerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EcdsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EcdsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EcdsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EcdsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EcdsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EcdsaVerifySchemaV1Json: required")
	}
	type Plain EcdsaVerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EcdsaVerifySchemaV1Json(plain)
	return nil
}

type EddsaTestGroup struct {
	// PublicKey corresponds to the JSON schema field "publicKey".
	PublicKey PublicKey `json:"publicKey"`

	// Asn encoded public key
	PublicKeyDer string `json:"publicKeyDer"`

	// the public key in webcrypto format
	PublicKeyJwk *JsonWebKey `json:"publicKeyJwk,omitempty,omitzero"`

	// PEM encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type EddsaTestGroupType `json:"type"`
}

type EddsaTestGroupType string

const EddsaTestGroupTypeEddsaVerify EddsaTestGroupType = "EddsaVerify"

var enumValues_EddsaTestGroupType = []interface{}{
	"EddsaVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EddsaTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EddsaTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EddsaTestGroupType, v)
	}
	*j = EddsaTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EddsaTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in EddsaTestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in EddsaTestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in EddsaTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in EddsaTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in EddsaTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in EddsaTestGroup: required")
	}
	type Plain EddsaTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EddsaTestGroup(plain)
	return nil
}

type EddsaVerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema EddsaVerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []EddsaTestGroup `json:"testGroups"`
}

type EddsaVerifySchemaV1JsonSchema string

const EddsaVerifySchemaV1JsonSchemaEddsaVerifySchemaV1Json EddsaVerifySchemaV1JsonSchema = "eddsa_verify_schema_v1.json"

var enumValues_EddsaVerifySchemaV1JsonSchema = []interface{}{
	"eddsa_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EddsaVerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_EddsaVerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EddsaVerifySchemaV1JsonSchema, v)
	}
	*j = EddsaVerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *EddsaVerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in EddsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in EddsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in EddsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in EddsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in EddsaVerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in EddsaVerifySchemaV1Json: required")
	}
	type Plain EddsaVerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = EddsaVerifySchemaV1Json(plain)
	return nil
}

type HkdfTestGroup struct {
	// the size of the ikm in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []HkdfTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type HkdfTestGroupType `json:"type"`
}

type HkdfTestGroupType string

const HkdfTestGroupTypeHkdfTest HkdfTestGroupType = "HkdfTest"

var enumValues_HkdfTestGroupType = []interface{}{
	"HkdfTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *HkdfTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_HkdfTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_HkdfTestGroupType, v)
	}
	*j = HkdfTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *HkdfTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in HkdfTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in HkdfTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in HkdfTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in HkdfTestGroup: required")
	}
	type Plain HkdfTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = HkdfTestGroup(plain)
	return nil
}

type HkdfTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema HkdfTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []HkdfTestGroup `json:"testGroups"`
}

type HkdfTestSchemaV1JsonSchema string

const HkdfTestSchemaV1JsonSchemaHkdfTestSchemaV1Json HkdfTestSchemaV1JsonSchema = "hkdf_test_schema_v1.json"

var enumValues_HkdfTestSchemaV1JsonSchema = []interface{}{
	"hkdf_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *HkdfTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_HkdfTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_HkdfTestSchemaV1JsonSchema, v)
	}
	*j = HkdfTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *HkdfTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in HkdfTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in HkdfTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in HkdfTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in HkdfTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in HkdfTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in HkdfTestSchemaV1Json: required")
	}
	type Plain HkdfTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = HkdfTestSchemaV1Json(plain)
	return nil
}

type HkdfTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the key (input key material)
	Ikm string `json:"ikm"`

	// additional information used in the key derivation
	Info string `json:"info"`

	// the generated bytes (output key material)
	Okm string `json:"okm"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the salt for the key derivation
	Salt string `json:"salt"`

	// the size of the output in bytes
	Size int `json:"size"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *HkdfTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in HkdfTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in HkdfTestVector: required")
	}
	if _, ok := raw["ikm"]; raw != nil && !ok {
		return fmt.Errorf("field ikm in HkdfTestVector: required")
	}
	if _, ok := raw["info"]; raw != nil && !ok {
		return fmt.Errorf("field info in HkdfTestVector: required")
	}
	if _, ok := raw["okm"]; raw != nil && !ok {
		return fmt.Errorf("field okm in HkdfTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in HkdfTestVector: required")
	}
	if _, ok := raw["salt"]; raw != nil && !ok {
		return fmt.Errorf("field salt in HkdfTestVector: required")
	}
	if _, ok := raw["size"]; raw != nil && !ok {
		return fmt.Errorf("field size in HkdfTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in HkdfTestVector: required")
	}
	type Plain HkdfTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = HkdfTestVector(plain)
	return nil
}

type IndCpaTestGroup struct {
	// the IV size in bits
	IvSize int `json:"ivSize"`

	// the keySize in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []IndCpaTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type IndCpaTestGroupType `json:"type"`
}

type IndCpaTestGroupType string

const IndCpaTestGroupTypeIndCpaTest IndCpaTestGroupType = "IndCpaTest"

var enumValues_IndCpaTestGroupType = []interface{}{
	"IndCpaTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *IndCpaTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_IndCpaTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_IndCpaTestGroupType, v)
	}
	*j = IndCpaTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *IndCpaTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["ivSize"]; raw != nil && !ok {
		return fmt.Errorf("field ivSize in IndCpaTestGroup: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in IndCpaTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in IndCpaTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in IndCpaTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in IndCpaTestGroup: required")
	}
	type Plain IndCpaTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = IndCpaTestGroup(plain)
	return nil
}

type IndCpaTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema IndCpaTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []IndCpaTestGroup `json:"testGroups"`
}

type IndCpaTestSchemaV1JsonSchema string

const IndCpaTestSchemaV1JsonSchemaIndCpaTestSchemaV1Json IndCpaTestSchemaV1JsonSchema = "ind_cpa_test_schema_v1.json"

var enumValues_IndCpaTestSchemaV1JsonSchema = []interface{}{
	"ind_cpa_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *IndCpaTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_IndCpaTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_IndCpaTestSchemaV1JsonSchema, v)
	}
	*j = IndCpaTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *IndCpaTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in IndCpaTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in IndCpaTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in IndCpaTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in IndCpaTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in IndCpaTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in IndCpaTestSchemaV1Json: required")
	}
	type Plain IndCpaTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = IndCpaTestSchemaV1Json(plain)
	return nil
}

type IndCpaTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// the raw ciphertext (without IV)
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags"`

	// the initialization vector
	Iv string `json:"iv"`

	// the key
	Key string `json:"key"`

	// the plaintext
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *IndCpaTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in IndCpaTestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in IndCpaTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in IndCpaTestVector: required")
	}
	if _, ok := raw["iv"]; raw != nil && !ok {
		return fmt.Errorf("field iv in IndCpaTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in IndCpaTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in IndCpaTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in IndCpaTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in IndCpaTestVector: required")
	}
	type Plain IndCpaTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = IndCpaTestVector(plain)
	return nil
}

type JsonWebCryptoSchemaV1Json struct {
	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema JsonWebCryptoSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []JsonWebCryptoTestGroup `json:"testGroups"`
}

type JsonWebCryptoSchemaV1JsonSchema string

const JsonWebCryptoSchemaV1JsonSchemaJsonWebCryptoSchemaV1Json JsonWebCryptoSchemaV1JsonSchema = "json_web_crypto_schema_v1.json"

var enumValues_JsonWebCryptoSchemaV1JsonSchema = []interface{}{
	"json_web_crypto_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebCryptoSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebCryptoSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebCryptoSchemaV1JsonSchema, v)
	}
	*j = JsonWebCryptoSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebCryptoSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in JsonWebCryptoSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in JsonWebCryptoSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in JsonWebCryptoSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in JsonWebCryptoSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in JsonWebCryptoSchemaV1Json: required")
	}
	type Plain JsonWebCryptoSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebCryptoSchemaV1Json(plain)
	return nil
}

type JsonWebCryptoTestGroup struct {
	// a description of what these tests have in common
	Comment *string `json:"comment,omitempty,omitzero"`

	// the private or secret key in webcrypto format
	Private JsonWebKeyOrKeyset `json:"private,omitempty,omitzero"`

	// [optional] the public key in webcrypto format
	Public JsonWebKeyOrKeyset `json:"public,omitempty,omitzero"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []JsonWebCryptoTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type *JsonWebCryptoTestGroupType `json:"type,omitempty,omitzero"`
}

type JsonWebCryptoTestGroupType string

const JsonWebCryptoTestGroupTypeJsonWebCrypto JsonWebCryptoTestGroupType = "JsonWebCrypto"

var enumValues_JsonWebCryptoTestGroupType = []interface{}{
	"JsonWebCrypto",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebCryptoTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebCryptoTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebCryptoTestGroupType, v)
	}
	*j = JsonWebCryptoTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebCryptoTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in JsonWebCryptoTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in JsonWebCryptoTestGroup: required")
	}
	type Plain JsonWebCryptoTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebCryptoTestGroup(plain)
	return nil
}

type JsonWebCryptoTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The JSON Web Encryption
	Jwe interface{} `json:"jwe,omitempty,omitzero"`

	// The JSON Web Signature
	Jws interface{} `json:"jws,omitempty,omitzero"`

	// [optional] Plaintext
	Pt *string `json:"pt,omitempty,omitzero"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebCryptoTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in JsonWebCryptoTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in JsonWebCryptoTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in JsonWebCryptoTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in JsonWebCryptoTestVector: required")
	}
	type Plain JsonWebCryptoTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebCryptoTestVector(plain)
	return nil
}

type JsonWebEncryptionSchemaV1Json struct {
	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema JsonWebEncryptionSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []JsonWebEncryptionTestGroup `json:"testGroups"`
}

type JsonWebEncryptionSchemaV1JsonSchema string

const JsonWebEncryptionSchemaV1JsonSchemaJsonWebEncryptionSchemaV1Json JsonWebEncryptionSchemaV1JsonSchema = "json_web_encryption_schema_v1.json"

var enumValues_JsonWebEncryptionSchemaV1JsonSchema = []interface{}{
	"json_web_encryption_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebEncryptionSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebEncryptionSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebEncryptionSchemaV1JsonSchema, v)
	}
	*j = JsonWebEncryptionSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebEncryptionSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in JsonWebEncryptionSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in JsonWebEncryptionSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in JsonWebEncryptionSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in JsonWebEncryptionSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in JsonWebEncryptionSchemaV1Json: required")
	}
	type Plain JsonWebEncryptionSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebEncryptionSchemaV1Json(plain)
	return nil
}

type JsonWebEncryptionTestGroup struct {
	// a description of what these tests have in common
	Comment *string `json:"comment,omitempty,omitzero"`

	// the private key
	Private *JsonWebKey `json:"private,omitempty,omitzero"`

	// the [optional] public key
	Public *JsonWebKey `json:"public,omitempty,omitzero"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []JsonWebEncryptionTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type *JsonWebEncryptionTestGroupType `json:"type,omitempty,omitzero"`
}

type JsonWebEncryptionTestGroupType string

const JsonWebEncryptionTestGroupTypeJsonWebEncryption JsonWebEncryptionTestGroupType = "JsonWebEncryption"

var enumValues_JsonWebEncryptionTestGroupType = []interface{}{
	"JsonWebEncryption",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebEncryptionTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebEncryptionTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebEncryptionTestGroupType, v)
	}
	*j = JsonWebEncryptionTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebEncryptionTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in JsonWebEncryptionTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in JsonWebEncryptionTestGroup: required")
	}
	type Plain JsonWebEncryptionTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebEncryptionTestGroup(plain)
	return nil
}

type JsonWebEncryptionTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// the content encryption algorithm
	Enc string `json:"enc"`

	// A list of flags
	Flags []string `json:"flags"`

	// The JSON Web Encryption in compact form
	Jwe string `json:"jwe"`

	// [optional] Plaintext
	Pt *string `json:"pt,omitempty,omitzero"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebEncryptionTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in JsonWebEncryptionTestVector: required")
	}
	if _, ok := raw["enc"]; raw != nil && !ok {
		return fmt.Errorf("field enc in JsonWebEncryptionTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in JsonWebEncryptionTestVector: required")
	}
	if _, ok := raw["jwe"]; raw != nil && !ok {
		return fmt.Errorf("field jwe in JsonWebEncryptionTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in JsonWebEncryptionTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in JsonWebEncryptionTestVector: required")
	}
	type Plain JsonWebEncryptionTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebEncryptionTestVector(plain)
	return nil
}

// see https://tools.ietf.org/html/rfc7517#section-4 and
// https://tools.ietf.org/html/rfc7518#section-6
type JsonWebKey struct {
	// the encryption/signing algorithm to use
	Alg *string `json:"alg,omitempty,omitzero"`

	// which defined curve to use
	Crv *JsonWebKeyCrv `json:"crv,omitempty,omitzero"`

	// the private key value of an EC key or private exponent for RSA
	D *string `json:"d,omitempty,omitzero"`

	// the first factor Chinese Remainder Theorem exponent of an RSA key
	Dp *string `json:"dp,omitempty,omitzero"`

	// the second factor Chinese Remainder Theorem exponent of an RSA key
	Dq *string `json:"dq,omitempty,omitzero"`

	// the public exponent of an RSA key
	E *string `json:"e,omitempty,omitzero"`

	// the secret key value of an oct key
	K *string `json:"k,omitempty,omitzero"`

	// an alternative to use
	KeyOps []string `json:"key_ops,omitempty,omitzero"`

	// the ID of the key entry
	Kid *string `json:"kid,omitempty,omitzero"`

	// the family of algorithms the key belongs to
	Kty *JsonWebKeyKty `json:"kty,omitempty,omitzero"`

	// the public modulus of an RSA key
	N *string `json:"n,omitempty,omitzero"`

	// the first prime factgor of an RSA key
	P *string `json:"p,omitempty,omitzero"`

	// the second prime factor of an RSA key
	Q *string `json:"q,omitempty,omitzero"`

	// the first factor Chinese Remainder Theorem coefficient of an RSA key
	Qi *string `json:"qi,omitempty,omitzero"`

	// what type of crypto operation to perform
	Use *JsonWebKeyUse `json:"use,omitempty,omitzero"`

	// the x-coordinate of an EC key point
	X *string `json:"x,omitempty,omitzero"`

	// the y-coordinate of an EC key point
	Y *string `json:"y,omitempty,omitzero"`
}

type JsonWebKeyCrv string

const JsonWebKeyCrvEd25519 JsonWebKeyCrv = "Ed25519"
const JsonWebKeyCrvEd448 JsonWebKeyCrv = "Ed448"
const JsonWebKeyCrvP256 JsonWebKeyCrv = "P-256"
const JsonWebKeyCrvP256K JsonWebKeyCrv = "P-256K"
const JsonWebKeyCrvP384 JsonWebKeyCrv = "P-384"
const JsonWebKeyCrvP521 JsonWebKeyCrv = "P-521"
const JsonWebKeyCrvSecp256K1 JsonWebKeyCrv = "secp256k1"
const JsonWebKeyCrvX25519 JsonWebKeyCrv = "X25519"
const JsonWebKeyCrvX448 JsonWebKeyCrv = "X448"

var enumValues_JsonWebKeyCrv = []interface{}{
	"P-256",
	"P-256K",
	"P-384",
	"P-521",
	"secp256k1",
	"X448",
	"X25519",
	"Ed25519",
	"Ed448",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyCrv) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebKeyCrv {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebKeyCrv, v)
	}
	*j = JsonWebKeyCrv(v)
	return nil
}

type JsonWebKeyKty string

const JsonWebKeyKtyBlank JsonWebKeyKty = ""
const JsonWebKeyKtyEC JsonWebKeyKty = "EC"
const JsonWebKeyKtyOKP JsonWebKeyKty = "OKP"
const JsonWebKeyKtyOct JsonWebKeyKty = "oct"
const JsonWebKeyKtyRSA JsonWebKeyKty = "RSA"

var enumValues_JsonWebKeyKty = []interface{}{
	"",
	"oct",
	"EC",
	"RSA",
	"OKP",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyKty) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebKeyKty {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebKeyKty, v)
	}
	*j = JsonWebKeyKty(v)
	return nil
}

type JsonWebKeyOrKeyset interface{}

type JsonWebKeySchemaV1Json struct {
	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema JsonWebKeySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []JsonWebKeyTestGroup `json:"testGroups"`
}

type JsonWebKeySchemaV1JsonSchema string

const JsonWebKeySchemaV1JsonSchemaJsonWebKeySchemaV1Json JsonWebKeySchemaV1JsonSchema = "json_web_key_schema_v1.json"

var enumValues_JsonWebKeySchemaV1JsonSchema = []interface{}{
	"json_web_key_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebKeySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebKeySchemaV1JsonSchema, v)
	}
	*j = JsonWebKeySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in JsonWebKeySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in JsonWebKeySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in JsonWebKeySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in JsonWebKeySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in JsonWebKeySchemaV1Json: required")
	}
	type Plain JsonWebKeySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebKeySchemaV1Json(plain)
	return nil
}

type JsonWebKeyTestGroup struct {
	// a description of what these tests have in common
	Comment *string `json:"comment,omitempty,omitzero"`

	// the private or secret keyset in webcrypto format
	Private *JsonWebKeyset `json:"private,omitempty,omitzero"`

	// the public keyset in webcrypto format
	Public *JsonWebKeyset `json:"public,omitempty,omitzero"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []JsonWebKeyTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type *JsonWebKeyTestGroupType `json:"type,omitempty,omitzero"`
}

type JsonWebKeyTestGroupType string

const JsonWebKeyTestGroupTypeJsonWebKey JsonWebKeyTestGroupType = "JsonWebKey"

var enumValues_JsonWebKeyTestGroupType = []interface{}{
	"JsonWebKey",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebKeyTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebKeyTestGroupType, v)
	}
	*j = JsonWebKeyTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in JsonWebKeyTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in JsonWebKeyTestGroup: required")
	}
	type Plain JsonWebKeyTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebKeyTestGroup(plain)
	return nil
}

type JsonWebKeyTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The JSON Web Signature in compact form
	Jws string `json:"jws"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in JsonWebKeyTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in JsonWebKeyTestVector: required")
	}
	if _, ok := raw["jws"]; raw != nil && !ok {
		return fmt.Errorf("field jws in JsonWebKeyTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in JsonWebKeyTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in JsonWebKeyTestVector: required")
	}
	type Plain JsonWebKeyTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebKeyTestVector(plain)
	return nil
}

type JsonWebKeyUse string

const JsonWebKeyUseEnc JsonWebKeyUse = "enc"
const JsonWebKeyUseSig JsonWebKeyUse = "sig"

var enumValues_JsonWebKeyUse = []interface{}{
	"sig",
	"enc",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebKeyUse) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebKeyUse {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebKeyUse, v)
	}
	*j = JsonWebKeyUse(v)
	return nil
}

// see https://tools.ietf.org/html/rfc7517#section-5
type JsonWebKeyset struct {
	// Keys corresponds to the JSON schema field "keys".
	Keys []JsonWebKey `json:"keys,omitempty,omitzero"`
}

type JsonWebSignatureSchemaV1Json struct {
	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema JsonWebSignatureSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []JsonWebSignatureTestGroup `json:"testGroups"`
}

type JsonWebSignatureSchemaV1JsonSchema string

const JsonWebSignatureSchemaV1JsonSchemaJsonWebSignatureSchemaV1Json JsonWebSignatureSchemaV1JsonSchema = "json_web_signature_schema_v1.json"

var enumValues_JsonWebSignatureSchemaV1JsonSchema = []interface{}{
	"json_web_signature_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebSignatureSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebSignatureSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebSignatureSchemaV1JsonSchema, v)
	}
	*j = JsonWebSignatureSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebSignatureSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in JsonWebSignatureSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in JsonWebSignatureSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in JsonWebSignatureSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in JsonWebSignatureSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in JsonWebSignatureSchemaV1Json: required")
	}
	type Plain JsonWebSignatureSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebSignatureSchemaV1Json(plain)
	return nil
}

type JsonWebSignatureTestGroup struct {
	// a description of what these tests have in common
	Comment *string `json:"comment,omitempty,omitzero"`

	// the private or secret key in webcrypto format
	Private *JsonWebKey `json:"private,omitempty,omitzero"`

	// [optional] the public key in webcrypto format
	Public *JsonWebKey `json:"public,omitempty,omitzero"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []JsonWebSignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type *JsonWebSignatureTestGroupType `json:"type,omitempty,omitzero"`
}

type JsonWebSignatureTestGroupType string

const JsonWebSignatureTestGroupTypeJsonWebSignature JsonWebSignatureTestGroupType = "JsonWebSignature"

var enumValues_JsonWebSignatureTestGroupType = []interface{}{
	"JsonWebSignature",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebSignatureTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_JsonWebSignatureTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_JsonWebSignatureTestGroupType, v)
	}
	*j = JsonWebSignatureTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebSignatureTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in JsonWebSignatureTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in JsonWebSignatureTestGroup: required")
	}
	type Plain JsonWebSignatureTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebSignatureTestGroup(plain)
	return nil
}

type JsonWebSignatureTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The JSON Web Signature in compact form
	Jws string `json:"jws"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *JsonWebSignatureTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in JsonWebSignatureTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in JsonWebSignatureTestVector: required")
	}
	if _, ok := raw["jws"]; raw != nil && !ok {
		return fmt.Errorf("field jws in JsonWebSignatureTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in JsonWebSignatureTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in JsonWebSignatureTestVector: required")
	}
	type Plain JsonWebSignatureTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = JsonWebSignatureTestVector(plain)
	return nil
}

type KeywrapTestGroup struct {
	// the keySize in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []KeywrapTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type KeywrapTestGroupType `json:"type"`
}

type KeywrapTestGroupType string

const KeywrapTestGroupTypeKeywrapTest KeywrapTestGroupType = "KeywrapTest"

var enumValues_KeywrapTestGroupType = []interface{}{
	"KeywrapTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *KeywrapTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_KeywrapTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_KeywrapTestGroupType, v)
	}
	*j = KeywrapTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *KeywrapTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in KeywrapTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in KeywrapTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in KeywrapTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in KeywrapTestGroup: required")
	}
	type Plain KeywrapTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = KeywrapTestGroup(plain)
	return nil
}

type KeywrapTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema KeywrapTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []KeywrapTestGroup `json:"testGroups"`
}

type KeywrapTestSchemaV1JsonSchema string

const KeywrapTestSchemaV1JsonSchemaKeywrapTestSchemaV1Json KeywrapTestSchemaV1JsonSchema = "keywrap_test_schema_v1.json"

var enumValues_KeywrapTestSchemaV1JsonSchema = []interface{}{
	"keywrap_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *KeywrapTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_KeywrapTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_KeywrapTestSchemaV1JsonSchema, v)
	}
	*j = KeywrapTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *KeywrapTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in KeywrapTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in KeywrapTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in KeywrapTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in KeywrapTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in KeywrapTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in KeywrapTestSchemaV1Json: required")
	}
	type Plain KeywrapTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = KeywrapTestSchemaV1Json(plain)
	return nil
}

type KeywrapTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// the wrapped key
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags"`

	// the wrapping key
	Key string `json:"key"`

	// the key bytes to wrap
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *KeywrapTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in KeywrapTestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in KeywrapTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in KeywrapTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in KeywrapTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in KeywrapTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in KeywrapTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in KeywrapTestVector: required")
	}
	type Plain KeywrapTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = KeywrapTestVector(plain)
	return nil
}

// A test for ML-KEM decapsulation validation
type MLKEMDecapsTestGroup struct {
	// ParameterSet corresponds to the JSON schema field "parameterSet".
	ParameterSet MLKEMDecapsTestGroupParameterSet `json:"parameterSet"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MLKEMDecapsTestGroupTestsElem `json:"tests"`

	// Test type for decapsulation validation
	Type MLKEMDecapsTestGroupType `json:"type"`
}

type MLKEMDecapsTestGroupParameterSet string

const MLKEMDecapsTestGroupParameterSetMLKEM1024 MLKEMDecapsTestGroupParameterSet = "ML-KEM-1024"
const MLKEMDecapsTestGroupParameterSetMLKEM512 MLKEMDecapsTestGroupParameterSet = "ML-KEM-512"
const MLKEMDecapsTestGroupParameterSetMLKEM768 MLKEMDecapsTestGroupParameterSet = "ML-KEM-768"

var enumValues_MLKEMDecapsTestGroupParameterSet = []interface{}{
	"ML-KEM-512",
	"ML-KEM-768",
	"ML-KEM-1024",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMDecapsTestGroupParameterSet) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMDecapsTestGroupParameterSet {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMDecapsTestGroupParameterSet, v)
	}
	*j = MLKEMDecapsTestGroupParameterSet(v)
	return nil
}

type MLKEMDecapsTestGroupTestsElem struct {
	// If present, the shared key the implementation MUST return on a successful
	// Decapsulate call.
	K *string `json:"K,omitempty,omitzero"`

	// An input ciphertext
	C string `json:"c"`

	// A brief description of the test case
	Comment *string `json:"comment,omitempty,omitzero"`

	// The full decapsulation key
	Dk string `json:"dk"`

	// The encapsulation key bytes of dk.
	Ek string `json:"ek"`

	// A list of flags
	Flags []string `json:"flags"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMDecapsTestGroupTestsElem) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["c"]; raw != nil && !ok {
		return fmt.Errorf("field c in MLKEMDecapsTestGroupTestsElem: required")
	}
	if _, ok := raw["dk"]; raw != nil && !ok {
		return fmt.Errorf("field dk in MLKEMDecapsTestGroupTestsElem: required")
	}
	if _, ok := raw["ek"]; raw != nil && !ok {
		return fmt.Errorf("field ek in MLKEMDecapsTestGroupTestsElem: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MLKEMDecapsTestGroupTestsElem: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MLKEMDecapsTestGroupTestsElem: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MLKEMDecapsTestGroupTestsElem: required")
	}
	type Plain MLKEMDecapsTestGroupTestsElem
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMDecapsTestGroupTestsElem(plain)
	return nil
}

type MLKEMDecapsTestGroupType string

const MLKEMDecapsTestGroupTypeMLKEMDecapsValidationTest MLKEMDecapsTestGroupType = "MLKEMDecapsValidationTest"

var enumValues_MLKEMDecapsTestGroupType = []interface{}{
	"MLKEMDecapsValidationTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMDecapsTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMDecapsTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMDecapsTestGroupType, v)
	}
	*j = MLKEMDecapsTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMDecapsTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["parameterSet"]; raw != nil && !ok {
		return fmt.Errorf("field parameterSet in MLKEMDecapsTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MLKEMDecapsTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MLKEMDecapsTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MLKEMDecapsTestGroup: required")
	}
	type Plain MLKEMDecapsTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMDecapsTestGroup(plain)
	return nil
}

// A test for Encaps
type MLKEMEncapsTestGroup struct {
	// ParameterSet corresponds to the JSON schema field "parameterSet".
	ParameterSet MLKEMEncapsTestGroupParameterSet `json:"parameterSet"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MLKEMEncapsTestGroupTestsElem `json:"tests"`

	// A legacy field, test files contain only one type per file
	Type *MLKEMEncapsTestGroupType `json:"type,omitempty,omitzero"`
}

type MLKEMEncapsTestGroupParameterSet string

const MLKEMEncapsTestGroupParameterSetMLKEM1024 MLKEMEncapsTestGroupParameterSet = "ML-KEM-1024"
const MLKEMEncapsTestGroupParameterSetMLKEM512 MLKEMEncapsTestGroupParameterSet = "ML-KEM-512"
const MLKEMEncapsTestGroupParameterSetMLKEM768 MLKEMEncapsTestGroupParameterSet = "ML-KEM-768"

var enumValues_MLKEMEncapsTestGroupParameterSet = []interface{}{
	"ML-KEM-512",
	"ML-KEM-768",
	"ML-KEM-1024",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMEncapsTestGroupParameterSet) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMEncapsTestGroupParameterSet {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMEncapsTestGroupParameterSet, v)
	}
	*j = MLKEMEncapsTestGroupParameterSet(v)
	return nil
}

type MLKEMEncapsTestGroupTestsElem struct {
	// The output shared secret
	K string `json:"K"`

	// The output ciphertext
	C string `json:"c"`

	// A brief description of the test case
	Comment *string `json:"comment,omitempty,omitzero"`

	// The encapsulation key
	Ek string `json:"ek"`

	// A list of flags
	Flags []string `json:"flags"`

	// The ML-KEM.Encaps_internal m input, a 32-byte value
	M string `json:"m"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMEncapsTestGroupTestsElem) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["K"]; raw != nil && !ok {
		return fmt.Errorf("field K in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["c"]; raw != nil && !ok {
		return fmt.Errorf("field c in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["ek"]; raw != nil && !ok {
		return fmt.Errorf("field ek in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["m"]; raw != nil && !ok {
		return fmt.Errorf("field m in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MLKEMEncapsTestGroupTestsElem: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MLKEMEncapsTestGroupTestsElem: required")
	}
	type Plain MLKEMEncapsTestGroupTestsElem
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	if utf8.RuneCountInString(string(plain.M)) < 64 {
		return fmt.Errorf("field %s length: must be >= %d", "m", 64)
	}
	if utf8.RuneCountInString(string(plain.M)) > 64 {
		return fmt.Errorf("field %s length: must be <= %d", "m", 64)
	}
	*j = MLKEMEncapsTestGroupTestsElem(plain)
	return nil
}

type MLKEMEncapsTestGroupType string

const MLKEMEncapsTestGroupTypeMLKEMEncapsTest MLKEMEncapsTestGroupType = "MLKEMEncapsTest"

var enumValues_MLKEMEncapsTestGroupType = []interface{}{
	"MLKEMEncapsTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMEncapsTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMEncapsTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMEncapsTestGroupType, v)
	}
	*j = MLKEMEncapsTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMEncapsTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["parameterSet"]; raw != nil && !ok {
		return fmt.Errorf("field parameterSet in MLKEMEncapsTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MLKEMEncapsTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MLKEMEncapsTestGroup: required")
	}
	type Plain MLKEMEncapsTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMEncapsTestGroup(plain)
	return nil
}

// A test for KeyGen using seed format
type MLKEMKeyGenTestGroup struct {
	// ParameterSet corresponds to the JSON schema field "parameterSet".
	ParameterSet MLKEMKeyGenTestGroupParameterSet `json:"parameterSet"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MLKEMKeyGenTestGroupTestsElem `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MLKEMKeyGenTestGroupType `json:"type"`
}

type MLKEMKeyGenTestGroupParameterSet string

const MLKEMKeyGenTestGroupParameterSetMLKEM1024 MLKEMKeyGenTestGroupParameterSet = "ML-KEM-1024"
const MLKEMKeyGenTestGroupParameterSetMLKEM512 MLKEMKeyGenTestGroupParameterSet = "ML-KEM-512"
const MLKEMKeyGenTestGroupParameterSetMLKEM768 MLKEMKeyGenTestGroupParameterSet = "ML-KEM-768"

var enumValues_MLKEMKeyGenTestGroupParameterSet = []interface{}{
	"ML-KEM-512",
	"ML-KEM-768",
	"ML-KEM-1024",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMKeyGenTestGroupParameterSet) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMKeyGenTestGroupParameterSet {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMKeyGenTestGroupParameterSet, v)
	}
	*j = MLKEMKeyGenTestGroupParameterSet(v)
	return nil
}

type MLKEMKeyGenTestGroupTestsElem struct {
	// A brief description of the test case
	Comment *string `json:"comment,omitempty,omitzero"`

	// The expected expanded decapsulation key
	Dk string `json:"dk"`

	// The expected encapsulation key
	Ek string `json:"ek"`

	// A list of flags
	Flags []string `json:"flags,omitempty,omitzero"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The d || z seed for key generation
	Seed string `json:"seed"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMKeyGenTestGroupTestsElem) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["dk"]; raw != nil && !ok {
		return fmt.Errorf("field dk in MLKEMKeyGenTestGroupTestsElem: required")
	}
	if _, ok := raw["ek"]; raw != nil && !ok {
		return fmt.Errorf("field ek in MLKEMKeyGenTestGroupTestsElem: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MLKEMKeyGenTestGroupTestsElem: required")
	}
	if _, ok := raw["seed"]; raw != nil && !ok {
		return fmt.Errorf("field seed in MLKEMKeyGenTestGroupTestsElem: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MLKEMKeyGenTestGroupTestsElem: required")
	}
	type Plain MLKEMKeyGenTestGroupTestsElem
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMKeyGenTestGroupTestsElem(plain)
	return nil
}

type MLKEMKeyGenTestGroupType string

const MLKEMKeyGenTestGroupTypeMLKEMKeyGen MLKEMKeyGenTestGroupType = "MLKEMKeyGen"

var enumValues_MLKEMKeyGenTestGroupType = []interface{}{
	"MLKEMKeyGen",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMKeyGenTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMKeyGenTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMKeyGenTestGroupType, v)
	}
	*j = MLKEMKeyGenTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMKeyGenTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["parameterSet"]; raw != nil && !ok {
		return fmt.Errorf("field parameterSet in MLKEMKeyGenTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MLKEMKeyGenTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MLKEMKeyGenTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MLKEMKeyGenTestGroup: required")
	}
	type Plain MLKEMKeyGenTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMKeyGenTestGroup(plain)
	return nil
}

// A test for KeyGen and/or Decaps
type MLKEMTestGroup struct {
	// ParameterSet corresponds to the JSON schema field "parameterSet".
	ParameterSet MLKEMTestGroupParameterSet `json:"parameterSet"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MLKEMTestGroupTestsElem `json:"tests"`

	// A legacy field, test files contain only one type per file
	Type MLKEMTestGroupType `json:"type"`
}

type MLKEMTestGroupParameterSet string

const MLKEMTestGroupParameterSetMLKEM1024 MLKEMTestGroupParameterSet = "ML-KEM-1024"
const MLKEMTestGroupParameterSetMLKEM512 MLKEMTestGroupParameterSet = "ML-KEM-512"
const MLKEMTestGroupParameterSetMLKEM768 MLKEMTestGroupParameterSet = "ML-KEM-768"

var enumValues_MLKEMTestGroupParameterSet = []interface{}{
	"ML-KEM-512",
	"ML-KEM-768",
	"ML-KEM-1024",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMTestGroupParameterSet) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMTestGroupParameterSet {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMTestGroupParameterSet, v)
	}
	*j = MLKEMTestGroupParameterSet(v)
	return nil
}

type MLKEMTestGroupTestsElem struct {
	// The output shared secret
	K string `json:"K"`

	// An input ciphertext
	C string `json:"c"`

	// A brief description of the test case
	Comment *string `json:"comment,omitempty,omitzero"`

	// The encapsulation key derived from the seed
	Ek *string `json:"ek,omitempty,omitzero"`

	// A list of flags
	Flags []string `json:"flags"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The d || z seed
	Seed string `json:"seed"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMTestGroupTestsElem) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["K"]; raw != nil && !ok {
		return fmt.Errorf("field K in MLKEMTestGroupTestsElem: required")
	}
	if _, ok := raw["c"]; raw != nil && !ok {
		return fmt.Errorf("field c in MLKEMTestGroupTestsElem: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MLKEMTestGroupTestsElem: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MLKEMTestGroupTestsElem: required")
	}
	if _, ok := raw["seed"]; raw != nil && !ok {
		return fmt.Errorf("field seed in MLKEMTestGroupTestsElem: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MLKEMTestGroupTestsElem: required")
	}
	type Plain MLKEMTestGroupTestsElem
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMTestGroupTestsElem(plain)
	return nil
}

type MLKEMTestGroupType string

const MLKEMTestGroupTypeMLKEMTest MLKEMTestGroupType = "MLKEMTest"

var enumValues_MLKEMTestGroupType = []interface{}{
	"MLKEMTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MLKEMTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MLKEMTestGroupType, v)
	}
	*j = MLKEMTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MLKEMTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["parameterSet"]; raw != nil && !ok {
		return fmt.Errorf("field parameterSet in MLKEMTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MLKEMTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MLKEMTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MLKEMTestGroup: required")
	}
	type Plain MLKEMTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MLKEMTestGroup(plain)
	return nil
}

type MacTestGroup struct {
	// the keySize in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// the expected size of the tag in bits
	TagSize int `json:"tagSize"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MacTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MacTestGroupType `json:"type"`
}

type MacTestGroupType string

const MacTestGroupTypeMacTest MacTestGroupType = "MacTest"

var enumValues_MacTestGroupType = []interface{}{
	"MacTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MacTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MacTestGroupType, v)
	}
	*j = MacTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in MacTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MacTestGroup: required")
	}
	if _, ok := raw["tagSize"]; raw != nil && !ok {
		return fmt.Errorf("field tagSize in MacTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MacTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MacTestGroup: required")
	}
	type Plain MacTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacTestGroup(plain)
	return nil
}

type MacTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MacTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MacTestGroup `json:"testGroups"`
}

type MacTestSchemaV1JsonSchema string

const MacTestSchemaV1JsonSchemaMacTestSchemaV1Json MacTestSchemaV1JsonSchema = "mac_test_schema_v1.json"

var enumValues_MacTestSchemaV1JsonSchema = []interface{}{
	"mac_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MacTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MacTestSchemaV1JsonSchema, v)
	}
	*j = MacTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MacTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in MacTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in MacTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MacTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MacTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MacTestSchemaV1Json: required")
	}
	type Plain MacTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacTestSchemaV1Json(plain)
	return nil
}

type MacTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the key
	Key string `json:"key"`

	// the plaintext
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the authentication tag
	Tag string `json:"tag"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in MacTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MacTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in MacTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in MacTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MacTestVector: required")
	}
	if _, ok := raw["tag"]; raw != nil && !ok {
		return fmt.Errorf("field tag in MacTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MacTestVector: required")
	}
	type Plain MacTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacTestVector(plain)
	return nil
}

type MacWithIvTestGroup struct {
	// the IV size in bits
	IvSize int `json:"ivSize"`

	// the key size in bits
	KeySize int `json:"keySize"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// the expected size of the tag in bits
	TagSize int `json:"tagSize"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MacWithIvTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MacWithIvTestGroupType `json:"type"`
}

type MacWithIvTestGroupType string

const MacWithIvTestGroupTypeMacWithIvTest MacWithIvTestGroupType = "MacWithIvTest"

var enumValues_MacWithIvTestGroupType = []interface{}{
	"MacWithIvTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacWithIvTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MacWithIvTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MacWithIvTestGroupType, v)
	}
	*j = MacWithIvTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacWithIvTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["ivSize"]; raw != nil && !ok {
		return fmt.Errorf("field ivSize in MacWithIvTestGroup: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in MacWithIvTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MacWithIvTestGroup: required")
	}
	if _, ok := raw["tagSize"]; raw != nil && !ok {
		return fmt.Errorf("field tagSize in MacWithIvTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MacWithIvTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MacWithIvTestGroup: required")
	}
	type Plain MacWithIvTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacWithIvTestGroup(plain)
	return nil
}

type MacWithIvTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MacWithIvTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MacWithIvTestGroup `json:"testGroups"`
}

type MacWithIvTestSchemaV1JsonSchema string

const MacWithIvTestSchemaV1JsonSchemaMacWithIvTestSchemaV1Json MacWithIvTestSchemaV1JsonSchema = "mac_with_iv_test_schema_v1.json"

var enumValues_MacWithIvTestSchemaV1JsonSchema = []interface{}{
	"mac_with_iv_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacWithIvTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MacWithIvTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MacWithIvTestSchemaV1JsonSchema, v)
	}
	*j = MacWithIvTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacWithIvTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MacWithIvTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in MacWithIvTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in MacWithIvTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MacWithIvTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MacWithIvTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MacWithIvTestSchemaV1Json: required")
	}
	type Plain MacWithIvTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacWithIvTestSchemaV1Json(plain)
	return nil
}

type MacWithIvTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the initialisation vector
	Iv string `json:"iv"`

	// the key
	Key string `json:"key"`

	// the plaintext
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the authentication tag
	Tag string `json:"tag"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MacWithIvTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in MacWithIvTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MacWithIvTestVector: required")
	}
	if _, ok := raw["iv"]; raw != nil && !ok {
		return fmt.Errorf("field iv in MacWithIvTestVector: required")
	}
	if _, ok := raw["key"]; raw != nil && !ok {
		return fmt.Errorf("field key in MacWithIvTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in MacWithIvTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MacWithIvTestVector: required")
	}
	if _, ok := raw["tag"]; raw != nil && !ok {
		return fmt.Errorf("field tag in MacWithIvTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MacWithIvTestVector: required")
	}
	type Plain MacWithIvTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MacWithIvTestVector(plain)
	return nil
}

type MlDsaSignNoSeedTestGroup struct {
	// Encoded ML-DSA private key
	PrivateKey string `json:"privateKey"`

	// Encoded ML-DSA public key derived from the private key, or null if the private
	// key is invalid
	PublicKey interface{} `json:"publicKey"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MlDsaSignTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MlDsaSignNoSeedTestGroupType `json:"type"`
}

type MlDsaSignNoSeedTestGroupType string

const MlDsaSignNoSeedTestGroupTypeMlDsaSign MlDsaSignNoSeedTestGroupType = "MlDsaSign"

var enumValues_MlDsaSignNoSeedTestGroupType = []interface{}{
	"MlDsaSign",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaSignNoSeedTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlDsaSignNoSeedTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlDsaSignNoSeedTestGroupType, v)
	}
	*j = MlDsaSignNoSeedTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaSignNoSeedTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["privateKey"]; raw != nil && !ok {
		return fmt.Errorf("field privateKey in MlDsaSignNoSeedTestGroup: required")
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in MlDsaSignNoSeedTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MlDsaSignNoSeedTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MlDsaSignNoSeedTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MlDsaSignNoSeedTestGroup: required")
	}
	type Plain MlDsaSignNoSeedTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlDsaSignNoSeedTestGroup(plain)
	return nil
}

type MlDsaSignTestGroup struct {
	// Private key as a DER-encoded PrivateKeyInfo, using the seed form
	PrivateKeyPkcs8 *string `json:"privateKeyPkcs8,omitempty,omitzero"`

	// 32-byte seed that generated the private key
	PrivateSeed string `json:"privateSeed"`

	// Encoded ML-DSA public key derived from the private seed, or null if the private
	// seed is invalid
	PublicKey interface{} `json:"publicKey"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MlDsaSignTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MlDsaSignTestGroupType `json:"type"`
}

type MlDsaSignTestGroupType string

const MlDsaSignTestGroupTypeMlDsaSign MlDsaSignTestGroupType = "MlDsaSign"

var enumValues_MlDsaSignTestGroupType = []interface{}{
	"MlDsaSign",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaSignTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlDsaSignTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlDsaSignTestGroupType, v)
	}
	*j = MlDsaSignTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaSignTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["privateSeed"]; raw != nil && !ok {
		return fmt.Errorf("field privateSeed in MlDsaSignTestGroup: required")
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in MlDsaSignTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in MlDsaSignTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MlDsaSignTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MlDsaSignTestGroup: required")
	}
	type Plain MlDsaSignTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlDsaSignTestGroup(plain)
	return nil
}

type MlDsaSignTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// [optional] The additional context string (if omitted, the context input is
	// empty)
	Ctx *string `json:"ctx,omitempty,omitzero"`

	// A list of flags
	Flags []string `json:"flags"`

	// [optional] The message to sign (if omitted, mu is provided to use with
	// Sign_internal)
	Msg *string `json:"msg,omitempty,omitzero"`

	// [optional] The 64-byte μ value (omitted in case of expected failure)
	Mu *string `json:"mu,omitempty,omitzero"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// [optional] The 32-byte random value (if omitted, implicitly all zeroes for
	// deterministic signing)
	Rnd *string `json:"rnd,omitempty,omitzero"`

	// The encoded signature (empty in case of expected failure)
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaSignTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in MlDsaSignTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MlDsaSignTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MlDsaSignTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in MlDsaSignTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MlDsaSignTestVector: required")
	}
	type Plain MlDsaSignTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlDsaSignTestVector(plain)
	return nil
}

type MlDsaVerifyTestGroup struct {
	// Encoded ML-DSA public key
	PublicKey string `json:"publicKey"`

	// Public key as a DER-encoded SubjectPublicKeyInfo
	PublicKeyDer string `json:"publicKeyDer"`

	// Source corresponds to the JSON schema field "source".
	Source *Source `json:"source,omitempty,omitzero"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []MlDsaVerifyTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type MlDsaVerifyTestGroupType `json:"type"`
}

type MlDsaVerifyTestGroupType string

const MlDsaVerifyTestGroupTypeMlDsaVerify MlDsaVerifyTestGroupType = "MlDsaVerify"

var enumValues_MlDsaVerifyTestGroupType = []interface{}{
	"MlDsaVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaVerifyTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlDsaVerifyTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlDsaVerifyTestGroupType, v)
	}
	*j = MlDsaVerifyTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaVerifyTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in MlDsaVerifyTestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in MlDsaVerifyTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in MlDsaVerifyTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in MlDsaVerifyTestGroup: required")
	}
	type Plain MlDsaVerifyTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlDsaVerifyTestGroup(plain)
	return nil
}

type MlDsaVerifyTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// [optional] The additional context string (empty if not provided)
	Ctx *string `json:"ctx,omitempty,omitzero"`

	// A list of flags
	Flags []string `json:"flags"`

	// The message to verify
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The encoded signature
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlDsaVerifyTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in MlDsaVerifyTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in MlDsaVerifyTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in MlDsaVerifyTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in MlDsaVerifyTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in MlDsaVerifyTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in MlDsaVerifyTestVector: required")
	}
	type Plain MlDsaVerifyTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlDsaVerifyTestVector(plain)
	return nil
}

type MldsaSignNoseedSchemaJson struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MldsaSignNoseedSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MlDsaSignNoSeedTestGroup `json:"testGroups"`
}

type MldsaSignNoseedSchemaJsonSchema string

const MldsaSignNoseedSchemaJsonSchemaMldsaSignNoseedSchemaJson MldsaSignNoseedSchemaJsonSchema = "mldsa_sign_noseed_schema.json"

var enumValues_MldsaSignNoseedSchemaJsonSchema = []interface{}{
	"mldsa_sign_noseed_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaSignNoseedSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MldsaSignNoseedSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MldsaSignNoseedSchemaJsonSchema, v)
	}
	*j = MldsaSignNoseedSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaSignNoseedSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MldsaSignNoseedSchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in MldsaSignNoseedSchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in MldsaSignNoseedSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MldsaSignNoseedSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MldsaSignNoseedSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MldsaSignNoseedSchemaJson: required")
	}
	type Plain MldsaSignNoseedSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MldsaSignNoseedSchemaJson(plain)
	return nil
}

type MldsaSignSeedSchemaJson struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MldsaSignSeedSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MlDsaSignTestGroup `json:"testGroups"`
}

type MldsaSignSeedSchemaJsonSchema string

const MldsaSignSeedSchemaJsonSchemaMldsaSignSeedSchemaJson MldsaSignSeedSchemaJsonSchema = "mldsa_sign_seed_schema.json"

var enumValues_MldsaSignSeedSchemaJsonSchema = []interface{}{
	"mldsa_sign_seed_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaSignSeedSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MldsaSignSeedSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MldsaSignSeedSchemaJsonSchema, v)
	}
	*j = MldsaSignSeedSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaSignSeedSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MldsaSignSeedSchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in MldsaSignSeedSchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in MldsaSignSeedSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MldsaSignSeedSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MldsaSignSeedSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MldsaSignSeedSchemaJson: required")
	}
	type Plain MldsaSignSeedSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MldsaSignSeedSchemaJson(plain)
	return nil
}

type MldsaVerifySchemaJson struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MldsaVerifySchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MlDsaVerifyTestGroup `json:"testGroups"`
}

type MldsaVerifySchemaJsonSchema string

const MldsaVerifySchemaJsonSchemaMldsaVerifySchemaJson MldsaVerifySchemaJsonSchema = "mldsa_verify_schema.json"

var enumValues_MldsaVerifySchemaJsonSchema = []interface{}{
	"mldsa_verify_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaVerifySchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MldsaVerifySchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MldsaVerifySchemaJsonSchema, v)
	}
	*j = MldsaVerifySchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MldsaVerifySchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MldsaVerifySchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in MldsaVerifySchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in MldsaVerifySchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MldsaVerifySchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MldsaVerifySchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MldsaVerifySchemaJson: required")
	}
	type Plain MldsaVerifySchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MldsaVerifySchemaJson(plain)
	return nil
}

type MlkemEncapsTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm MlkemEncapsTestSchemaJsonAlgorithm `json:"algorithm"`

	// additional documentation
	Header []string `json:"header,omitempty,omitzero"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes,omitempty,omitzero"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MlkemEncapsTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MLKEMEncapsTestGroup `json:"testGroups"`
}

type MlkemEncapsTestSchemaJsonAlgorithm string

const MlkemEncapsTestSchemaJsonAlgorithmMLKEM MlkemEncapsTestSchemaJsonAlgorithm = "ML-KEM"

var enumValues_MlkemEncapsTestSchemaJsonAlgorithm = []interface{}{
	"ML-KEM",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemEncapsTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemEncapsTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemEncapsTestSchemaJsonAlgorithm, v)
	}
	*j = MlkemEncapsTestSchemaJsonAlgorithm(v)
	return nil
}

type MlkemEncapsTestSchemaJsonSchema string

const MlkemEncapsTestSchemaJsonSchemaMlkemEncapsTestSchemaJson MlkemEncapsTestSchemaJsonSchema = "mlkem_encaps_test_schema.json"

var enumValues_MlkemEncapsTestSchemaJsonSchema = []interface{}{
	"mlkem_encaps_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemEncapsTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemEncapsTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemEncapsTestSchemaJsonSchema, v)
	}
	*j = MlkemEncapsTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemEncapsTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MlkemEncapsTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MlkemEncapsTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MlkemEncapsTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MlkemEncapsTestSchemaJson: required")
	}
	type Plain MlkemEncapsTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlkemEncapsTestSchemaJson(plain)
	return nil
}

type MlkemKeygenSeedTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm MlkemKeygenSeedTestSchemaJsonAlgorithm `json:"algorithm"`

	// additional documentation
	Header []string `json:"header,omitempty,omitzero"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes,omitempty,omitzero"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MlkemKeygenSeedTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MLKEMKeyGenTestGroup `json:"testGroups"`
}

type MlkemKeygenSeedTestSchemaJsonAlgorithm string

const MlkemKeygenSeedTestSchemaJsonAlgorithmMLKEM MlkemKeygenSeedTestSchemaJsonAlgorithm = "ML-KEM"

var enumValues_MlkemKeygenSeedTestSchemaJsonAlgorithm = []interface{}{
	"ML-KEM",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemKeygenSeedTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemKeygenSeedTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemKeygenSeedTestSchemaJsonAlgorithm, v)
	}
	*j = MlkemKeygenSeedTestSchemaJsonAlgorithm(v)
	return nil
}

type MlkemKeygenSeedTestSchemaJsonSchema string

const MlkemKeygenSeedTestSchemaJsonSchemaMlkemKeygenSeedTestSchemaJson MlkemKeygenSeedTestSchemaJsonSchema = "mlkem_keygen_seed_test_schema.json"

var enumValues_MlkemKeygenSeedTestSchemaJsonSchema = []interface{}{
	"mlkem_keygen_seed_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemKeygenSeedTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemKeygenSeedTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemKeygenSeedTestSchemaJsonSchema, v)
	}
	*j = MlkemKeygenSeedTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemKeygenSeedTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MlkemKeygenSeedTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MlkemKeygenSeedTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MlkemKeygenSeedTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MlkemKeygenSeedTestSchemaJson: required")
	}
	type Plain MlkemKeygenSeedTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlkemKeygenSeedTestSchemaJson(plain)
	return nil
}

type MlkemSemiExpandedDecapsTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm `json:"algorithm"`

	// additional documentation
	Header []string `json:"header,omitempty,omitzero"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes,omitempty,omitzero"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MlkemSemiExpandedDecapsTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MLKEMDecapsTestGroup `json:"testGroups"`
}

type MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm string

const MlkemSemiExpandedDecapsTestSchemaJsonAlgorithmMLKEM MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm = "ML-KEM"

var enumValues_MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm = []interface{}{
	"ML-KEM",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm, v)
	}
	*j = MlkemSemiExpandedDecapsTestSchemaJsonAlgorithm(v)
	return nil
}

type MlkemSemiExpandedDecapsTestSchemaJsonSchema string

const MlkemSemiExpandedDecapsTestSchemaJsonSchemaMlkemSemiExpandedDecapsTestSchemaJson MlkemSemiExpandedDecapsTestSchemaJsonSchema = "mlkem_semi_expanded_decaps_test_schema.json"

var enumValues_MlkemSemiExpandedDecapsTestSchemaJsonSchema = []interface{}{
	"mlkem_semi_expanded_decaps_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemSemiExpandedDecapsTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemSemiExpandedDecapsTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemSemiExpandedDecapsTestSchemaJsonSchema, v)
	}
	*j = MlkemSemiExpandedDecapsTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemSemiExpandedDecapsTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MlkemSemiExpandedDecapsTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MlkemSemiExpandedDecapsTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MlkemSemiExpandedDecapsTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MlkemSemiExpandedDecapsTestSchemaJson: required")
	}
	type Plain MlkemSemiExpandedDecapsTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlkemSemiExpandedDecapsTestSchemaJson(plain)
	return nil
}

type MlkemTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm MlkemTestSchemaJsonAlgorithm `json:"algorithm"`

	// additional documentation
	Header []string `json:"header,omitempty,omitzero"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes,omitempty,omitzero"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema MlkemTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []MLKEMTestGroup `json:"testGroups"`
}

type MlkemTestSchemaJsonAlgorithm string

const MlkemTestSchemaJsonAlgorithmMLKEM MlkemTestSchemaJsonAlgorithm = "ML-KEM"

var enumValues_MlkemTestSchemaJsonAlgorithm = []interface{}{
	"ML-KEM",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemTestSchemaJsonAlgorithm, v)
	}
	*j = MlkemTestSchemaJsonAlgorithm(v)
	return nil
}

type MlkemTestSchemaJsonSchema string

const MlkemTestSchemaJsonSchemaMlkemTestSchemaJson MlkemTestSchemaJsonSchema = "mlkem_test_schema.json"

var enumValues_MlkemTestSchemaJsonSchema = []interface{}{
	"mlkem_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_MlkemTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_MlkemTestSchemaJsonSchema, v)
	}
	*j = MlkemTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *MlkemTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in MlkemTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in MlkemTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in MlkemTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in MlkemTestSchemaJson: required")
	}
	type Plain MlkemTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = MlkemTestSchemaJson(plain)
	return nil
}

type NoteEntry struct {
	// The type of the bug tested for
	BugType string `json:"bugType"`

	// A list of potentially related CVEs
	Cves []string `json:"cves,omitempty,omitzero"`

	// A description of the flag
	Description *string `json:"description,omitempty,omitzero"`

	// The expected effect of failing the test vector
	Effect *string `json:"effect,omitempty,omitzero"`

	// A list of potentially related references
	Links []string `json:"links,omitempty,omitzero"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *NoteEntry) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["bugType"]; raw != nil && !ok {
		return fmt.Errorf("field bugType in NoteEntry: required")
	}
	type Plain NoteEntry
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = NoteEntry(plain)
	return nil
}

type Notes map[string]NoteEntry

type PbkdfTestGroup struct {
	// Source corresponds to the JSON schema field "source".
	Source *Source `json:"source,omitempty,omitzero"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []PbkdfTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type PbkdfTestGroupType `json:"type"`
}

type PbkdfTestGroupType string

const PbkdfTestGroupTypePbkdfTest PbkdfTestGroupType = "PbkdfTest"

var enumValues_PbkdfTestGroupType = []interface{}{
	"PbkdfTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PbkdfTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PbkdfTestGroupType, v)
	}
	*j = PbkdfTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in PbkdfTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in PbkdfTestGroup: required")
	}
	type Plain PbkdfTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PbkdfTestGroup(plain)
	return nil
}

type PbkdfTestSchemaJson struct {
	// Algorithm corresponds to the JSON schema field "algorithm".
	Algorithm PbkdfTestSchemaJsonAlgorithm `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// Additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// The number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema PbkdfTestSchemaJsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []PbkdfTestGroup `json:"testGroups"`
}

type PbkdfTestSchemaJsonAlgorithm string

const PbkdfTestSchemaJsonAlgorithmPBKDF2HMACSHA1 PbkdfTestSchemaJsonAlgorithm = "PBKDF2-HMACSHA1"
const PbkdfTestSchemaJsonAlgorithmPBKDF2HMACSHA224 PbkdfTestSchemaJsonAlgorithm = "PBKDF2-HMACSHA224"
const PbkdfTestSchemaJsonAlgorithmPBKDF2HMACSHA256 PbkdfTestSchemaJsonAlgorithm = "PBKDF2-HMACSHA256"
const PbkdfTestSchemaJsonAlgorithmPBKDF2HMACSHA384 PbkdfTestSchemaJsonAlgorithm = "PBKDF2-HMACSHA384"
const PbkdfTestSchemaJsonAlgorithmPBKDF2HMACSHA512 PbkdfTestSchemaJsonAlgorithm = "PBKDF2-HMACSHA512"

var enumValues_PbkdfTestSchemaJsonAlgorithm = []interface{}{
	"PBKDF2-HMACSHA1",
	"PBKDF2-HMACSHA224",
	"PBKDF2-HMACSHA256",
	"PBKDF2-HMACSHA384",
	"PBKDF2-HMACSHA512",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestSchemaJsonAlgorithm) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PbkdfTestSchemaJsonAlgorithm {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PbkdfTestSchemaJsonAlgorithm, v)
	}
	*j = PbkdfTestSchemaJsonAlgorithm(v)
	return nil
}

type PbkdfTestSchemaJsonSchema string

const PbkdfTestSchemaJsonSchemaPbkdfTestSchemaJson PbkdfTestSchemaJsonSchema = "pbkdf_test_schema.json"

var enumValues_PbkdfTestSchemaJsonSchema = []interface{}{
	"pbkdf_test_schema.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestSchemaJsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PbkdfTestSchemaJsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PbkdfTestSchemaJsonSchema, v)
	}
	*j = PbkdfTestSchemaJsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestSchemaJson) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in PbkdfTestSchemaJson: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in PbkdfTestSchemaJson: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in PbkdfTestSchemaJson: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in PbkdfTestSchemaJson: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in PbkdfTestSchemaJson: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in PbkdfTestSchemaJson: required")
	}
	type Plain PbkdfTestSchemaJson
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PbkdfTestSchemaJson(plain)
	return nil
}

type PbkdfTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// The derived key
	Dk string `json:"dk"`

	// The length of the derived key in bytes
	DkLen int `json:"dkLen"`

	// A list of flags
	Flags []string `json:"flags"`

	// The number of iterations for the key derivation
	IterationCount int `json:"iterationCount"`

	// The password as a hex-encoded byte string
	Password string `json:"password"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// The salt for the key derivation
	Salt string `json:"salt"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PbkdfTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in PbkdfTestVector: required")
	}
	if _, ok := raw["dk"]; raw != nil && !ok {
		return fmt.Errorf("field dk in PbkdfTestVector: required")
	}
	if _, ok := raw["dkLen"]; raw != nil && !ok {
		return fmt.Errorf("field dkLen in PbkdfTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in PbkdfTestVector: required")
	}
	if _, ok := raw["iterationCount"]; raw != nil && !ok {
		return fmt.Errorf("field iterationCount in PbkdfTestVector: required")
	}
	if _, ok := raw["password"]; raw != nil && !ok {
		return fmt.Errorf("field password in PbkdfTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in PbkdfTestVector: required")
	}
	if _, ok := raw["salt"]; raw != nil && !ok {
		return fmt.Errorf("field salt in PbkdfTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in PbkdfTestVector: required")
	}
	type Plain PbkdfTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PbkdfTestVector(plain)
	return nil
}

type PrimalityTestGroup struct {
	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []PrimalityTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type PrimalityTestGroupType `json:"type"`
}

type PrimalityTestGroupType string

const PrimalityTestGroupTypePrimalityTest PrimalityTestGroupType = "PrimalityTest"

var enumValues_PrimalityTestGroupType = []interface{}{
	"PrimalityTest",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrimalityTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PrimalityTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PrimalityTestGroupType, v)
	}
	*j = PrimalityTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrimalityTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in PrimalityTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in PrimalityTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in PrimalityTestGroup: required")
	}
	type Plain PrimalityTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PrimalityTestGroup(plain)
	return nil
}

type PrimalityTestSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema PrimalityTestSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []PrimalityTestGroup `json:"testGroups"`
}

type PrimalityTestSchemaV1JsonSchema string

const PrimalityTestSchemaV1JsonSchemaPrimalityTestSchemaV1Json PrimalityTestSchemaV1JsonSchema = "primality_test_schema_v1.json"

var enumValues_PrimalityTestSchemaV1JsonSchema = []interface{}{
	"primality_test_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrimalityTestSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PrimalityTestSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PrimalityTestSchemaV1JsonSchema, v)
	}
	*j = PrimalityTestSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrimalityTestSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in PrimalityTestSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in PrimalityTestSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in PrimalityTestSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in PrimalityTestSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in PrimalityTestSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in PrimalityTestSchemaV1Json: required")
	}
	type Plain PrimalityTestSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PrimalityTestSchemaV1Json(plain)
	return nil
}

type PrimalityTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`

	// the integer to test
	Value string `json:"value"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrimalityTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in PrimalityTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in PrimalityTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in PrimalityTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in PrimalityTestVector: required")
	}
	if _, ok := raw["value"]; raw != nil && !ok {
		return fmt.Errorf("field value in PrimalityTestVector: required")
	}
	type Plain PrimalityTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PrimalityTestVector(plain)
	return nil
}

type PrivateKey struct {
	// Coefficient corresponds to the JSON schema field "coefficient".
	Coefficient *string `json:"coefficient,omitempty,omitzero"`

	// Exponent1 corresponds to the JSON schema field "exponent1".
	Exponent1 *string `json:"exponent1,omitempty,omitzero"`

	// Exponent2 corresponds to the JSON schema field "exponent2".
	Exponent2 *string `json:"exponent2,omitempty,omitzero"`

	// Modulus corresponds to the JSON schema field "modulus".
	Modulus string `json:"modulus"`

	// OtherPrimeInfos corresponds to the JSON schema field "otherPrimeInfos".
	OtherPrimeInfos [][]string `json:"otherPrimeInfos,omitempty,omitzero"`

	// Prime1 corresponds to the JSON schema field "prime1".
	Prime1 *string `json:"prime1,omitempty,omitzero"`

	// Prime2 corresponds to the JSON schema field "prime2".
	Prime2 *string `json:"prime2,omitempty,omitzero"`

	// PrivateExponent corresponds to the JSON schema field "privateExponent".
	PrivateExponent string `json:"privateExponent"`

	// PublicExponent corresponds to the JSON schema field "publicExponent".
	PublicExponent string `json:"publicExponent"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PrivateKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["modulus"]; raw != nil && !ok {
		return fmt.Errorf("field modulus in PrivateKey: required")
	}
	if _, ok := raw["privateExponent"]; raw != nil && !ok {
		return fmt.Errorf("field privateExponent in PrivateKey: required")
	}
	if _, ok := raw["publicExponent"]; raw != nil && !ok {
		return fmt.Errorf("field publicExponent in PrivateKey: required")
	}
	type Plain PrivateKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PrivateKey(plain)
	return nil
}

type PublicKey struct {
	// the name of the curve
	Curve string `json:"curve"`

	// the size of the key in bits
	KeySize int `json:"keySize"`

	// the public key
	Pk string `json:"pk"`

	// Type corresponds to the JSON schema field "type".
	Type PublicKeyType `json:"type"`
}

type PublicKeyType string

const PublicKeyTypeECDSAPublicKey PublicKeyType = "ECDSAPublicKey"
const PublicKeyTypeEDDSAPublicKey PublicKeyType = "EDDSAPublicKey"

var enumValues_PublicKeyType = []interface{}{
	"ECDSAPublicKey",
	"EDDSAPublicKey",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PublicKeyType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_PublicKeyType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_PublicKeyType, v)
	}
	*j = PublicKeyType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *PublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in PublicKey: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in PublicKey: required")
	}
	if _, ok := raw["pk"]; raw != nil && !ok {
		return fmt.Errorf("field pk in PublicKey: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in PublicKey: required")
	}
	type Plain PublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = PublicKey(plain)
	return nil
}

// Recipient specific information Section 7.2.1 of RFC 7516
type Recipient struct {
	// EncryptedKey corresponds to the JSON schema field "encrypted_key".
	EncryptedKey *string `json:"encrypted_key,omitempty,omitzero"`

	// header information that is not integrity protected
	Header RecipientHeader `json:"header,omitempty,omitzero"`
}

// header information that is not integrity protected
type RecipientHeader map[string]interface{}

type Result string

const ResultAcceptable Result = "acceptable"
const ResultInvalid Result = "invalid"
const ResultValid Result = "valid"

var enumValues_Result = []interface{}{
	"valid",
	"invalid",
	"acceptable",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *Result) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_Result {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_Result, v)
	}
	*j = Result(v)
	return nil
}

type RsaesOaepDecryptSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema RsaesOaepDecryptSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []RsaesOaepTestGroup `json:"testGroups"`
}

type RsaesOaepDecryptSchemaV1JsonSchema string

const RsaesOaepDecryptSchemaV1JsonSchemaRsaesOaepDecryptSchemaV1Json RsaesOaepDecryptSchemaV1JsonSchema = "rsaes_oaep_decrypt_schema_v1.json"

var enumValues_RsaesOaepDecryptSchemaV1JsonSchema = []interface{}{
	"rsaes_oaep_decrypt_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesOaepDecryptSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsaesOaepDecryptSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsaesOaepDecryptSchemaV1JsonSchema, v)
	}
	*j = RsaesOaepDecryptSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesOaepDecryptSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in RsaesOaepDecryptSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in RsaesOaepDecryptSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in RsaesOaepDecryptSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in RsaesOaepDecryptSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in RsaesOaepDecryptSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in RsaesOaepDecryptSchemaV1Json: required")
	}
	type Plain RsaesOaepDecryptSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesOaepDecryptSchemaV1Json(plain)
	return nil
}

type RsaesOaepTestGroup struct {
	// the keySize in bits
	KeySize int `json:"keySize"`

	// the message generating function (e.g. MGF1)
	Mgf string `json:"mgf"`

	// The hash function used for the message generating function.
	MgfSha string `json:"mgfSha"`

	// PrivateKey corresponds to the JSON schema field "privateKey".
	PrivateKey PrivateKey `json:"privateKey"`

	// PrivateKeyJwk corresponds to the JSON schema field "privateKeyJwk".
	PrivateKeyJwk *JsonWebKey `json:"privateKeyJwk,omitempty,omitzero"`

	// Pem encoded private key
	PrivateKeyPem string `json:"privateKeyPem"`

	// Pkcs 8 encoded private key.
	PrivateKeyPkcs8 string `json:"privateKeyPkcs8"`

	// The hash function for hashing the label.
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []RsaesOaepTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type RsaesOaepTestGroupType `json:"type"`
}

type RsaesOaepTestGroupType string

const RsaesOaepTestGroupTypeRsaesOaepDecrypt RsaesOaepTestGroupType = "RsaesOaepDecrypt"

var enumValues_RsaesOaepTestGroupType = []interface{}{
	"RsaesOaepDecrypt",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesOaepTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsaesOaepTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsaesOaepTestGroupType, v)
	}
	*j = RsaesOaepTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesOaepTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["mgf"]; raw != nil && !ok {
		return fmt.Errorf("field mgf in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["mgfSha"]; raw != nil && !ok {
		return fmt.Errorf("field mgfSha in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["privateKey"]; raw != nil && !ok {
		return fmt.Errorf("field privateKey in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["privateKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPem in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["privateKeyPkcs8"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPkcs8 in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in RsaesOaepTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in RsaesOaepTestGroup: required")
	}
	type Plain RsaesOaepTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesOaepTestGroup(plain)
	return nil
}

type RsaesOaepTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// An encryption of msg
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags"`

	// The label used for the encryption
	Label string `json:"label"`

	// The encrypted message
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesOaepTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in RsaesOaepTestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in RsaesOaepTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in RsaesOaepTestVector: required")
	}
	if _, ok := raw["label"]; raw != nil && !ok {
		return fmt.Errorf("field label in RsaesOaepTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in RsaesOaepTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in RsaesOaepTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in RsaesOaepTestVector: required")
	}
	type Plain RsaesOaepTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesOaepTestVector(plain)
	return nil
}

type RsaesPkcs1DecryptSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema RsaesPkcs1DecryptSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []RsaesPkcs1TestGroup `json:"testGroups"`
}

type RsaesPkcs1DecryptSchemaV1JsonSchema string

const RsaesPkcs1DecryptSchemaV1JsonSchemaRsaesPkcs1DecryptSchemaV1Json RsaesPkcs1DecryptSchemaV1JsonSchema = "rsaes_pkcs1_decrypt_schema_v1.json"

var enumValues_RsaesPkcs1DecryptSchemaV1JsonSchema = []interface{}{
	"rsaes_pkcs1_decrypt_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesPkcs1DecryptSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsaesPkcs1DecryptSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsaesPkcs1DecryptSchemaV1JsonSchema, v)
	}
	*j = RsaesPkcs1DecryptSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesPkcs1DecryptSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in RsaesPkcs1DecryptSchemaV1Json: required")
	}
	type Plain RsaesPkcs1DecryptSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesPkcs1DecryptSchemaV1Json(plain)
	return nil
}

type RsaesPkcs1TestGroup struct {
	// The size of the key in bits
	KeySize int `json:"keySize"`

	// PrivateKey corresponds to the JSON schema field "privateKey".
	PrivateKey PrivateKey `json:"privateKey"`

	// JWK encoded private key
	PrivateKeyJwk *JsonWebKey `json:"privateKeyJwk,omitempty,omitzero"`

	// Pem encoded private key
	PrivateKeyPem string `json:"privateKeyPem"`

	// Pkcs 8 encoded private key.
	PrivateKeyPkcs8 string `json:"privateKeyPkcs8"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []RsaesPkcs1TestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type RsaesPkcs1TestGroupType `json:"type"`
}

type RsaesPkcs1TestGroupType string

const RsaesPkcs1TestGroupTypeRsaesPkcs1Decrypt RsaesPkcs1TestGroupType = "RsaesPkcs1Decrypt"

var enumValues_RsaesPkcs1TestGroupType = []interface{}{
	"RsaesPkcs1Decrypt",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesPkcs1TestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsaesPkcs1TestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsaesPkcs1TestGroupType, v)
	}
	*j = RsaesPkcs1TestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesPkcs1TestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["privateKey"]; raw != nil && !ok {
		return fmt.Errorf("field privateKey in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["privateKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPem in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["privateKeyPkcs8"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPkcs8 in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in RsaesPkcs1TestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in RsaesPkcs1TestGroup: required")
	}
	type Plain RsaesPkcs1TestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesPkcs1TestGroup(plain)
	return nil
}

type RsaesPkcs1TestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// An encryption of msg
	Ct string `json:"ct"`

	// A list of flags
	Flags []string `json:"flags"`

	// The encrypted message
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsaesPkcs1TestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in RsaesPkcs1TestVector: required")
	}
	if _, ok := raw["ct"]; raw != nil && !ok {
		return fmt.Errorf("field ct in RsaesPkcs1TestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in RsaesPkcs1TestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in RsaesPkcs1TestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in RsaesPkcs1TestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in RsaesPkcs1TestVector: required")
	}
	type Plain RsaesPkcs1TestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsaesPkcs1TestVector(plain)
	return nil
}

type RsassaPkcs1GenTestGroup struct {
	// DER encoding of the sequence [n, e]
	KeyAsn string `json:"keyAsn"`

	// DER encoding of the public key
	KeyDer string `json:"keyDer"`

	// [Optional] Private key in JWK format
	KeyJwk *JsonWebKey `json:"keyJwk,omitempty,omitzero"`

	// Pem encoded public key
	KeyPem string `json:"keyPem"`

	// the size of the modulus in bits
	KeySize int `json:"keySize"`

	// PrivateKey corresponds to the JSON schema field "privateKey".
	PrivateKey PrivateKey `json:"privateKey"`

	// [Optional] Private key in JWK format
	PrivateKeyJwk *JsonWebKey `json:"privateKeyJwk,omitempty,omitzero"`

	// Pem encoded private key
	PrivateKeyPem string `json:"privateKeyPem"`

	// DER encoding of the PKCS8 private key
	PrivateKeyPkcs8 string `json:"privateKeyPkcs8"`

	// the hash function used for the message
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type RsassaPkcs1GenTestGroupType `json:"type"`
}

type RsassaPkcs1GenTestGroupType string

const RsassaPkcs1GenTestGroupTypeRsassaPkcs1Generate RsassaPkcs1GenTestGroupType = "RsassaPkcs1Generate"

var enumValues_RsassaPkcs1GenTestGroupType = []interface{}{
	"RsassaPkcs1Generate",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1GenTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPkcs1GenTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPkcs1GenTestGroupType, v)
	}
	*j = RsassaPkcs1GenTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1GenTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keyAsn"]; raw != nil && !ok {
		return fmt.Errorf("field keyAsn in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["keyDer"]; raw != nil && !ok {
		return fmt.Errorf("field keyDer in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["keyPem"]; raw != nil && !ok {
		return fmt.Errorf("field keyPem in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["privateKey"]; raw != nil && !ok {
		return fmt.Errorf("field privateKey in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["privateKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPem in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["privateKeyPkcs8"]; raw != nil && !ok {
		return fmt.Errorf("field privateKeyPkcs8 in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in RsassaPkcs1GenTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in RsassaPkcs1GenTestGroup: required")
	}
	type Plain RsassaPkcs1GenTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPkcs1GenTestGroup(plain)
	return nil
}

type RsassaPkcs1GenerateSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema RsassaPkcs1GenerateSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []RsassaPkcs1GenTestGroup `json:"testGroups"`
}

type RsassaPkcs1GenerateSchemaV1JsonSchema string

const RsassaPkcs1GenerateSchemaV1JsonSchemaRsassaPkcs1GenerateSchemaV1Json RsassaPkcs1GenerateSchemaV1JsonSchema = "rsassa_pkcs1_generate_schema_v1.json"

var enumValues_RsassaPkcs1GenerateSchemaV1JsonSchema = []interface{}{
	"rsassa_pkcs1_generate_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1GenerateSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPkcs1GenerateSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPkcs1GenerateSchemaV1JsonSchema, v)
	}
	*j = RsassaPkcs1GenerateSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1GenerateSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in RsassaPkcs1GenerateSchemaV1Json: required")
	}
	type Plain RsassaPkcs1GenerateSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPkcs1GenerateSchemaV1Json(plain)
	return nil
}

type RsassaPkcs1TestGroup struct {
	// KeyJwk corresponds to the JSON schema field "keyJwk".
	KeyJwk *JsonWebKey `json:"keyJwk,omitempty,omitzero"`

	// the size of the modulus in bits
	KeySize int `json:"keySize"`

	// PublicKey corresponds to the JSON schema field "publicKey".
	PublicKey RsassaPkcs1TestGroupPublicKey `json:"publicKey"`

	// ASN encoding of the sequence [n, e]
	PublicKeyAsn string `json:"publicKeyAsn"`

	// ASN encoding of the public key
	PublicKeyDer string `json:"publicKeyDer"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// the hash function used for the message
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []SignatureTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type RsassaPkcs1TestGroupType `json:"type"`
}

type RsassaPkcs1TestGroupPublicKey struct {
	// The modulus of the key
	Modulus string `json:"modulus"`

	// The public exponent
	PublicExponent string `json:"publicExponent"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1TestGroupPublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["modulus"]; raw != nil && !ok {
		return fmt.Errorf("field modulus in RsassaPkcs1TestGroupPublicKey: required")
	}
	if _, ok := raw["publicExponent"]; raw != nil && !ok {
		return fmt.Errorf("field publicExponent in RsassaPkcs1TestGroupPublicKey: required")
	}
	type Plain RsassaPkcs1TestGroupPublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPkcs1TestGroupPublicKey(plain)
	return nil
}

type RsassaPkcs1TestGroupType string

const RsassaPkcs1TestGroupTypeRsassaPkcs1Verify RsassaPkcs1TestGroupType = "RsassaPkcs1Verify"

var enumValues_RsassaPkcs1TestGroupType = []interface{}{
	"RsassaPkcs1Verify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1TestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPkcs1TestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPkcs1TestGroupType, v)
	}
	*j = RsassaPkcs1TestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1TestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["publicKeyAsn"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyAsn in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in RsassaPkcs1TestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in RsassaPkcs1TestGroup: required")
	}
	type Plain RsassaPkcs1TestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPkcs1TestGroup(plain)
	return nil
}

type RsassaPkcs1VerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema RsassaPkcs1VerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []RsassaPkcs1TestGroup `json:"testGroups"`
}

type RsassaPkcs1VerifySchemaV1JsonSchema string

const RsassaPkcs1VerifySchemaV1JsonSchemaRsassaPkcs1VerifySchemaV1Json RsassaPkcs1VerifySchemaV1JsonSchema = "rsassa_pkcs1_verify_schema_v1.json"

var enumValues_RsassaPkcs1VerifySchemaV1JsonSchema = []interface{}{
	"rsassa_pkcs1_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1VerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPkcs1VerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPkcs1VerifySchemaV1JsonSchema, v)
	}
	*j = RsassaPkcs1VerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPkcs1VerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in RsassaPkcs1VerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in RsassaPkcs1VerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in RsassaPkcs1VerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in RsassaPkcs1VerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in RsassaPkcs1VerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in RsassaPkcs1VerifySchemaV1Json: required")
	}
	type Plain RsassaPkcs1VerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPkcs1VerifySchemaV1Json(plain)
	return nil
}

type RsassaPssTestGroup struct {
	// the size of the modulus in bits
	KeySize int `json:"keySize"`

	// the message generating function (e.g. MGF1)
	Mgf string `json:"mgf"`

	// The hash function used for the message generating function.
	MgfSha string `json:"mgfSha"`

	// PublicKey corresponds to the JSON schema field "publicKey".
	PublicKey RsassaPssTestGroupPublicKey `json:"publicKey"`

	// ASN encoding of the sequence [n, e]
	PublicKeyAsn string `json:"publicKeyAsn"`

	// ASN encoding of the public key
	PublicKeyDer string `json:"publicKeyDer"`

	// PublicKeyJwk corresponds to the JSON schema field "publicKeyJwk".
	PublicKeyJwk *JsonWebKey `json:"publicKeyJwk,omitempty,omitzero"`

	// Pem encoded public key
	PublicKeyPem string `json:"publicKeyPem"`

	// The salt length
	SLen int `json:"sLen"`

	// The hash function for hashing the message.
	Sha string `json:"sha"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []RsassaPssTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type RsassaPssTestGroupType `json:"type"`
}

type RsassaPssTestGroupPublicKey struct {
	// The modulus of the key
	Modulus string `json:"modulus"`

	// The public exponent
	PublicExponent string `json:"publicExponent"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssTestGroupPublicKey) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["modulus"]; raw != nil && !ok {
		return fmt.Errorf("field modulus in RsassaPssTestGroupPublicKey: required")
	}
	if _, ok := raw["publicExponent"]; raw != nil && !ok {
		return fmt.Errorf("field publicExponent in RsassaPssTestGroupPublicKey: required")
	}
	type Plain RsassaPssTestGroupPublicKey
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPssTestGroupPublicKey(plain)
	return nil
}

type RsassaPssTestGroupType string

const RsassaPssTestGroupTypeRsassaPssVerify RsassaPssTestGroupType = "RsassaPssVerify"

var enumValues_RsassaPssTestGroupType = []interface{}{
	"RsassaPssVerify",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPssTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPssTestGroupType, v)
	}
	*j = RsassaPssTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["keySize"]; raw != nil && !ok {
		return fmt.Errorf("field keySize in RsassaPssTestGroup: required")
	}
	if _, ok := raw["mgf"]; raw != nil && !ok {
		return fmt.Errorf("field mgf in RsassaPssTestGroup: required")
	}
	if _, ok := raw["mgfSha"]; raw != nil && !ok {
		return fmt.Errorf("field mgfSha in RsassaPssTestGroup: required")
	}
	if _, ok := raw["publicKey"]; raw != nil && !ok {
		return fmt.Errorf("field publicKey in RsassaPssTestGroup: required")
	}
	if _, ok := raw["publicKeyAsn"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyAsn in RsassaPssTestGroup: required")
	}
	if _, ok := raw["publicKeyDer"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyDer in RsassaPssTestGroup: required")
	}
	if _, ok := raw["publicKeyPem"]; raw != nil && !ok {
		return fmt.Errorf("field publicKeyPem in RsassaPssTestGroup: required")
	}
	if _, ok := raw["sLen"]; raw != nil && !ok {
		return fmt.Errorf("field sLen in RsassaPssTestGroup: required")
	}
	if _, ok := raw["sha"]; raw != nil && !ok {
		return fmt.Errorf("field sha in RsassaPssTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in RsassaPssTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in RsassaPssTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in RsassaPssTestGroup: required")
	}
	type Plain RsassaPssTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPssTestGroup(plain)
	return nil
}

type RsassaPssTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The message to sign
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// a signature for msg
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in RsassaPssTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in RsassaPssTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in RsassaPssTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in RsassaPssTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in RsassaPssTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in RsassaPssTestVector: required")
	}
	type Plain RsassaPssTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPssTestVector(plain)
	return nil
}

type RsassaPssVerifySchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema RsassaPssVerifySchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []RsassaPssTestGroup `json:"testGroups"`
}

type RsassaPssVerifySchemaV1JsonSchema string

const RsassaPssVerifySchemaV1JsonSchemaRsassaPssVerifySchemaV1Json RsassaPssVerifySchemaV1JsonSchema = "rsassa_pss_verify_schema_v1.json"

var enumValues_RsassaPssVerifySchemaV1JsonSchema = []interface{}{
	"rsassa_pss_verify_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssVerifySchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_RsassaPssVerifySchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_RsassaPssVerifySchemaV1JsonSchema, v)
	}
	*j = RsassaPssVerifySchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *RsassaPssVerifySchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in RsassaPssVerifySchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in RsassaPssVerifySchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in RsassaPssVerifySchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in RsassaPssVerifySchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in RsassaPssVerifySchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in RsassaPssVerifySchemaV1Json: required")
	}
	type Plain RsassaPssVerifySchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = RsassaPssVerifySchemaV1Json(plain)
	return nil
}

type SignatureTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// The message to sign
	Msg string `json:"msg"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// A signature for msg
	Sig string `json:"sig"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *SignatureTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in SignatureTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in SignatureTestVector: required")
	}
	if _, ok := raw["msg"]; raw != nil && !ok {
		return fmt.Errorf("field msg in SignatureTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in SignatureTestVector: required")
	}
	if _, ok := raw["sig"]; raw != nil && !ok {
		return fmt.Errorf("field sig in SignatureTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in SignatureTestVector: required")
	}
	type Plain SignatureTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = SignatureTestVector(plain)
	return nil
}

type Source struct {
	// Name corresponds to the JSON schema field "name".
	Name string `json:"name"`

	// Version corresponds to the JSON schema field "version".
	Version string `json:"version"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *Source) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["name"]; raw != nil && !ok {
		return fmt.Errorf("field name in Source: required")
	}
	if _, ok := raw["version"]; raw != nil && !ok {
		return fmt.Errorf("field version in Source: required")
	}
	type Plain Source
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	if utf8.RuneCountInString(string(plain.Name)) < 1 {
		return fmt.Errorf("field %s length: must be >= %d", "name", 1)
	}
	if utf8.RuneCountInString(string(plain.Version)) < 1 {
		return fmt.Errorf("field %s length: must be >= %d", "version", 1)
	}
	*j = Source(plain)
	return nil
}

type XdhAsnCompSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema XdhAsnCompSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []XdhAsnTestGroup `json:"testGroups"`
}

type XdhAsnCompSchemaV1JsonSchema string

const XdhAsnCompSchemaV1JsonSchemaXdhAsnCompSchemaV1Json XdhAsnCompSchemaV1JsonSchema = "xdh_asn_comp_schema_v1.json"

var enumValues_XdhAsnCompSchemaV1JsonSchema = []interface{}{
	"xdh_asn_comp_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhAsnCompSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhAsnCompSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhAsnCompSchemaV1JsonSchema, v)
	}
	*j = XdhAsnCompSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhAsnCompSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in XdhAsnCompSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in XdhAsnCompSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in XdhAsnCompSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in XdhAsnCompSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in XdhAsnCompSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in XdhAsnCompSchemaV1Json: required")
	}
	type Plain XdhAsnCompSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhAsnCompSchemaV1Json(plain)
	return nil
}

type XdhAsnTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []XdhAsnTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type XdhAsnTestGroupType `json:"type"`
}

type XdhAsnTestGroupType string

const XdhAsnTestGroupTypeXdhAsnComp XdhAsnTestGroupType = "XdhAsnComp"

var enumValues_XdhAsnTestGroupType = []interface{}{
	"XdhAsnComp",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhAsnTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhAsnTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhAsnTestGroupType, v)
	}
	*j = XdhAsnTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhAsnTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in XdhAsnTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in XdhAsnTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in XdhAsnTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in XdhAsnTestGroup: required")
	}
	type Plain XdhAsnTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhAsnTestGroup(plain)
	return nil
}

type XdhAsnTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// PKCS #8 encoded private key
	Private string `json:"private"`

	// X.509 encoded the public key
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the shared secret
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhAsnTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in XdhAsnTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in XdhAsnTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in XdhAsnTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in XdhAsnTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in XdhAsnTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in XdhAsnTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in XdhAsnTestVector: required")
	}
	type Plain XdhAsnTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhAsnTestVector(plain)
	return nil
}

type XdhCompSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema XdhCompSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []XdhTestGroup `json:"testGroups"`
}

type XdhCompSchemaV1JsonSchema string

const XdhCompSchemaV1JsonSchemaXdhCompSchemaV1Json XdhCompSchemaV1JsonSchema = "xdh_comp_schema_v1.json"

var enumValues_XdhCompSchemaV1JsonSchema = []interface{}{
	"xdh_comp_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhCompSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhCompSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhCompSchemaV1JsonSchema, v)
	}
	*j = XdhCompSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhCompSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in XdhCompSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in XdhCompSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in XdhCompSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in XdhCompSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in XdhCompSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in XdhCompSchemaV1Json: required")
	}
	type Plain XdhCompSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhCompSchemaV1Json(plain)
	return nil
}

type XdhJwkCompSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema XdhJwkCompSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []XdhJwkTestGroup `json:"testGroups"`
}

type XdhJwkCompSchemaV1JsonSchema string

const XdhJwkCompSchemaV1JsonSchemaXdhJwkCompSchemaV1Json XdhJwkCompSchemaV1JsonSchema = "xdh_jwk_comp_schema_v1.json"

var enumValues_XdhJwkCompSchemaV1JsonSchema = []interface{}{
	"xdh_jwk_comp_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhJwkCompSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhJwkCompSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhJwkCompSchemaV1JsonSchema, v)
	}
	*j = XdhJwkCompSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhJwkCompSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in XdhJwkCompSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in XdhJwkCompSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in XdhJwkCompSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in XdhJwkCompSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in XdhJwkCompSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in XdhJwkCompSchemaV1Json: required")
	}
	type Plain XdhJwkCompSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhJwkCompSchemaV1Json(plain)
	return nil
}

type XdhJwkTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []XdhJwkTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type XdhJwkTestGroupType `json:"type"`
}

type XdhJwkTestGroupType string

const XdhJwkTestGroupTypeXdhJwkComp XdhJwkTestGroupType = "XdhJwkComp"

var enumValues_XdhJwkTestGroupType = []interface{}{
	"XdhJwkComp",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhJwkTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhJwkTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhJwkTestGroupType, v)
	}
	*j = XdhJwkTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhJwkTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in XdhJwkTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in XdhJwkTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in XdhJwkTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in XdhJwkTestGroup: required")
	}
	type Plain XdhJwkTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhJwkTestGroup(plain)
	return nil
}

type XdhJwkTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the private key in jwk format
	Private JsonWebKey `json:"private"`

	// the public key in jwk format
	Public JsonWebKey `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the shared secret
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhJwkTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in XdhJwkTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in XdhJwkTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in XdhJwkTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in XdhJwkTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in XdhJwkTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in XdhJwkTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in XdhJwkTestVector: required")
	}
	type Plain XdhJwkTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhJwkTestVector(plain)
	return nil
}

type XdhPemCompSchemaV1Json struct {
	// the primitive tested in the test file
	Algorithm string `json:"algorithm"`

	// DEPRECATED: prefer "source" property in test group
	GeneratorVersion *string `json:"generatorVersion,omitempty,omitzero"`

	// additional documentation
	Header []string `json:"header"`

	// Notes corresponds to the JSON schema field "notes".
	Notes Notes `json:"notes"`

	// the number of test vectors in this test
	NumberOfTests int `json:"numberOfTests"`

	// Schema corresponds to the JSON schema field "schema".
	Schema XdhPemCompSchemaV1JsonSchema `json:"schema"`

	// TestGroups corresponds to the JSON schema field "testGroups".
	TestGroups []XdhPemTestGroup `json:"testGroups"`
}

type XdhPemCompSchemaV1JsonSchema string

const XdhPemCompSchemaV1JsonSchemaXdhPemCompSchemaV1Json XdhPemCompSchemaV1JsonSchema = "xdh_pem_comp_schema_v1.json"

var enumValues_XdhPemCompSchemaV1JsonSchema = []interface{}{
	"xdh_pem_comp_schema_v1.json",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhPemCompSchemaV1JsonSchema) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhPemCompSchemaV1JsonSchema {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhPemCompSchemaV1JsonSchema, v)
	}
	*j = XdhPemCompSchemaV1JsonSchema(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhPemCompSchemaV1Json) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["algorithm"]; raw != nil && !ok {
		return fmt.Errorf("field algorithm in XdhPemCompSchemaV1Json: required")
	}
	if _, ok := raw["header"]; raw != nil && !ok {
		return fmt.Errorf("field header in XdhPemCompSchemaV1Json: required")
	}
	if _, ok := raw["notes"]; raw != nil && !ok {
		return fmt.Errorf("field notes in XdhPemCompSchemaV1Json: required")
	}
	if _, ok := raw["numberOfTests"]; raw != nil && !ok {
		return fmt.Errorf("field numberOfTests in XdhPemCompSchemaV1Json: required")
	}
	if _, ok := raw["schema"]; raw != nil && !ok {
		return fmt.Errorf("field schema in XdhPemCompSchemaV1Json: required")
	}
	if _, ok := raw["testGroups"]; raw != nil && !ok {
		return fmt.Errorf("field testGroups in XdhPemCompSchemaV1Json: required")
	}
	type Plain XdhPemCompSchemaV1Json
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhPemCompSchemaV1Json(plain)
	return nil
}

type XdhPemTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []XdhPemTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type XdhPemTestGroupType `json:"type"`
}

type XdhPemTestGroupType string

const XdhPemTestGroupTypeXdhPemComp XdhPemTestGroupType = "XdhPemComp"

var enumValues_XdhPemTestGroupType = []interface{}{
	"XdhPemComp",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhPemTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhPemTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhPemTestGroupType, v)
	}
	*j = XdhPemTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhPemTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in XdhPemTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in XdhPemTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in XdhPemTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in XdhPemTestGroup: required")
	}
	type Plain XdhPemTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhPemTestGroup(plain)
	return nil
}

type XdhPemTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// a raw private key
	Private string `json:"private"`

	// PEM encoded public key
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the shared secret
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhPemTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in XdhPemTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in XdhPemTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in XdhPemTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in XdhPemTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in XdhPemTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in XdhPemTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in XdhPemTestVector: required")
	}
	type Plain XdhPemTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhPemTestVector(plain)
	return nil
}

type XdhTestGroup struct {
	// the name of the curve
	Curve string `json:"curve"`

	// Source corresponds to the JSON schema field "source".
	Source Source `json:"source"`

	// Tests corresponds to the JSON schema field "tests".
	Tests []XdhTestVector `json:"tests"`

	// Type corresponds to the JSON schema field "type".
	Type XdhTestGroupType `json:"type"`
}

type XdhTestGroupType string

const XdhTestGroupTypeXdhComp XdhTestGroupType = "XdhComp"

var enumValues_XdhTestGroupType = []interface{}{
	"XdhComp",
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhTestGroupType) UnmarshalJSON(value []byte) error {
	var v string
	if err := json.Unmarshal(value, &v); err != nil {
		return err
	}
	var ok bool
	for _, expected := range enumValues_XdhTestGroupType {
		if reflect.DeepEqual(v, expected) {
			ok = true
			break
		}
	}
	if !ok {
		return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_XdhTestGroupType, v)
	}
	*j = XdhTestGroupType(v)
	return nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhTestGroup) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["curve"]; raw != nil && !ok {
		return fmt.Errorf("field curve in XdhTestGroup: required")
	}
	if _, ok := raw["source"]; raw != nil && !ok {
		return fmt.Errorf("field source in XdhTestGroup: required")
	}
	if _, ok := raw["tests"]; raw != nil && !ok {
		return fmt.Errorf("field tests in XdhTestGroup: required")
	}
	if _, ok := raw["type"]; raw != nil && !ok {
		return fmt.Errorf("field type in XdhTestGroup: required")
	}
	type Plain XdhTestGroup
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhTestGroup(plain)
	return nil
}

type XdhTestVector struct {
	// A brief description of the test case
	Comment string `json:"comment"`

	// A list of flags
	Flags []string `json:"flags"`

	// the raw bytes of private key
	Private string `json:"private"`

	// the raw bytes of the public key
	Public string `json:"public"`

	// Result corresponds to the JSON schema field "result".
	Result Result `json:"result"`

	// the shared secret
	Shared string `json:"shared"`

	// Identifier of the test case
	TcId int `json:"tcId"`
}

// UnmarshalJSON implements json.Unmarshaler.
func (j *XdhTestVector) UnmarshalJSON(value []byte) error {
	var raw map[string]interface{}
	if err := json.Unmarshal(value, &raw); err != nil {
		return err
	}
	if _, ok := raw["comment"]; raw != nil && !ok {
		return fmt.Errorf("field comment in XdhTestVector: required")
	}
	if _, ok := raw["flags"]; raw != nil && !ok {
		return fmt.Errorf("field flags in XdhTestVector: required")
	}
	if _, ok := raw["private"]; raw != nil && !ok {
		return fmt.Errorf("field private in XdhTestVector: required")
	}
	if _, ok := raw["public"]; raw != nil && !ok {
		return fmt.Errorf("field public in XdhTestVector: required")
	}
	if _, ok := raw["result"]; raw != nil && !ok {
		return fmt.Errorf("field result in XdhTestVector: required")
	}
	if _, ok := raw["shared"]; raw != nil && !ok {
		return fmt.Errorf("field shared in XdhTestVector: required")
	}
	if _, ok := raw["tcId"]; raw != nil && !ok {
		return fmt.Errorf("field tcId in XdhTestVector: required")
	}
	type Plain XdhTestVector
	var plain Plain
	if err := json.Unmarshal(value, &plain); err != nil {
		return err
	}
	*j = XdhTestVector(plain)
	return nil
}
