Skip to content

🐛 Decryption error - privateDecrypt #494

@Morgandri1

Description

@Morgandri1

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions