Skip to content
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
c59e915
PM-40520 - Add HighEntropySecret base64 wire helpers
JaredSnider-Bitwarden Jul 21, 2026
447cf66
PM-40520 - Add namespace variants for open-invite registration crossing
JaredSnider-Bitwarden Jul 21, 2026
b424f8f
PM-40520 - Add RegistrationClient seal/unseal for open-org-invite cro…
JaredSnider-Bitwarden Jul 21, 2026
99e1dc1
PM-40520 - Move open-org-invite WASM tests to auth-owned tests/regist…
JaredSnider-Bitwarden Jul 22, 2026
238e3bb
PM-40520 - Route tests/registration/** to team-auth-dev in CODEOWNERS
JaredSnider-Bitwarden Jul 22, 2026
e843bb4
PM-40520 - Align new WASM-facing types on camelCase serde
JaredSnider-Bitwarden Jul 22, 2026
8509fbe
PM-40520 - Enforce MIN_SECRET_LENGTH in HighEntropySecret::from_base64
JaredSnider-Bitwarden Jul 22, 2026
d539696
PM-40520 - Force CBOR bstr encoding for the two envelope bytes fields
JaredSnider-Bitwarden Jul 22, 2026
bd2af69
PM-40520 - Teach generate_versioned_sealable! optional visibility
JaredSnider-Bitwarden Jul 22, 2026
4545a48
PM-40520 - Restructure open-invite into module folder, drop macro change
JaredSnider-Bitwarden Jul 22, 2026
62e9925
PM-40520 - Trim internals from public rustdoc on open-invite types
JaredSnider-Bitwarden Jul 22, 2026
f93070a
PM-40520 - Inline seal/unseal bodies into their impl methods
JaredSnider-Bitwarden Jul 22, 2026
4ee3240
PM-40520 - Correct open-org-invite module doc to match app flow
JaredSnider-Bitwarden Jul 22, 2026
ba652a2
PM-40520 - HighEntropySecret uses the DataEnvelope trait pattern
JaredSnider-Bitwarden Jul 22, 2026
8314bc9
PM-40520 - Strongly type SealedOpenOrgInvite fields
JaredSnider-Bitwarden Jul 22, 2026
5874d84
PM-40520 - Extract OPEN_ORG_INVITE_SECRET_SIZE_BYTES const
JaredSnider-Bitwarden Jul 22, 2026
3e556bb
PM-40520 - Add public-API integration tests + pinned wire vector
JaredSnider-Bitwarden Jul 22, 2026
a8b6c65
PM-40520 - Small doc + TS-type touch-ups from PR review
JaredSnider-Bitwarden Jul 22, 2026
8f2f989
PM-40520 - Scope unseal doc to post-parse failures
JaredSnider-Bitwarden Jul 23, 2026
3ba969f
PM-40520 - Rename wire_v1 to data_v1 and clarify layer docs
JaredSnider-Bitwarden Jul 23, 2026
9d2a514
PM-40520 - Rename SealedEnvelopePair to SealedOpenOrgInviteData
JaredSnider-Bitwarden Jul 23, 2026
60054b9
PM-40520 - Fill test gaps for HighEntropySecret serde + key-envelope …
JaredSnider-Bitwarden Jul 23, 2026
791d079
Merge branch 'main' into auth/pm-40520/registration-open-org-invite-s…
JaredSnider-Bitwarden Jul 23, 2026
2fd721f
PM-40520 - Rename OpenOrgInviteSealRequest to OpenOrgInvite
JaredSnider-Bitwarden Jul 23, 2026
29f5a0f
PM-40520 - Fully-qualify cross-crate intra-doc links
JaredSnider-Bitwarden Jul 23, 2026
86e80b3
PM-40520 - Adjust SecretProtectedKeyEnvelopeNamespace per feedback
JaredSnider-Bitwarden Jul 24, 2026
3ccff9e
PM-40520 - remove overdocumented comments
JaredSnider-Bitwarden Jul 24, 2026
ba7fbd5
PM-40520 - Rename invite_key to invite_secret
JaredSnider-Bitwarden Jul 24, 2026
21a1c26
PM-40520 - Adjust OPEN_ORG_INVITE_SECRET_SIZE_BYTES comment to be sho…
JaredSnider-Bitwarden Jul 24, 2026
44f21d7
PM-40520 - fix OpenOrgInvite docs
JaredSnider-Bitwarden Jul 24, 2026
9ed4201
PM-40520 - Remove low level comment paragraph per PR feedback
JaredSnider-Bitwarden Jul 24, 2026
ff72d85
PM-40520 - Trim wordy comments in seal, unseal, and integration tests
JaredSnider-Bitwarden Jul 24, 2026
af343e3
Merge remote-tracking branch 'origin/main' into auth/pm-40520/registr…
JaredSnider-Bitwarden Jul 24, 2026
e7a936f
PM-40520 - Rename inviteKey to inviteSecret in integration test + fix…
JaredSnider-Bitwarden Jul 24, 2026
a40ca8b
PM-40520 - Move seal/unseal logic onto SealedOpenOrgInviteData
JaredSnider-Bitwarden Jul 27, 2026
68a3357
PM-40520 - Trim SealedOpenOrgInviteDataWire doc, move serde_bytes rat…
JaredSnider-Bitwarden Jul 27, 2026
5c5deb7
PM-40520 - Define CBOR and WASM ABI inline in serialization module doc
JaredSnider-Bitwarden Jul 27, 2026
b45ac31
PM-40520 - Update stale SealedEnvelopePair reference in error message
JaredSnider-Bitwarden Jul 27, 2026
8518461
Merge remote-tracking branch 'origin/main' into auth/pm-40520/registr…
JaredSnider-Bitwarden Jul 28, 2026
abc1810
PM-40520 - Restore .github/CODEOWNERS after merge resolution ran it t…
JaredSnider-Bitwarden Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ crates/bitwarden-vault/** @bitwarden/team-vault-dev

# Team-owned folders in other crates (to be avoided if possible)
crates/bitwarden-wasm-internal/integration-tests/tests/invite/** @bitwarden/team-admin-console-dev
crates/bitwarden-wasm-internal/integration-tests/tests/registration/** @bitwarden/team-auth-dev
crates/bitwarden-wasm-internal/integration-tests/tests/unlock/** @bitwarden/team-key-management-dev
crates/bitwarden-wasm-internal/src/pure_crypto.rs @bitwarden/team-key-management-dev
crates/bitwarden-core/src/key_management/** @bitwarden/team-key-management-dev @bitwarden/team-platform-dev
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 4 additions & 7 deletions crates/bitwarden-auth/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,9 @@ wasm = [
"dep:tsify",
"dep:wasm-bindgen",
"dep:wasm-bindgen-futures",
] # WASM support
uniffi = [
"bitwarden-core/uniffi",
"bitwarden-policies/uniffi",
"dep:uniffi",
] # Uniffi bindings
secrets = ["bitwarden-core/secrets"] # Secrets Manager support
]
uniffi = ["bitwarden-core/uniffi", "bitwarden-policies/uniffi", "dep:uniffi"]
secrets = ["bitwarden-core/secrets"]

# Note: dependencies must be alphabetized to pass the cargo sort check in the CI pipeline.
[dependencies]
Expand All @@ -43,6 +39,7 @@ bitwarden-error = { workspace = true }
bitwarden-policies = { workspace = true }
bitwarden-state = { workspace = true }
chrono = { workspace = true }
ciborium = { workspace = true }
http = { workspace = true }
reqwest = { workspace = true }
reqwest-middleware = { workspace = true }
Expand Down
4 changes: 4 additions & 0 deletions crates/bitwarden-auth/src/registration/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
//! mechanisms to establish their cryptographic state and register with
//! the Bitwarden server

mod open_org_invite;
mod post_keys_for_jit_password_registration;
mod post_keys_for_key_connector_registration;
mod post_keys_for_tde_registration;
mod post_keys_for_user_password_registration;
mod registration_client;

pub use open_org_invite::{
OpenOrgInvite, SealedOpenOrgInvite, SealedOpenOrgInviteData, SealedOpenOrgInviteDataError,
};
pub use post_keys_for_jit_password_registration::{
JitMasterPasswordRegistrationRequest, JitMasterPasswordRegistrationResponse,
};
Expand Down
22 changes: 22 additions & 0 deletions crates/bitwarden-auth/src/registration/open_org_invite/data_v1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//! Version 1 of the open-org-invite plaintext payload β€” the innermost thing sealed by the
//! [`bitwarden_crypto::safe::DataEnvelope`] in [`super::seal`]. Not to be confused with the sealed
//! opaque blob ([`super::SealedOpenOrgInviteData`]) or the outbound JSON
//! ([`super::SealedOpenOrgInvite`]); this file describes only the cleartext shape that gets
//! CBOR-encoded and encrypted.
//!
//! Once this shape ships it cannot be broken: any field change means adding a new `V2` struct
//! and registering both variants on the versioned enum in [`super`], so old sealed payloads
//! still unseal.

use bitwarden_crypto::safe::SealableData;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub(super) struct RegistrationOpenOrgInviteDataV1 {
pub(super) organization_id: String,
pub(super) invite_link_code: String,
pub(super) invite_secret: String,
}

impl SealableData for RegistrationOpenOrgInviteDataV1 {}
26 changes: 26 additions & 0 deletions crates/bitwarden-auth/src/registration/open_org_invite/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//! Open-organization-invite registration crossing.
//!
//! The app seals an invite context on registration-start submit and unseals it on the accept
//! open-org-invite component after a successful registration-finish. This module owns the
//! versioned plaintext payload (`data_v1`), the seal path (`seal`), and the unseal path
//! (`unseal`).

mod data_v1;
mod seal;
mod unseal;

use bitwarden_crypto::{
generate_versioned_sealable,
safe::{DataEnvelopeNamespace, SealableData, SealableVersionedData},
};
use data_v1::RegistrationOpenOrgInviteDataV1;
pub use seal::{
OpenOrgInvite, SealedOpenOrgInvite, SealedOpenOrgInviteData, SealedOpenOrgInviteDataError,
};
use serde::{Deserialize, Serialize};

generate_versioned_sealable!(
RegistrationOpenOrgInviteData,
DataEnvelopeNamespace::RegistrationOpenOrgInviteData,
[RegistrationOpenOrgInviteDataV1 => "1"]
);
Loading
Loading