Skip to content

Commit d687862

Browse files
committed
kdf: rename derive_ecdsa_* functions to more accurate names
The functions were not specific to ECDSA: - derive_ecdsa_key was a generic HKDF key derivation, now renamed to derive_key - derive_ecdsa_key_pair was specifically for P-256, now renamed to derive_p256_key_pair - derive_ecdsa_key_pair_from_bytes similarly renamed to derive_p256_key_pair_from_bytes This makes the API clearer about what each function actually does.
1 parent a8d7596 commit d687862

6 files changed

Lines changed: 26 additions & 29 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dstack-util/src/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use ra_rpc::Attestation;
1414
use ra_tls::{
1515
attestation::QuoteContentType,
1616
cert::generate_ra_cert,
17-
kdf::{derive_ecdsa_key, derive_ecdsa_key_pair_from_bytes},
17+
kdf::{derive_key, derive_p256_key_pair_from_bytes},
1818
rcgen::KeyPair,
1919
};
2020
use std::{
@@ -378,9 +378,9 @@ fn gen_app_keys_from_seed(
378378
provider: KeyProviderKind,
379379
mr: Option<Vec<u8>>,
380380
) -> Result<AppKeys> {
381-
let key = derive_ecdsa_key_pair_from_bytes(seed, &["app-key".as_bytes()])?;
382-
let disk_key = derive_ecdsa_key_pair_from_bytes(seed, &["app-disk-key".as_bytes()])?;
383-
let k256_key = derive_ecdsa_key(seed, &["app-k256-key".as_bytes()], 32)?;
381+
let key = derive_p256_key_pair_from_bytes(seed, &["app-key".as_bytes()])?;
382+
let disk_key = derive_p256_key_pair_from_bytes(seed, &["app-disk-key".as_bytes()])?;
383+
let k256_key = derive_key(seed, &["app-k256-key".as_bytes()], 32)?;
384384
let k256_key = SigningKey::from_bytes(&k256_key).context("Failed to parse k256 key")?;
385385
let key_provider = match provider {
386386
KeyProviderKind::None => KeyProvider::None {

guest-agent/src/rpc_service.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use ra_rpc::{Attestation, CallContext, RpcCall};
3030
use ra_tls::{
3131
attestation::{QuoteContentType, VersionedAttestation, DEFAULT_HASH_ALGORITHM},
3232
cert::CertConfigV2,
33-
kdf::{derive_ecdsa_key, derive_ecdsa_key_pair_from_bytes},
33+
kdf::{derive_key, derive_p256_key_pair_from_bytes},
3434
};
3535
use rcgen::KeyPair;
3636
use ring::rand::{SecureRandom, SystemRandom};
@@ -235,7 +235,7 @@ impl DstackGuestRpc for InternalRpcHandler {
235235
.fill(&mut seed)
236236
.context("Failed to generate secure seed")?;
237237
let derived_key =
238-
derive_ecdsa_key_pair_from_bytes(&seed, &[]).context("Failed to derive key")?;
238+
derive_p256_key_pair_from_bytes(&seed, &[]).context("Failed to derive key")?;
239239
let config = CertConfigV2 {
240240
org_name: None,
241241
subject: request.subject,
@@ -270,7 +270,7 @@ impl DstackGuestRpc for InternalRpcHandler {
270270

271271
let (key, pubkey_hex) = match request.algorithm.as_str() {
272272
"ed25519" => {
273-
let derived_key = derive_ecdsa_key(k256_app_key, &[request.path.as_bytes()], 32)
273+
let derived_key = derive_key(k256_app_key, &[request.path.as_bytes()], 32)
274274
.context("Failed to derive ed25519 key")?;
275275
let signing_key = Ed25519SigningKey::from_bytes(
276276
&derived_key
@@ -282,7 +282,7 @@ impl DstackGuestRpc for InternalRpcHandler {
282282
(derived_key, pubkey_hex)
283283
}
284284
"secp256k1" | "secp256k1_prehashed" | "" => {
285-
let derived_key = derive_ecdsa_key(k256_app_key, &[request.path.as_bytes()], 32)
285+
let derived_key = derive_key(k256_app_key, &[request.path.as_bytes()], 32)
286286
.context("Failed to derive k256 key")?;
287287

288288
let signing_key =
@@ -497,7 +497,7 @@ impl TappdRpc for InternalRpcHandlerV0 {
497497
} else {
498498
&self.state.inner.keys.k256_key
499499
};
500-
let derived_key = derive_ecdsa_key_pair_from_bytes(seed, &[request.path.as_bytes()])
500+
let derived_key = derive_p256_key_pair_from_bytes(seed, &[request.path.as_bytes()])
501501
.context("Failed to derive key")?;
502502
let config = CertConfigV2 {
503503
org_name: None,

kms/src/crypto.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ pub(crate) fn derive_k256_key(
1313
app_id: &[u8],
1414
) -> Result<(SigningKey, Vec<u8>)> {
1515
let context_data = [app_id, b"app-key"];
16-
let derived_key_bytes: [u8; 32] =
17-
kdf::derive_ecdsa_key(&parent_key.to_bytes(), &context_data, 32)?
18-
.try_into()
19-
.ok()
20-
.context("Invalid derived key len")?;
16+
let derived_key_bytes: [u8; 32] = kdf::derive_key(&parent_key.to_bytes(), &context_data, 32)?
17+
.try_into()
18+
.ok()
19+
.context("Invalid derived key len")?;
2120
let derived_signing_key = SigningKey::from_bytes(&derived_key_bytes.into())?;
2221
let pubkey = derived_signing_key.verifying_key();
2322

kms/src/main_service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ impl RpcHandler {
215215

216216
fn derive_app_ca(&self, app_id: &[u8]) -> Result<CaCert> {
217217
let context_data = vec![app_id, b"app-ca"];
218-
let app_key = kdf::derive_ecdsa_key_pair(&self.state.root_ca.key, &context_data)
218+
let app_key = kdf::derive_p256_key_pair(&self.state.root_ca.key, &context_data)
219219
.context("Failed to derive app disk key")?;
220220
let req = CertRequest::builder()
221221
.key(&app_key)

ra-tls/src/kdf.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl KeyType for AnySizeKey {
2020
}
2121

2222
/// Derives a key using HKDF-SHA256.
23-
pub fn derive_ecdsa_key(
23+
pub fn derive_key(
2424
input_key_material: &[u8],
2525
context_data: &[&[u8]],
2626
key_size: usize,
@@ -34,21 +34,18 @@ pub fn derive_ecdsa_key(
3434
Ok(result)
3535
}
3636

37-
/// Derives a key pair from a given key pair.
38-
pub fn derive_ecdsa_key_pair(from: &KeyPair, context_data: &[&[u8]]) -> Result<KeyPair> {
37+
/// Derives a P-256 key pair from a given key pair.
38+
pub fn derive_p256_key_pair(from: &KeyPair, context_data: &[&[u8]]) -> Result<KeyPair> {
3939
let der_bytes = from.serialized_der();
4040
let sk = p256::SecretKey::from_pkcs8_der(der_bytes).context("failed to decode secret key")?;
4141
let sk_bytes = sk.as_scalar_primitive().to_bytes();
42-
derive_ecdsa_key_pair_from_bytes(&sk_bytes, context_data)
42+
derive_p256_key_pair_from_bytes(&sk_bytes, context_data)
4343
}
4444

45-
/// Derives a key pair from a given private key bytes.
46-
pub fn derive_ecdsa_key_pair_from_bytes(
47-
sk_bytes: &[u8],
48-
context_data: &[&[u8]],
49-
) -> Result<KeyPair> {
45+
/// Derives a P-256 key pair from a given private key bytes.
46+
pub fn derive_p256_key_pair_from_bytes(sk_bytes: &[u8], context_data: &[&[u8]]) -> Result<KeyPair> {
5047
let derived_sk_bytes =
51-
derive_ecdsa_key(sk_bytes, context_data, 32).or(Err(anyhow!("failed to derive key")))?;
48+
derive_key(sk_bytes, context_data, 32).or(Err(anyhow!("failed to derive key")))?;
5249
let derived_sk = p256::SecretKey::from_slice(&derived_sk_bytes)
5350
.context("failed to decode derived secret key")?;
5451
let derived_sk_der = derived_sk
@@ -70,7 +67,7 @@ fn sha256(data: &[u8]) -> [u8; 32] {
7067

7168
/// Derives a X25519 secret from a given key pair.
7269
pub fn derive_dh_secret(from: &KeyPair, context_data: &[&[u8]]) -> Result<[u8; 32]> {
73-
let key_pair = derive_ecdsa_key_pair(from, context_data)?;
70+
let key_pair = derive_p256_key_pair(from, context_data)?;
7471
let derived_secret = sha256(key_pair.serialized_der());
7572
Ok(derived_secret)
7673
}
@@ -81,21 +78,21 @@ mod tests {
8178

8279
#[test]
8380
fn test_derive_key32() {
84-
let key = derive_ecdsa_key(b"input key material", &[b"context one"], 32).unwrap();
81+
let key = derive_key(b"input key material", &[b"context one"], 32).unwrap();
8582
assert_eq!(key.len(), 32);
8683
assert!(key.iter().any(|&x| x != 0));
8784
}
8885

8986
#[test]
9087
fn test_derive_key256() {
91-
let key = derive_ecdsa_key(b"input key material", &[b"context one"], 256).unwrap();
88+
let key = derive_key(b"input key material", &[b"context one"], 256).unwrap();
9289
assert_eq!(key.len(), 256);
9390
assert!(key.iter().any(|&x| x != 0));
9491
}
9592

9693
#[test]
9794
fn test_derive_key_pair() {
9895
let key = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
99-
let _derived_key = derive_ecdsa_key_pair(&key, &[b"context one"]).unwrap();
96+
let _derived_key = derive_p256_key_pair(&key, &[b"context one"]).unwrap();
10097
}
10198
}

0 commit comments

Comments
 (0)