package asn1obj

import (
	"encoding/asn1"
	"math/big"
)

// Integer returns an ASN.1 OBJECT IDENTIFIER with the oidValue bytes
func Integer(bigInt *big.Int) []byte {
	// should never error
	asn1result, err := asn1.Marshal(bigInt)
	if err != nil {
		panic(err)
	}

	return asn1result
}

// IntegerExplicitValue returns bigInt encoded as an Integer, however
// instead of tagging it with Integer it is instead tagged with an
// explicit tag of the specified tag number
func IntegerExplicitValue(explicitTagNumber int, bigInt *big.Int) []byte {
	intBytes := Integer(bigInt)

	asn1Obj := asn1.RawValue{}
	rest, err := asn1.Unmarshal(intBytes, &asn1Obj)
	if err != nil {
		panic(err)
	} else if len(rest) > 0 {
		panic("invalid extra data")
	}

	return ExplicitValue(explicitTagNumber, asn1Obj.Bytes)
}