Skip to content

Commit

Permalink
Support pkcs1 format keys.
Browse files Browse the repository at this point in the history
  • Loading branch information
Half-Shot committed Apr 16, 2024
1 parent 1b5e0a4 commit 08ca985
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/tokens/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use base64ct::{Base64, Encoding};
use napi::bindgen_prelude::Buffer;
use napi::Error;
use rsa::pkcs8::DecodePrivateKey;
use rsa::pkcs1::DecodeRsaPrivateKey;
use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};

static MAX_TOKEN_PART_SIZE: usize = 128;
Expand All @@ -17,7 +18,9 @@ struct TokenEncryption {
#[allow(dead_code)]
enum TokenEncryptionError {
FromUtf8(FromUtf8Error),
PrivateKey(rsa::pkcs8::Error),
UnknownFormat,
PrivateKey8(rsa::pkcs8::Error),
PrivateKey1(rsa::pkcs1::Error),
}

#[derive(Debug)]
Expand All @@ -31,8 +34,16 @@ enum DecryptError {
impl TokenEncryption {
pub fn new(private_key_data: Vec<u8>) -> Result<Self, TokenEncryptionError> {
let data = String::from_utf8(private_key_data).map_err(TokenEncryptionError::FromUtf8)?;
let private_key = RsaPrivateKey::from_pkcs8_pem(data.as_str())
.map_err(TokenEncryptionError::PrivateKey)?;
let private_key: RsaPrivateKey;
if data.starts_with("-----BEGIN PRIVATE KEY-----") {
private_key = RsaPrivateKey::from_pkcs8_pem(data.as_str())
.map_err(TokenEncryptionError::PrivateKey8)?;
} else if data.starts_with("-----BEGIN RSA PRIVATE KEY-----") {
private_key = RsaPrivateKey::from_pkcs1_pem(data.as_str())
.map_err(TokenEncryptionError::PrivateKey1)?;
} else {
return Err(TokenEncryptionError::UnknownFormat);
}
let public_key = private_key.to_public_key();
Ok(TokenEncryption {
private_key,
Expand Down

0 comments on commit 08ca985

Please sign in to comment.