Skip to content

Crypto actions

Boriss Melikjan edited this page Apr 6, 2026 · 1 revision

Searching addressees from LDAP

Before you can encrypt data files, you need to get auth certificate. For that use search method from CryptoLib OpenLdap class:

/// @mockable
@MainActor func search(identityCode: String) async -> (
    addressees: [Addressee],
    tooManyResults: Bool
)
let result = await openLdap.search(identityCode: searchText)
if result.tooManyResults {
    recipients = []
    errorMessage = "Too many results"
} else {
    recipients = result.addressees
}

Encrypting files

To encrypt files, use encrypt method of CryptoLib CryptoContainer class:

@MainActor
public static func encrypt(
    containerFile: URL,
    dataFiles: [URL],
    recipients: [Addressee]
) async throws -> CryptoContainerProtocol 
let encryptedContainer = try await CryptoContainer.encrypt(
    containerFile: containerFile,
    dataFiles: dataFiles,
    recipients: recipients
)
try await Encrypt.encryptFile(
    containerFile.resolvedPath,
    withDataFiles: cryptoDataFiles,
    withAddressees: recipients
)

Created container is in CDOC or CDOC2 format.

Parsing Cdoc and getting information about container

To get info about CDOC or CDOC2 container, use open method of CryptoLib CryptoContainer class:

static func open(containerFile: URL) async throws -> CryptoContainerProtocol
return try await open(containerFile: firstFile)
guard let cdocInfo = try Decrypt.cdocInfo(renamedContainerFile.resolvedPath) as? CdocInfo else {
    throw ...
}

Decrypting container

To decrypt CDOC or CDOC2 container, use open method of CryptoLib CryptoContainer class:

@MainActor
public static func decrypt(
    containerFile: URL,
    recipients: [Addressee],
    cert: Data,
    cardCommands: CardCommands,
    pin: SecureData,
    fileManager: FileManagerProtocol = Container.shared.fileManager()
) async throws -> CryptoContainerProtocol
let returnData = try await CryptoContainer.decrypt(
    containerFile: containerFile,
    recipients: recipients,
    cert: cert,
    cardCommands: cardCommands,
    pin: pin1Number,
)
let decryptedData =
try await Decrypt.decryptFile(
    containerFile.resolvedPath,
    withCert: cert,
    withToken: SmartToken(card: cardCommands, pin1: pin)
)

Clone this wiki locally