Move PKCS#8 document formatting to ring::pkcs8
.
This commit is contained in:
parent
d66730fa19
commit
3685458651
@ -57,18 +57,9 @@ impl<'a> Ed25519KeyPair {
|
||||
let mut seed = [0u8; SEED_LEN];
|
||||
try!(rng.fill(&mut seed));
|
||||
let key_pair = Ed25519KeyPair::from_seed_(&seed);
|
||||
|
||||
let mut bytes = [0; ED25519_PKCS8_V2_LEN];
|
||||
let (before_seed, after_seed) =
|
||||
PKCS8_TEMPLATE.split_at(PKCS8_SEED_INDEX);
|
||||
let seed_end_index = PKCS8_SEED_INDEX + SEED_LEN;
|
||||
bytes[..PKCS8_SEED_INDEX].copy_from_slice(before_seed);
|
||||
bytes[PKCS8_SEED_INDEX..seed_end_index].copy_from_slice(&seed);
|
||||
bytes[seed_end_index..(seed_end_index + after_seed.len())]
|
||||
.copy_from_slice(after_seed);
|
||||
bytes[(seed_end_index + after_seed.len())..]
|
||||
.copy_from_slice(key_pair.public_key_bytes());
|
||||
|
||||
pkcs8::wrap_key(PKCS8_TEMPLATE, PKCS8_SEED_INDEX, &seed[..],
|
||||
key_pair.public_key_bytes(), &mut bytes[..]);
|
||||
Ok(bytes)
|
||||
}
|
||||
|
||||
|
17
src/pkcs8.rs
17
src/pkcs8.rs
@ -79,3 +79,20 @@ pub fn unwrap_key<'a>(version: Version, input: untrusted::Input<'a>,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/// Formats a private key "prefix||private_key||middle||public_key" where
|
||||
/// `template` is "prefix||middle" split at position `private_key_index`.
|
||||
pub fn wrap_key(template: &[u8], private_key_index: usize, private_key: &[u8],
|
||||
public_key: &[u8], bytes: &mut [u8]) {
|
||||
let (before_private_key, after_private_key) =
|
||||
template.split_at(private_key_index);
|
||||
let private_key_end_index = private_key_index + private_key.len();
|
||||
bytes[..private_key_index].copy_from_slice(before_private_key);
|
||||
bytes[private_key_index..private_key_end_index]
|
||||
.copy_from_slice(&private_key);
|
||||
bytes[private_key_end_index..
|
||||
(private_key_end_index + after_private_key.len())]
|
||||
.copy_from_slice(after_private_key);
|
||||
bytes[(private_key_end_index + after_private_key.len())..]
|
||||
.copy_from_slice(public_key);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user