feat: gen-cli generates device-bundle on-demand with tests and refactoring#132
feat: gen-cli generates device-bundle on-demand with tests and refactoring#132
Conversation
a6dab1e to
19b3c59
Compare
580c1b9 to
25545cb
Compare
| assert_eq!(revocation_pub_key, revocation_pub_key); | ||
| assert_eq!(holoport_id, holoport_id); | ||
| assert_eq!(registration_code, registration_code); |
There was a problem hiding this comment.
these assertions don't give any signal as the identical binding is passed twice.
the other assertions are also questionable. in the file where i moved these tests to i added a comment as a reminder to double-check these.
| async fn convert_v3_to_v2() { | ||
| let (config, _) = generate_test_hpos_config().await.unwrap(); | ||
|
|
||
| // ensure we start with a v3 config |
There was a problem hiding this comment.
this could be ensured via a matching let binding instead of an identical conversion
25545cb to
f3b8730
Compare
3d0b535 to
b82bebd
Compare
steveej
left a comment
There was a problem hiding this comment.
some remaining questions and needs a cleanup before it can be merged
core/src/utils.rs
Outdated
| pub async fn get_seed_from_locked_device_bundle( | ||
| locked_device_bundle: &[u8], | ||
| passphrase: &str, | ||
| ) -> Result<Seed, failure::Error> { | ||
| let passphrase = sodoken::BufRead::from(passphrase.as_bytes()); | ||
| let unlocked_bundle = | ||
| match hc_seed_bundle::UnlockedSeedBundle::from_locked(locked_device_bundle) | ||
| .await? | ||
| .remove(0) | ||
| { | ||
| hc_seed_bundle::LockedSeedCipher::PwHash(cipher) => cipher.unlock(passphrase).await, | ||
| oth => bail!("unexpected cipher: {:?}", oth), | ||
| }?; | ||
|
|
||
| let seed = get_seed_from_bundle(&unlocked_bundle)?; | ||
|
|
||
| Ok(seed) | ||
| } | ||
|
|
||
| /// unlock seed_bundles to access the pub-key and seed | ||
| pub async fn unlock(device_bundle: &str, passphrase: &str) -> SeedExplorerResult<SigningKey> { | ||
| if device_bundle.is_empty() { | ||
| return Err(SeedExplorerError::Generic( | ||
| "called with device_bundle".into(), | ||
| )); | ||
| } | ||
|
|
||
| let cipher = base64::decode_config(device_bundle, base64::URL_SAFE_NO_PAD)?; | ||
| match UnlockedSeedBundle::from_locked(&cipher).await?.remove(0) { | ||
| LockedSeedCipher::PwHash(cipher) => { | ||
| let passphrase = sodoken::BufRead::from(passphrase.as_bytes().to_vec()); | ||
| let seed = cipher.unlock(passphrase).await?; | ||
|
|
||
| let seed_bytes: [u8; 32] = match (&*seed.get_seed().read_lock())[0..32].try_into() { | ||
| Ok(b) => b, | ||
| Err(_) => { | ||
| return Err(SeedExplorerError::Generic( | ||
| "Seed buffer is not 32 bytes long".into(), | ||
| )) | ||
| } | ||
| }; | ||
|
|
||
| Ok(SigningKey::from_bytes(&seed_bytes)) | ||
| } | ||
| _ => Err(SeedExplorerError::UnsupportedCipher), | ||
| } | ||
| } |
There was a problem hiding this comment.
AFAIU these two are almost equivalent with two exceptions
- different return type
unlockassumes a base64 encoded bundle
| // TODO: what should this be? | ||
| pub const DEFAULT_DERIVATION_PATH_V3: u32 = 3; | ||
|
|
||
| pub fn get_seed_from_bundle(device_bundle: &UnlockedSeedBundle) -> Result<Seed, failure::Error> { |
There was a problem hiding this comment.
i think there's no use-case for this considering fn unlock also gets the seed from the locked bundle
…-cli this works for v2 configs for now as that's what is still used on holoports as of now. even though that's about to change in the short-term, it might come in handy to generate v2 configs to test the tranisitioning to v3 configs.
9facd79 to
a9cba70
Compare
| ConfigDiscriminants::V1 => 2, | ||
| ConfigDiscriminants::V2 => 2, | ||
| ConfigDiscriminants::V3 => 2, |
There was a problem hiding this comment.
e4608eb to
cf296c6
Compare
includes #133