main.com.appmattus.certificatetransparency.internal.utils.asn1.x509.Extensions.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of certificatetransparency Show documentation
Show all versions of certificatetransparency Show documentation
Certificate transparency for Android and Java
/*
* Copyright 2023 Appmattus Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.appmattus.certificatetransparency.internal.utils.asn1.x509
import com.appmattus.certificatetransparency.internal.utils.asn1.ASN1Logger
import com.appmattus.certificatetransparency.internal.utils.asn1.ASN1Object
import com.appmattus.certificatetransparency.internal.utils.asn1.ASN1Sequence
import com.appmattus.certificatetransparency.internal.utils.asn1.EmptyLogger
import com.appmattus.certificatetransparency.internal.utils.asn1.bytes.ByteBuffer
import com.appmattus.certificatetransparency.internal.utils.asn1.bytes.joinToByteBuffer
import com.appmattus.certificatetransparency.internal.utils.asn1.header.ASN1HeaderTag
import com.appmattus.certificatetransparency.internal.utils.asn1.header.TagClass
import com.appmattus.certificatetransparency.internal.utils.asn1.header.TagForm
import com.appmattus.certificatetransparency.internal.utils.asn1.toAsn1
internal class Extensions private constructor(
override val tag: ASN1HeaderTag,
override val encoded: ByteBuffer,
override val logger: ASN1Logger
) : ASN1Object() {
val values: List by lazy {
(encoded.toAsn1(logger) as ASN1Sequence).values.map {
Extension.create(
it as ASN1Sequence
)
}
}
override fun toString(): String {
val values = values
return values.joinToString(separator = "\n\n") { it.toString() }
}
companion object {
fun create(tag: ASN1HeaderTag, encoded: ByteBuffer, logger: ASN1Logger) = Extensions(tag, encoded, logger)
@Suppress("MagicNumber")
fun create(extensions: List, logger: ASN1Logger = EmptyLogger): Extensions {
val encoded = extensions.map { it.bytes }.joinToByteBuffer()
return Extensions(
tag = ASN1HeaderTag(TagClass.ContextSpecific, TagForm.Constructed, 0x03, 1),
encoded = ASN1Sequence(ASN1HeaderTag(TagClass.Universal, TagForm.Constructed, 0x10, 1), encoded, logger).bytes,
logger = logger
)
}
}
}