Test ran at 2025-07-17 12:30:03.806360+00:00 SOLUTION: keystoreada=1.4.2: Ada Keystore Origin: commit 849b47b9db6cd8e99dca9a77b846baedd81bb2d0 from https://gitlab.com/stcarrez/ada-keystore.git Properties: Author: Stephane.Carrez@gmail.com Configuration: no modifiers Description: Ada Keystore GPR Scenario: KEYSTORE_BUILD := distrib | debug | optimize | profile | coverage GPR Scenario: KEYSTORE_LIBRARY_TYPE := relocatable | static | static-pic License: Apache-2.0 Long_Description: [![Build Status](https://img.shields.io/endpoint?url=https://porion.vacs.fr/porion/api/v1/projects/ada-keystore/badges/build.json)](https://porion.vacs.fr/porion/projects/view/ada-keystore/summary) [![Test Status](https://img.shields.io/endpoint?url=https://porion.vacs.fr/porion/api/v1/projects/ada-keystore/badges/tests.json)](https://porion.vacs.fr/porion/projects/view/ada-keystore/xunits) [![Coverage](https://img.shields.io/endpoint?url=https://porion.vacs.fr/porion/api/v1/projects/ada-keystore/badges/coverage.json)](https://porion.vacs.fr/porion/projects/view/ada-keystore/summary) # Overview Ada Keystore is a tool and library to store information in secure wallets and protect the stored information by encrypting the content. It is necessary to know one of the wallet password to access its content. Ada Keystore can be used to safely store passwords, credentials, bank accounts and even documents. Wallets are protected by a master key using AES-256 and the wallet master key is protected by a user password. The wallet defines up to 7 slots that identify a password key that is able to unlock the master key. To open a wallet, it is necessary to unlock one of these 7 slots by providing the correct password. Wallet key slots are protected by the user's password and the PBKDF2-HMAC-256 algorithm, a random salt, a random counter and they are encrypted using AES-256. Values stored in the wallet are protected by their own encryption keys using AES-256. A wallet can contain another wallet which is then protected by its own encryption keys and passwords (with 7 independent slots). Because the child wallet has its own master key, it is necessary to known the primary password and the child password to unlock the parent wallet first and then the child wallet. ## Documents * [Ada Keystore Guide](https://ada-keystore.readthedocs.io/en/latest/) [PDF](https://github.com/stcarrez/ada-keystore/blob/master/docs/keystore-book.pdf) Maintainer: Stephane.Carrez@gmail.com Maintainers_Logins: stcarrez Name: keystoreada Project_File: keystoreada.gpr Tag: security Tag: storage Tag: nosql Version: 1.4.2 Website: https://gitlab.com/stcarrez/ada-keystore Dependencies (direct): utilada^2.8.0 Dependencies (solution): utilada=2.8.1 Dependencies (graph): keystoreada=1.4.2 --> utilada=2.8.1 (^2.8.0) LOG: [alr test] Testing keystoreada=1.4.2 [alr test] Spawning retrieval for remote crate: alr -d -n get keystoreada=1.4.2 Note: Deploying keystoreada=1.4.2... Note: Deploying utilada=2.8.1... keystoreada=1.4.2 successfully retrieved. Dependencies were solved as follows: + utilada 2.8.1 (new) [alr test] Spawning default test for remote crate: alr -d -n build --release -- -cargs:Ada -gnatwn Note: Building keystoreada=1.4.2/keystoreada.gpr... Setup [mkdir] object directory for project UtilAda_Core [mkdir] library directory for project UtilAda_Core [mkdir] object directory for project UtilAda_Sys [mkdir] library directory for project UtilAda_Sys [mkdir] object directory for project KeystoreAda [mkdir] library directory for project KeystoreAda Compile [Ada] util-systems-types.ads [Ada] util-systems-constants.ads [Ada] util-systems-io.adb [Ada] util-systems-os.ads [Ada] util-properties-basic.adb [Ada] util-properties-discrete.adb [Ada] util-properties.adb [Ada] util-properties-bundles.adb [Ada] util-log-locations.adb [Ada] util-log-formatters.adb [Ada] util-log-formatters-factories.adb [Ada] util-log-appenders-rolling_files.adb [Ada] util-log-appenders-files.adb [Ada] util-log-appenders-consoles.adb [Ada] util-log-appenders-formatter.adb [Ada] util-log-loggers.adb [Ada] util-log-appenders-factories.adb [Ada] util-log.adb [Ada] util-log-appenders.adb [Ada] util-files-rolling.adb [Ada] util-files-filters.adb [Ada] util-files-walk.adb [Ada] util-files.adb [Ada] util-events-channels.adb [Ada] util-events-timers.adb [Ada] util-events.adb [Ada] util-dates-formats.adb [Ada] util-dates-rfc7231.adb [Ada] util-dates-simple_format.adb [Ada] util-dates-iso8601.adb [Ada] util-dates.adb [Ada] util-commands-parsers.adb [Ada] util-commands.adb [Ada] util-commands-text_io.ads [Ada] util-commands-consoles.adb [Ada] util-commands-parsers-gnat_parser.adb [Ada] util-commands-raw_io.ads [Ada] util-commands-consoles-text.adb [Ada] util-commands-drivers.adb [Ada] util-beans-objects-maps.adb [Ada] util-beans-objects.adb [Ada] util-beans-objects-pairs.adb [Ada] util-beans-objects-records.adb [Ada] util-beans-basic-ranges.adb [Ada] util-beans.ads [Ada] util-beans-objects-to_access.adb [Ada] util-beans-ranges.ads [Ada] util-beans-objects-lists.adb [Ada] util-beans-objects-iterators.adb [Ada] util-beans-basic-lists.adb [Ada] util-beans-factory.adb [Ada] util-beans-objects-enums.adb [Ada] util-beans-basic.ads [Ada] util-beans-objects-datasets.adb [Ada] util-beans-methods.ads [Ada] util-beans-lists-strings.adb [Ada] util-beans-objects-time.adb [Ada] util-beans-lists.ads [Ada] util-beans-objects-vectors.adb [Ada] util-beans-objects-hash.adb [Ada] util-systems.ads [Ada] util-texts-transforms.adb [Ada] util-texts-formats.adb [Ada] util-texts.ads [Ada] util-texts-builders.adb [Ada] util-texts-tokenizers.adb [Ada] util-strings-sets.ads [Ada] util-strings-tokenizers.ads [Ada] util-strings.adb [Ada] util-strings-transforms.adb [Ada] util-strings-formats.adb [Ada] util-strings-builders.ads [Ada] util-strings-maps_incensitive.ads [Ada] util-strings-builders-transforms.ads [Ada] util-strings-vectors.ads [Ada] util-strings-maps.ads [Ada] util-listeners.ads [Ada] util-listeners-observers.adb [Ada] util-listeners-lifecycles.adb [Ada] util-concurrent-counters.adb [Ada] util-concurrent-locks.adb [Ada] util-concurrent-sequence_queues.adb [Ada] util-concurrent-copies.adb [Ada] util-concurrent-arrays.adb [Ada] util-concurrent-pools.adb [Ada] util-concurrent-fifos.adb [Ada] util-concurrent.ads [Ada] util-nullables.ads [Ada] util.ads [Ada] util-named_lists.adb [Ada] util-algorithms.ads [Ada] util-stacks.adb [Ada] util-executors.adb [Ada] util-blobs.adb [Ada] util-refs.adb [Ada] util-locales.adb [Ada] util-streams-raw.adb [Ada] util-systems-dlls.adb [Ada] util-processes-os.adb [Ada] util-processes.adb [Ada] util-processes-tools.adb [Ada] util-http-tools.adb [Ada] util-http-headers.adb [Ada] util-http-mimes.adb [Ada] util-mail.adb [Ada] util-http-cookies.adb [Ada] util-http.adb [Ada] util-http-mockups.adb [Ada] util-http-clients-mockups.adb [Ada] util-http-rest-rest_get_vector.adb [Ada] util-http-rest.adb [Ada] util-http-parts.adb [Ada] util-http-clients.adb [Ada] util-encoders-base16.adb [Ada] util-encoders-hmac-sha1.adb [Ada] util-encoders.adb [Ada] util-encoders-uri.adb [Ada] util-encoders-base64.adb [Ada] util-encoders-hmac-sha256.adb [Ada] util-encoders-quoted_printable.adb [Ada] util-encoders-hmac.ads [Ada] util-encoders-kdf-pbkdf2.adb [Ada] util-encoders-aes.adb [Ada] util-encoders-sha1.adb [Ada] util-encoders-kdf.ads [Ada] util-encoders-kdf-pbkdf2_hmac_sha256.ads [Ada] util-encoders-base32.adb [Ada] util-encoders-ecc.adb [Ada] util-encoders-hmac-hotp.adb [Ada] util-encoders-sha256.adb [Ada] util-measures.adb [Ada] util-streams-aes.adb [Ada] util-streams-texts.adb [Ada] util-streams-buffered.adb [Ada] util-streams-base64.ads [Ada] util-streams-buffered-encoders.adb [Ada] util-streams-sockets.adb [Ada] util-streams-base16.ads [Ada] util-streams-texts-tr.ads [Ada] util-streams-buffered-parts.adb [Ada] util-streams-files.adb [Ada] util-streams-texts-wtr.ads [Ada] util-streams-pipes.adb [Ada] util-streams.adb [Ada] util-properties-json.adb [Ada] util-serialize-io-form.adb [Ada] util-serialize-io.adb [Ada] util-serialize-contexts.adb [Ada] util-serialize-mappers-record_mapper.adb [Ada] util-serialize-tools.adb [Ada] util-serialize-io-csv.adb [Ada] util-beans-objects-readers.adb [Ada] util-serialize-mappers-vector_mapper.adb [Ada] util-serialize-mappers.adb [Ada] util-serialize.ads [Ada] util-properties-form.adb [Ada] util-serialize-io-json.adb [Ada] keystore-repository-data.adb [Ada] keystore-io-refs.adb [Ada] keystore-io.adb [Ada] keystore-properties.adb [Ada] keystore-passwords-input.adb [Ada] keystore-tools.adb [Ada] keystore-io-files.adb [Ada] keystore-passwords-keys.adb [Ada] keystore-files.adb [Ada] keystore-passwords-cmds.adb [Ada] keystore-buffers.adb [Ada] keystore-io-headers.adb [Ada] keystore-passwords.adb [Ada] keystore-keys.adb [Ada] keystore-repository.adb [Ada] keystore-repository-workers.adb [Ada] keystore-repository-keys.adb [Ada] keystore-marshallers.adb [Ada] keystore-gpg.adb [Ada] keystore-random.adb [Ada] keystore.adb [Ada] keystore-passwords-files.adb [Ada] keystore-passwords-gpg.adb [Ada] keystore-passwords-unsafe.adb [Ada] keystore-repository-entries.adb [Ada] keystore-logs.adb [Ada] keystore-containers.adb Build Libraries [gprlib] utilada_core.lexch [gprlib] utilada_base.lexch [archive] libutilada_core.a [index] libutilada_core.a [gprlib] utilada_sys.lexch [archive] libutilada_base.a [index] libutilada_base.a [gprlib] keystoreada.lexch [archive] libutilada_sys.a [index] libutilada_sys.a [archive] libkeystoreada.a [index] libkeystoreada.a Success: Build finished successfully in 20.44 seconds. Found declared GPR file: keystoreada.gpr [alr test] Test completed SUCCESSFULLY