TonyG
TonyG

Reputation: 1

openssl not compatible with forge library?

I am trying to encrypt a message using forge Javascript library and to decipher it using Openssl library suite using RSA algorithm. For some reason, the encrypted message is so corrupt, it can not be deciphered. Most likely I am missing somewhere something basic such as importing correctly the public key into forge. Please note: I am using version 1.0.0 of the forge library.

The error I get when trying to decrypt is this (see also below):

Public Key operation error 4050F776:error:0200009F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error:../crypto/rsa/rsa_pk1.c:269: 4050F776:error:02000072:rsa routines:rsa_ossl_private_decrypt:padding check failed:../crypto/rsa/rsa_ossl.c:499:

Can somebody lend me a hand of help?

First the Javascript code I came up with:

 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/forge.min.js"></script>
 <script type='text/javascript'>
    function encryptMsg(msg) {
        var publicKeyStr = "-----BEGIN PUBLIC KEY-----\n" +
        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlUQyQ4nO6kv/MPDZxHcO\n" +
        "4vcLpzRAMxhRVkOXH2o2kjJYAjYd5K//29N4QhKYS3pRC+s4iZX6pL5OIMojpxjd\n" +
        "vCwlHQ2OdouTGT1qDBAc+bfcF6C6m6u8dfSEOZn9+hWl9TL8wgtLNp07L5//2VT5\n" +
        "zk2RIIraYOf1RFuVoFd3d4Bwv7sNkLVzw9rBgXpj6NnBpxD4w3m33NAVAblXteYi\n" +
        "nq/SOn+4wTkPqkFzQm70dWfzOiRiz1OJBYR3Wn6ripuqoQ1qD0n7EEMoTdGfIeDP\n" +
        "SHD2pt2CM27ZXUOPi11IUG9aS9ExmPS0Gz8IClSIcW+ErV/QYW4X/5PHDt2rtwg+\n" +
        "TQIDAQAB\n" +
        "-----END PUBLIC KEY-----"
        console.log(publicKeyStr)
        var msg = forge.pem.decode(publicKeyStr)[0]
        var obj = forge.asn1.fromDer(msg.body);
        var publicKey = forge.pki.publicKeyFromAsn1(obj)
        var encrypted = publicKey.encrypt(msg)

        //
        // Dump the encrypted messsage as base64 string
        //
        var anArray = Uint8Array.from(encrypted.split("").map(x => x.charCodeAt()))
        var buffer = forge.util.binary.base64.encode(anArray, 64)
        console.log(buffer)
    }

Content of private key file:

-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCVRDJDic7qS/8w
8NnEdw7i9wunNEAzGFFWQ5cfajaSMlgCNh3kr//b03hCEphLelEL6ziJlfqkvk4g
yiOnGN28LCUdDY52i5MZPWoMEBz5t9wXoLqbq7x19IQ5mf36FaX1MvzCC0s2nTsv
n//ZVPnOTZEgitpg5/VEW5WgV3d3gHC/uw2QtXPD2sGBemPo2cGnEPjDebfc0BUB
uVe15iKer9I6f7jBOQ+qQXNCbvR1Z/M6JGLPU4kFhHdafquKm6qhDWoPSfsQQyhN
0Z8h4M9IcPam3YIzbtldQ4+LXUhQb1pL0TGY9LQbPwgKVIhxb4StX9Bhbhf/k8cO
3au3CD5NAgMBAAECggEAANrkPHxOheDmZunznrs9h9cj8d2BV6RA77D77Yy5dXgZ
28tiZklheml5SSGbozphuqMqjqk1XMUP+VfxwSw0ivZ9cO+UscD7baaAfsNciHar
6VZnnerWLckh38WYzZpa+hmvFnp46r4W/8nCGK/dWCKcHUxbqLieGvnjqciOe+NW
IzRkUxhOfNZ8W26XxDkAYqNYOLGwIPdlgriLRC95yrhuaQHqGFLY7o2UMNhu/eu/
EoKnpwkRz58ZnArgzNWrPNe6tUHrTTX82ktPWQtG18nzRdGOVMBbwL+wll2rz7Za
mYGODuFSikB+0Csei7MfEukcEuElpoqvbsh+NrH2yQKBgQDR/5oTEqhZ5RGoLOaV
bLyNa9nwZddOvAKWouCQZtXtctqvlHfSwmjfDMdD/RnI1ly085wd03lJP4S9nOKK
DsZhx650BGLyksYjvg2R+B1YSbtj+n/NGy9U/cGqKstr77YcqhltoyB57KcVcFCo
TE/kgo2oGdmpxYM5VHqwgNV/9QKBgQC19tT7hjOSlVP2NhiWLsMPxIUJXLro4XtI
TlR/NgIv7FHV6zGYb7VdSo+rQmgXNNg36Avv9NNAJ5KTg23BMIDZWV1y9F6cbr5h
gbuLW+mdemOzrRuhc2GNgXiwNQkS9ARSd/WMULfP3f2QhbeyWm0BmgR1dNU/jspH
Du/pTAMF+QKBgC0SQQ1q6bsxkRKZYHwdtHJd/Y69LPL3I08VckFL8QpfplQc94LC
uyN0aKhNAGW8rHUh/BXit5tjCKhxraWX+jguVWENN/d8TQ6K0frMV/AFEzUoJJnv
Bb+mHxTYzoRCFMIeOAryAhxpEItnachVaKhQ5Pp5YeAwRjPdz99mJ2ypAoGAerda
b77T7Rl0JGnbLv2eY3XfWq8FBqV6ZQsehSRBWVyA3EnfirRble0A8zi3xl7HKvz9
f/iWt394pK9QR6eUXgCcuzf+znUJQ+0gNB3qcV/m+XfXWIzdz3bvk7ZQxk121L8+
BEEzlaZaqSrk9g1x0lCyjRwb7N85n659MdMnftECgYBvyOBmb09Z3a4nYOvgIYO2
PW6QaHT2oQN7vydXOzBZloI1xvaPfb/ptNE5ntgBj2HmJc4ZPoEYl5HBH7D5Bdxm
JQHL8KrjvTev2kgQWP/SHCBjQ7qdYloiEDooOOEiY+wSDfCsAm9NfU/DxrsnwqmX
z6rYlQ5J2Pdn5fv6QMZrCw==
-----END PRIVATE KEY-----

When running above Javascript code under Firefox (as part of a minimal webpage not shown here), I get this on Javascript console:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlUQyQ4nO6kv/MPDZxHcO
4vcLpzRAMxhRVkOXH2o2kjJYAjYd5K//29N4QhKYS3pRC+s4iZX6pL5OIMojpxjd
vCwlHQ2OdouTGT1qDBAc+bfcF6C6m6u8dfSEOZn9+hWl9TL8wgtLNp07L5//2VT5
zk2RIIraYOf1RFuVoFd3d4Bwv7sNkLVzw9rBgXpj6NnBpxD4w3m33NAVAblXteYi
nq/SOn+4wTkPqkFzQm70dWfzOiRiz1OJBYR3Wn6ripuqoQ1qD0n7EEMoTdGfIeDP
SHD2pt2CM27ZXUOPi11IUG9aS9ExmPS0Gz8IClSIcW+ErV/QYW4X/5PHDt2rtwg+
TQIDAQAB
-----END PUBLIC KEY----- 

Ds9bdOG1Xm07Wy495cVGVnJic36AS27Uv9CzbIONtc7aYe7YRu3JnfIDuxjettTh
wUkF+xxHlvLwzELYragrdqddRLx3f1Jp7mCU+t9Path99q8F0pzDPUgdK3raLBJE
AfTTk3oUR5iy17GLX8mtjqqgHoaf7tGvryETp830MUmKRKSHEuOJtDZ34dMH4sVw
t2sgMGNbOOB6BEjRNUZAsNgifK+jy9IaAiZO/vPxzlVkfg/fLV4IrzqE3TJyOVju
t5o/nUdq8o9Gcch1cOrUYMmTAS2byUenOnx/AhT1FKrhcG2WFIACD3Hxl6MeSaBX
FjZgz3lqKfuE6DVuY4dN3g==

Next I copied the encrypted message above and saved it to file (encrypted.base64) and after that I have attempted to decrypt it using Openssl with a command like this:

$ cat encrypted.base64 | base64 -d | openssl pkeyutl -decrypt -in /dev/stdin   -out /dev/stdout  -inkey privatekey.pem
Public Key operation error
4050F776:error:0200009F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error:../crypto/rsa/rsa_pk1.c:269:
4050F776:error:02000072:rsa routines:rsa_ossl_private_decrypt:padding check failed:../crypto/rsa/rsa_ossl.c:499:

I suspect the root of the problem is the corrupted encryption key, but then what is the proper way to import ssl generated keys into "forge" library?

Upvotes: 0

Views: 59

Answers (0)

Related Questions