Skip to content

Commit 595bb1d

Browse files
authored
Added support for pkcs8 private keys in signature generation (#105)
* Added support for pkcs8 private keys in signature generation * Bumped version
1 parent de5f3f1 commit 595bb1d

File tree

5 files changed

+19
-7
lines changed

5 files changed

+19
-7
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "slauth"
3-
version = "0.7.13"
3+
version = "0.7.14"
44
authors = [
55
"richer <richer.arc@gmail.com>",
66
"LucFauvel <luc.fauvel@hotmail.com>",

Slauth.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'Slauth'
3-
s.version = '0.7.13'
3+
s.version = '0.7.14'
44
s.summary = 'A Swift wrapper around Slauth Rust crate'
55
s.description = <<-DESC
66
TODO: Add long description of the pod here.

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ properties.load(project.rootProject.file('local.properties').newDataInputStream(
2626

2727
project('slauth') {
2828
ext {
29-
libraryVersion = '0.7.13'
29+
libraryVersion = '0.7.14'
3030
}
3131
publishing {
3232
repositories {

src/webauthn/authenticator/mod.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use p256::ecdsa::VerifyingKey;
2222
use rand::rngs::OsRng;
2323
use rsa::{
2424
pkcs1::{DecodeRsaPrivateKey, EncodeRsaPrivateKey},
25+
pkcs8::DecodePrivateKey,
2526
signature::SignatureEncoding,
2627
traits::PublicKeyParts,
2728
};
@@ -61,6 +62,7 @@ pub enum WebauthnCredentialRequestError {
6162
Base64Error(base64::DecodeError),
6263
Ed25519Error(ed25519_dalek::SignatureError),
6364
Ed25519SPKIError(ed25519_dalek::pkcs8::spki::Error),
65+
Ed25519PKCS8Error(ed25519_dalek::pkcs8::Error),
6466
}
6567

6668
impl From<serde_json::Error> for WebauthnCredentialRequestError {
@@ -105,6 +107,12 @@ impl From<ed25519_dalek::pkcs8::spki::Error> for WebauthnCredentialRequestError
105107
}
106108
}
107109

110+
impl From<ed25519_dalek::pkcs8::Error> for WebauthnCredentialRequestError {
111+
fn from(e: ed25519_dalek::pkcs8::Error) -> Self {
112+
WebauthnCredentialRequestError::Ed25519PKCS8Error(e)
113+
}
114+
}
115+
108116
pub struct WebauthnAuthenticator;
109117

110118
impl WebauthnAuthenticator {
@@ -368,16 +376,20 @@ impl WebauthnAuthenticator {
368376

369377
match private_key_response.key_alg {
370378
CoseAlgorithmIdentifier::Ed25519 => {
371-
let key = ed25519_dalek::SigningKey::try_from(private_key_response.private_key.as_slice())?;
379+
let key = ed25519_dalek::SigningKey::try_from(private_key_response.private_key.as_slice()).or(
380+
ed25519_dalek::SigningKey::from_pkcs8_der(private_key_response.private_key.as_slice()),
381+
)?;
372382
Ok(key.sign([auth_data_bytes, client_data_hash].concat().as_slice()).to_vec())
373383
}
374384
CoseAlgorithmIdentifier::ES256 => {
375-
let key = p256::ecdsa::SigningKey::try_from(private_key_response.private_key.as_slice())?;
385+
let key = p256::ecdsa::SigningKey::from_pkcs8_der(private_key_response.private_key.as_slice())
386+
.or(p256::ecdsa::SigningKey::try_from(private_key_response.private_key.as_slice()))?;
376387
let (sig, _) = key.sign([auth_data_bytes, client_data_hash].concat().as_slice());
377388
Ok(sig.to_der().to_vec())
378389
}
379390
CoseAlgorithmIdentifier::RSA => {
380-
let key = rsa::RsaPrivateKey::from_pkcs1_der(&private_key_response.private_key)?;
391+
let key = rsa::RsaPrivateKey::from_pkcs1_der(&private_key_response.private_key)
392+
.or(rsa::RsaPrivateKey::from_pkcs8_der(&private_key_response.private_key))?;
381393
let signing_key = rsa::pkcs1v15::SigningKey::<Sha256>::new(key);
382394
Ok(signing_key.sign([auth_data_bytes, client_data_hash].concat().as_slice()).to_vec())
383395
}

wrappers/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ android {
2626
minSdkVersion 23
2727
targetSdkVersion 28
2828
versionCode 1
29-
versionName "0.7.13"
29+
versionName "0.7.14"
3030

3131
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
3232

0 commit comments

Comments
 (0)