-
Notifications
You must be signed in to change notification settings - Fork 0
Managing containers (libdigidoc lib)
Boriss Melikjan edited this page Sep 9, 2025
·
1 revision
High-level support for signing and parsing containers.
SignedContainer is an immutable class so all modifier methods return a new instance.
@Inject
lateinit var librarySetup: LibrarySetup
override fun onCreate(savedInstanceState: Bundle?) {
super<ComponentActivity>.onCreate(savedInstanceState)
lifecycleScope.launch {
LoggingUtil.initialize(
applicationContext,
Logger.getLogger(MainActivity::class.java.name),
isLoggingEnabled,
)
fileTypeSetup.initializeApplicationFileTypesAssociation(componentClassName)
librarySetup.setupLibraries(applicationContext, isLoggingEnabled)
}
}val containerFile = File("path-to-container.asice")
val dataFiles: List<File> = listOf(...)
val container = SignedContainer.openOrCreate(
context,
containerFile,
dataFiles,
isSivaConfirmed,
forceFirstDataFileContainer,
)val containerFile = File("path-to-container.asice")
val dataFiles: List<File> = listOf(containerFile)
val container = SignedContainer.openOrCreate(
context,
containerFile,
dataFiles,
isSivaConfirmed,
forceFirstDataFileContainer,
)val container: SignedContainer =
// returns all data files in the container
val dataFiles = container.getDataFiles()
// check whether container is signed (has any signature)
val isSigned = container.isSigned()
// check whether container is legacy
val isLegacy = container.isLegacy()
// extract data file from the container to a File
val dataFileInterface: DataFileInterface = ...
val dataFileDirectory = File("path/to/data-files/")
val dataFile = container.getDataFile(dataFileInterface, dataFileDirectory)
// add data files to the container
val newDataFiles: List<File> = listOf(...)
val newContainer = SignedContainer.addDataFiles(
context = context,
signedContainer = container,
dataFiles = newDataFiles)
// remove data file from the container
val dataFileInterface: DataFileInterface = ...
val container = container.removeDataFile(dataFileInterface)val container: SignedContainer = ...
// returns all signatures in the container
val signatures = container.getSignatures()
// remove signature from container
val signatureInterface: SignatureInterface = ...
val container = container.removeSignature(signatureInterface)
// add signature by signing it with signing certificate
val container: SignedContainer = ...
val smartToken = Token.create(...)
val signerCert = smartToken.certificate(CertificateType.SIGNING)
val signer = ExternalSigner(signerCert)
signer.setProfile(SIGNATURE_PROFILE_TS)
val dataToSignBytes =
containerWrapper.prepareSignature(signer, container, signerCert, roleData)
val signatureArray =
card.calculateSignature(pin2Code, dataToSignBytes, true)
containerWrapper.finalizeSignature(
signer,
container,
signatureArray,
)// check whether a file can be opened as a container or could only be added to containers
val file = File("file-to-check.asice")
val isContainer = file.isContainer(context)
// check whether a container is considered legacy and needs to be nested inside a new container to add signatures
val container: SignedContainer = ...
val isLegacy = container.isLegacy()