-
Notifications
You must be signed in to change notification settings - Fork 105
Open
Description
What's happening?
I'm trying to decrypt a string encrypted with RSA-PKCS1, and i'm running into this same nondescript error.
[Error: Failed Cipher Operation - privateDecrypt]
I've narrowed it down to two possibilities:
Incorrect keypair
data formatted incorrectly
My current process being halted is:
- generate RSA keypair via OpenSSL library on rust server ✅
- encrypt data with public key and base58 encode bytes ✅
- decode data on client ✅
- decrypt data on client with cached private key from server ❌
is there any reason to assume the server is generating an improper keypair? I have verified the key itself is correct.
Reproducible Code
// handler.rs
for member in members {
let mut user = users::get_user(&member)?;
let pemkey = match base58_public_key_to_pem(&user.id) {
Ok(pemkey) => {
println!("{}", pemkey);
pemkey
},
Err(e) => {
println!("Key conversion error: {:?}", e);
return Err(warp::reject::custom(InternalError::Unknown));
}
};
let key = match encrypt_symetric_key(&pemkey, &key) {
Ok(key) => key,
Err(e) => {
println!("Encryption error: {:?}", e);
return Err(warp::reject::custom(InternalError::Unknown));
}
};
let _ = chats::add_member(
&ctx,
user.clone(),
key
)?;
user.chats.push(
bs58::encode(encrypt_data(
&base58_public_key_to_pem(&user.id).expect("Failed to convert key"),
ctx.id.as_bytes()
).expect("Failed to encrypt chat id")).into_string()
);
let _ = users::update_user(user)?;
}
// rsa.ts
export function decryptMessageWithPrivateKey(encryptedMessage: Buffer, privateKeyPem: string): string {
const decryptedMessage = QuickCrypto.privateDecrypt(
{
key: privateKeyPem,
padding: QuickCrypto.constants.RSA_PKCS1_PADDING,
},
encryptedMessage
);
return decryptedMessage.toString('utf8');
}
// webserver.ts
this.retrieveData({ctx: decryptMessageWithPrivateKey(Buffer.from(base58.decode(chat)), cache.user.private_key)}).then((r: ChatResponse) => {
this.cache.chats = [...this.cache.chats, {
id: chat,
...r,
messages: [],
key: deriveChatSymKeyFromEncryptedKeys(r.symetric_keys, cache.user.private_key)
}]
})Relevant log output
ERROR [Error: Failed Cipher Operation - privateDecrypt]Device
iPhone 16 Pro iOS 18
QuickCrypto Version
0.7.5
Can you reproduce this issue in the QuickCrypto Example app?
1.0.0-beta3 does not implement privateDecrypt
Additional information
- I am using Expo
- I have read the Troubleshooting Guide
- I agree to follow this project's Code of Conduct
- I searched for similar issues in this repository and found none.
Metadata
Metadata
Assignees
Labels
No labels