| 409 | import_okp_key( |
| 410 | ctx, |
| 411 | format, |
| 412 | kind, |
| 413 | data, |
| 414 | const_oid::db::rfc8410::ID_X_25519, |
| 415 | algorithm_name, |
| 416 | false, |
| 417 | )?; |
| 418 | Ok(Some(*kind)) |
| 419 | } else { |
| 420 | Ok(None) |
| 421 | } |
| 422 | } |
| 423 | |
| 424 | #[cfg(not(feature = "_subtle-full"))] |
| 425 | #[inline] |
| 426 | fn import<'js>( |
| 427 | _ctx: &Ctx<'js>, |
| 428 | _mode: KeyAlgorithmMode<'_, 'js>, |
| 429 | _algorithm_name: &str, |
| 430 | ) -> Result<Option<KeyKind>> { |
| 431 | Ok(None) |
| 432 | } |
| 433 | |
| 434 | let key_kind = import(ctx, mode, algorithm_name)?; |
| 435 | KeyUsage::classify_and_check_usages( |
| 436 | ctx, |
| 437 | KeyUsageAlgorithm::DeriveAsymmetric, |
| 438 | usages, |
| 439 | private_usages, |
| 440 | public_usages, |
| 441 | key_kind.as_ref(), |
| 442 | )?; |
| 443 | Ok(KeyAlgorithm::X25519) |
| 444 | } |
| 445 | |
| 446 | fn from_aes<'js>( |
| 447 | ctx: &Ctx<'js>, |
| 448 | mode: KeyAlgorithmMode<'_, 'js>, |
| 449 | obj: Result<Object<'js>>, |
| 450 | algorithm_name: &str, |
| 451 | usages: &Array<'js>, |
| 452 | private_usages: &mut Vec<String>, |
| 453 | public_usages: &mut Vec<String>, |
| 454 | ) -> Result<KeyAlgorithm> { |
| 455 | #[cfg(feature = "_subtle-full")] |
| 456 | #[inline] |
| 457 | fn import<'js>( |
| 458 | ctx: &Ctx<'js>, |
| 459 | mode: KeyAlgorithmMode<'_, 'js>, |
| 460 | obj: Result<Object<'js>>, |
| 461 | algorithm_name: &str, |
| 462 | ) -> Result<(u16, Option<KeyKind>)> { |
| 463 | if let KeyAlgorithmMode::Import { data, format, kind } = mode { |
| 464 | let length = |
| 465 | import_symmetric_key(ctx, format, kind, data, algorithm_name, None)? as u16; |
| 466 | Ok((length, Some(*kind))) |
| 467 | } else { |
| 468 | let length: u16 = obj?.get_required("length", "algorithm")?; |