Add config struct for AKD config

This commit is contained in:
Matt Gibson 2025-12-09 11:17:47 -08:00
parent 72fd4956ba
commit 895e720e58
No known key found for this signature in database
5 changed files with 69 additions and 11 deletions

33
.vscode/tasks.json vendored
View File

@ -89,6 +89,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -102,6 +105,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -115,6 +121,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -128,6 +137,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -141,6 +153,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -154,6 +169,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -167,6 +185,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
}, },
{ {
@ -180,6 +201,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile", "problemMatcher": "$msCompile",
"group": { "group": {
"kind": "build", "kind": "build",
@ -197,6 +221,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile", "problemMatcher": "$msCompile",
"group": { "group": {
"kind": "build", "kind": "build",
@ -214,6 +241,9 @@
"/property:GenerateFullPaths=true", "/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary" "/consoleloggerparameters:NoSummary"
], ],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": "$msCompile", "problemMatcher": "$msCompile",
"group": { "group": {
"kind": "build", "kind": "build",
@ -224,6 +254,9 @@
"label": "test", "label": "test",
"type": "shell", "type": "shell",
"command": "dotnet test", "command": "dotnet test",
"options": {
"cwd": "${workspaceFolder}"
},
"group": { "group": {
"kind": "test", "kind": "test",
"isDefault": true "isDefault": true

3
akd/Cargo.lock generated
View File

@ -418,6 +418,8 @@ version = "0.1.0"
dependencies = [ dependencies = [
"akd", "akd",
"blake3", "blake3",
"config",
"serde",
"uuid", "uuid",
] ]
@ -2635,6 +2637,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
dependencies = [ dependencies = [
"js-sys", "js-sys",
"serde",
"wasm-bindgen", "wasm-bindgen",
] ]

View File

@ -7,9 +7,15 @@ license-file.workspace = true
keywords.workspace = true keywords.workspace = true
[dependencies] [dependencies]
akd = { workspace = true } akd.workspace = true
blake3 = "1.8.2" blake3 = "1.8.2"
uuid = "1.18.1" config = { workspace = true, optional = true }
serde = { workspace = true, optional = true }
uuid = { version = "1.18.1", features = ["serde"] }
[lints] [lints]
workspace = true workspace = true
[features]
config = ["dep:config", "dep:serde"]
default = ["config"]

View File

@ -0,0 +1,19 @@
use serde::{Deserialize, Serialize};
use crate::INSTALLATION_CONTEXT;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct BitwardenAkdConfiguration {
pub installation_id: uuid::Uuid,
}
impl BitwardenAkdConfiguration {
/// Initialize the global installation context for Bitwarden AKD.
/// Must be called once before any use.
///
/// # Errors
/// Returns an error like [`OnceLock<Vec<u8>>`](std::sync::OnceLock) if called more than once.
pub fn init(&self) -> Result<(), Vec<u8>> {
INSTALLATION_CONTEXT.set(self.installation_id.into_bytes().into())
}
}

View File

@ -29,13 +29,14 @@
//! Define the Bitwarden V1 configuration //! Define the Bitwarden V1 configuration
#[cfg(feature = "config")]
pub mod config;
use akd::configuration::Configuration; use akd::configuration::Configuration;
use akd::hash::{Digest, DIGEST_BYTES}; use akd::hash::{Digest, DIGEST_BYTES};
use akd::{ use akd::{AkdLabel, AkdValue, AzksValue, AzksValueWithEpoch, NodeLabel, VersionFreshness};
AkdLabel, AkdValue, AzksValue, AzksValueWithEpoch, NodeLabel, VersionFreshness,
};
use uuid::Uuid;
use std::sync::OnceLock; use std::sync::OnceLock;
use uuid::Uuid;
/// Bitwarden installation ID for instance separation /// Bitwarden installation ID for instance separation
static INSTALLATION_CONTEXT: OnceLock<Vec<u8>> = OnceLock::new(); static INSTALLATION_CONTEXT: OnceLock<Vec<u8>> = OnceLock::new();
@ -99,11 +100,7 @@ impl Configuration for BitwardenV1Configuration {
AzksValue([0u8; 32]) AzksValue([0u8; 32])
} }
fn hash_leaf_with_value( fn hash_leaf_with_value(value: &akd::AkdValue, epoch: u64, nonce: &[u8]) -> AzksValueWithEpoch {
value: &akd::AkdValue,
epoch: u64,
nonce: &[u8],
) -> AzksValueWithEpoch {
let commitment = Self::generate_commitment_from_nonce_client(value, nonce); let commitment = Self::generate_commitment_from_nonce_client(value, nonce);
Self::hash_leaf_with_commitment(commitment, epoch) Self::hash_leaf_with_commitment(commitment, epoch)
} }