package asn1obj

import "encoding/asn1"

// ExplicitCompound wraps another ASN.1 Object(s) with the EXPLICIT wrapper using
// the tag number specified
func ExplicitCompound(explicitTagNumber int, wrappedElements [][]byte) []byte {
	val := []byte{}
	for i := range wrappedElements {
		val = append(val, wrappedElements[i]...)
	}

	raw := asn1.RawValue{
		Class:      asn1.ClassContextSpecific,
		Tag:        explicitTagNumber,
		IsCompound: true,
		Bytes:      val,
	}

	// should never error
	asn1result, err := asn1.Marshal(raw)
	if err != nil {
		panic(err)
	}

	return asn1result
}

// ExplicitValue creates an EXPLICIT Object with a byte data value (i.e. it
// is NOT compound) using the tag number specified
func ExplicitValue(explicitTagNumber int, val []byte) []byte {
	raw := asn1.RawValue{
		Class:      asn1.ClassContextSpecific,
		Tag:        explicitTagNumber,
		IsCompound: false,
		Bytes:      val,
	}

	// should never error
	asn1result, err := asn1.Marshal(raw)
	if err != nil {
		panic(err)
	}

	return asn1result
}