Add full XCA curve and digest parity
This commit is contained in:
@@ -4,13 +4,18 @@ use sycamore::prelude::*;
|
||||
use wasm_bindgen_futures::spawn_local;
|
||||
|
||||
use crate::api;
|
||||
use crate::components::crypto::{
|
||||
add_key_parameters, apply_signature_hash, key_parameter_input, key_type_select,
|
||||
signature_hash_input,
|
||||
};
|
||||
use crate::components::nav::{app_nav, whoami};
|
||||
use crate::components::ui::{page_header, toast_error};
|
||||
use crate::model::{KeySummary, Me};
|
||||
use crate::model::{KeySummary, Me, OptionsPage};
|
||||
|
||||
pub fn RequestNewPage(vault_id: String) -> View {
|
||||
let id: &'static str = Box::leak(vault_id.clone().into_boxed_str());
|
||||
let me = create_signal(None::<Me>);
|
||||
let options = create_signal(None::<OptionsPage>);
|
||||
let keys = create_signal(Vec::<KeySummary>::new());
|
||||
let error = create_signal(None::<String>);
|
||||
let saving = create_signal(false);
|
||||
@@ -21,6 +26,7 @@ pub fn RequestNewPage(vault_id: String) -> View {
|
||||
let new_key = create_signal(false);
|
||||
let key_type = create_signal("rsa".to_string());
|
||||
let key_size = create_signal("2048".to_string());
|
||||
let curve = create_signal("secp256r1".to_string());
|
||||
let signature_hash = create_signal("sha256".to_string());
|
||||
|
||||
let cn = create_signal(String::new());
|
||||
@@ -54,8 +60,24 @@ pub fn RequestNewPage(vault_id: String) -> View {
|
||||
keys.set(page.results.into_iter().filter(|key| key.has_private).collect());
|
||||
}
|
||||
}
|
||||
if let Ok(page) = api::options(id).await {
|
||||
if options.is_alive() {
|
||||
options.set(Some(page));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let signing_key_type = move || {
|
||||
if new_key.get() {
|
||||
return Some(key_type.get_clone());
|
||||
}
|
||||
let selected = key_id.get_clone();
|
||||
keys.get_clone()
|
||||
.into_iter()
|
||||
.find(|key| key.id == selected)
|
||||
.map(|key| key.key_type)
|
||||
};
|
||||
|
||||
let submit = move |_| {
|
||||
let request_name = name.get_clone();
|
||||
if request_name.trim().is_empty() {
|
||||
@@ -113,14 +135,24 @@ pub fn RequestNewPage(vault_id: String) -> View {
|
||||
"comment": comment.get_clone(),
|
||||
"subject": subject,
|
||||
"extensions": extensions,
|
||||
"signature_hash": signature_hash.get_clone(),
|
||||
});
|
||||
apply_signature_hash(
|
||||
&mut payload,
|
||||
signing_key_type().as_deref(),
|
||||
&signature_hash.get_clone(),
|
||||
);
|
||||
if new_key.get() {
|
||||
payload["new_key"] = json!({
|
||||
let mut generated_key = json!({
|
||||
"key_type": key_type.get_clone(),
|
||||
"size": key_size.get_clone().parse::<i64>().unwrap_or(2048),
|
||||
"name": format!("{} key", name.get_clone()),
|
||||
});
|
||||
add_key_parameters(
|
||||
&mut generated_key,
|
||||
&key_type.get_clone(),
|
||||
&key_size.get_clone(),
|
||||
&curve.get_clone(),
|
||||
);
|
||||
payload["new_key"] = generated_key;
|
||||
} else if !key_id.get_clone().is_empty() {
|
||||
payload["key_id"] = json!(key_id.get_clone());
|
||||
} else {
|
||||
@@ -180,13 +212,12 @@ pub fn RequestNewPage(vault_id: String) -> View {
|
||||
input(class="form-control", bind:value=name)
|
||||
}
|
||||
div(class="col-md-6") {
|
||||
label(class="form-label") { "Signature hash" }
|
||||
select(class="form-select", bind:value=signature_hash) {
|
||||
option(value="sha256") { "SHA-256" }
|
||||
option(value="sha384") { "SHA-384" }
|
||||
option(value="sha512") { "SHA-512" }
|
||||
option(value="sha1") { "SHA-1" }
|
||||
}
|
||||
(signature_hash_input(
|
||||
"Signature hash",
|
||||
options,
|
||||
signing_key_type,
|
||||
signature_hash,
|
||||
))
|
||||
}
|
||||
div(class="col-12") {
|
||||
label(class="form-label") { "Comment" }
|
||||
@@ -217,15 +248,10 @@ pub fn RequestNewPage(vault_id: String) -> View {
|
||||
div(class="row g-3") {
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Key type" }
|
||||
select(class="form-select", bind:value=key_type) {
|
||||
option(value="rsa") { "RSA" }
|
||||
option(value="ec") { "EC" }
|
||||
option(value="ed25519") { "ED25519" }
|
||||
}
|
||||
(key_type_select(options, key_type))
|
||||
}
|
||||
div(class="col-md-4") {
|
||||
label(class="form-label") { "Key size" }
|
||||
input(class="form-control", bind:value=key_size)
|
||||
(key_parameter_input(options, key_type, key_size, curve))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user