use signatory::{ed25519, encoding::Decode, PublicKeyed};
use signatory_dalek::Ed25519Signer;
use subtle_encoding::IDENTITY;
use super::Signer;
use config::provider::softsign::SoftSignConfig;
use error::{KmsError, KmsErrorKind::*};
use keyring::KeyRing;
pub const DALEK_PROVIDER_LABEL: &str = "dalek";
pub fn init(keyring: &mut KeyRing, configs: &[SoftSignConfig]) -> Result<(), KmsError> {
for config in configs {
let seed =
ed25519::Seed::decode_from_file(config.path.as_path(), IDENTITY).map_err(|e| {
err!(
ConfigError,
"can't open {}: {}",
config.path.as_path().display(),
e
)
})?;
let provider = Box::new(Ed25519Signer::from(&seed));
keyring.add(
provider.public_key()?,
Signer::new(DALEK_PROVIDER_LABEL, config.id.clone(), provider),
)?;
}
Ok(())
}