Archived Forum Post

Index of archived forum posts

Question:

RSA OAEP Error

Nov 05 '15 at 11:53

Good afternoon. I am having an issue with the RSA library on iOS. I am generating a 4096bit RSA key pair and storing it on the iOS device. Then later decrypting data using that private key. The RSA instance is configured to use OAEP padding with SHA512 hashing. RSA decryption using the private key works for maybe around 1 week (it seems to be related to the length of time the key is stored on the device. I have no idea why). Then all of a sudden every single decryption attempt throws this error:

ChilkatLog:
DecryptBytes:
DllDate: Feb 25 2015
ChilkatVersion: 9.5.0.48
UnlockPrefix: XXXXXX
Architecture: Little Endian; 64-bit
Language: IOS Objective-C
VerboseLogging: 0
usePrivateKey: 1
rsaDecryptBytes:
rsa_decrypt:
KeyType: Private
InputSize: 512
Padding: OAEP
HashAlg: SHA-512
ParamLen: 0
ModulusBitLen: 4096
No leading zero byte for OAEP decoding.
OAEP decoding failed.
--rsa_decrypt
--rsaDecryptBytes
Failed.
--DecryptBytes
--ChilkatLog

I made sure the entire xml rsa key pair that is being used is the exact same as it was when it was generated indicating the key didn't get corrupted while stored on the device. Additionally, as soon as I generate a new key pair, everything starts working again. The back end which performs rsa encryption using the device's public key serves many platforms, none of which exhibit this issue. The only difference is that the iOS client is using the Chilkat lib.

Any help is appreciated. Thanks!


Answer

Here's another thread with the same "No leading zero byte for OAEP decoding" error. Does it help at all?

http://www.chilkatforum.com/questions/5686/encrypstringenc-and-decryptstringenc-with-failure


Answer

Thanks! I responded via private email and I'll investigate as I mentioned in email. :)

Best Regards, Matt


Answer

This may be the encryption process that hosed up the data rather than an issue in the library. I am going to dig more on my side.

Thanks!


Answer

I just ported my application to Cocoa (OSX) and the interoperability between OSX and Windows (.NET) is consistently broken - as in every single time the encryption / decryption between the two systems fails.

I am using RSA with SHA512 as the hash and OAEP padding. The .NET library is BouncyCastle and the OSX library is Chilkat Cocoa.

Could there be an issue with the OAEP implementation using SHA512 within Chilkat? The .NET and PHP libraries I am using have never exhibited issues talking to eachother, however, Chilkat has presented an intermittent issue with PHP and a consistent issue with .NET.

Thanks!


Answer

Check to see if you're setting the LittleEndian property. Make sure it's at the default value of False/NO to produce Big-Endian output that conforms to OpenSSL/BounceyCastle. Little-Endian output conforms to what the Windows CryptoAPI produces.


Answer

I just checked - I was not setting it explicitly so I set it to false, but in the debug output of the error I see that it has always had "bigEndian: 1". I can try to set it to true just for kicks....

EDIT: Just tried both ways for LittleEndian. No dice. Same error.


Answer

Not sure if this will help, but it is failing here in C# BouncyCastle when decrypting the output of OSX Chilkat RSA:

// check the hash of the encoding params.
{
    int diff = 0;
    for (int i = 0; i < defHash.Length; ++i)
    {
        diff |= (byte)(defHash[i] ^ block[defHash.Length + i]);
    }

    // At this point diff == 255 rather than 0
    if (diff != 0)
        throw new InvalidCipherTextException("data hash wrong");
 }

defHash is 64 bytes (SHA512) as expected here.

Here is how I am initializing CkoRsa:

let rsa = CkoRsa();
rsa.UnlockComponent("my-key-here");
rsa.OaepPadding = true;
rsa.OaepHash = "sha512";
rsa.LittleEndian = false;

Answer

Adam, I think the only way to get to the bottom of this is for me to explain a little more about RSA encryption and OAEP padding. Then with that understanding, we'll be able to determine where the error first appears.

With RSA encryption, the amount of data to be encrypted will always be small. There's a limit as to how many bytes can be encrypted, and this depends on the RSA key size and the padding algorithm. The output any RSA encryption is always exactly equal to the bit size of the key. Given that you have a 4096 bit key, the output is always 512 bytes (512 bytes * 8 bits/byte = 4096 bits). The max number of application bytes that can be encrypted is equal to this length minus the overhead for padding. (Let's not worry about exact numbers -- we just want to conceptually understand it.)

I'm going to explain RSA encryption/decryption w/ numbers for a 4096-bit key.

RSA encryption is a 2-step process. First the application data is padded to 512 bytes, then the result goes through a mathematical computation called exponential modulation. The 512 bytes is really just a gigantic integer, and the result is another gigantic integer (also 512 bytes).

RSA decryption is the reverse: First we do exponential modulation (using the private key) and the result should be the padded data. Then we unpad to recover the original data.

If the format of the padding is understood, and if Chilkat can log the padded data inside the LastErrorText (which I'll provide), then we can identify whether valid padded data is passed to the exponential modulation (exptmod) when encrypting, and whether valid data is returned from the exptmod when decrypting.

When something is OAEP padded, it will have this format:

EM = 0x00 || maskedSeed || maskedDB.

One test to see if we definitely do not have OAEP padded data is to see if the 1st byte is NOT 0. It must be 0 for it to be OAEP padded. Remember though.. the input and output of the exptmod function is a BIG positive integer. The OAEP padded data is the large integer fed to the exptmod when encrypting, and returned from the exptmod when decrypting. If we see less than 512 bytes, and the leading byte is not 0, then it implies the leading bytes are 0. (After all 0x00000022 is the same number as 0x22) If we have exactly 512 bytes and the 1st byte is NOT 0, then it is definitely not OAEP padded.

The maskedDB, when unmasked, has this format:

DB = lHash || PS || 0x01 || M.

So..if Chilkat can log the unmasked DB in the LastErrorText, we should see the original data preceded by a 0x01 byte. This is another way to verify that the OAEP padded data is correct. (Also, preceding the 0x01 byte, we should typically see a quantity of 0 bytes.)

For example, I ran a test program to generate a 4096-bit RSA key, and then encrypt/decrypt the string "hello". Here are the LastErrorText's, where we can see the OAEP padding. (More comments to follow..)

ChilkatLog:
  EncryptStringENC(15ms):
    DllDate: Nov  4 2015
    ChilkatVersion: 9.5.0.54
    UnlockPrefix: nbvfds.CBX0916
    Username: CHILKAT13:Matt
    Architecture: Little Endian; 32-bit
    Language: Visual C++ 11.0 (32-bit)
    VerboseLogging: 1
    usePrivateKey: 0
    Component successfully unlocked using purchased unlock code.
    rsaEncryptBytes(15ms):
      rsa_encrypt(15ms):
        KeyType: Public
        InputSize: 5
        Padding: OAEP
        HashAlg: SHA-512
        ParamLen: 0
        ModulusBitLen: 4096
        modulus_bitlen: 4096
        bigEndian: 1
        padding: OAEP
        unmaskedDB: CF83 E135 7EEF B8BD F154 2850 D66D 8007
D620 E405 0B57 15DC 83F4 A921 D36C E9CE
47D0 D13C 5D85 F2B0 FF83 18D2 877E EC2F
63B9 31BD 4741 7A81 A538 327A F927 DA3E
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0001 6865 6C6C 6F
        oaepPaddedBeforeEncryption: 00E3 5D86 8647 A99F C4A3 45CD 47A8 B7C9
EB4D 4F04 D970 50B4 AC98 66D9 3179 6186
9BD6 4020 3F63 E7AC 0896 9605 C2C3 A460
6B2F 020A F849 4918 364F 2100 7445 D34B
0276 DB63 092C DF07 9407 6651 32E4 537F
CACE 7DC9 DA3A 2063 46B7 4077 7EAF D110
19B9 A288 F9A8 FA86 4B3A 7C65 2EA6 349E
409C E7BA 6FB5 2740 1A52 C713 B72C C085
6B01 7251 1141 6DC9 A61D BCC5 3A36 D325
17C8 9F7B 5074 98E5 7038 8D6A 19D6 FA6A
5152 ABB0 C8DF 14E0 D5C5 756A 0E38 DD58
760D BCC0 A683 30DC C824 1A8D BFB7 1F4D
CE7F 767D CBC7 219C A00C 9AF8 160C E61C
F315 42FB E1DF 27ED 7511 D756 8A72 EC2F
E36C 00A5 E253 F25B F786 B1A5 16A0 6F07
F06C 1EED 7A4A 946E 55DF 85B6 CC81 0D08
53BA CF6C 1EAE 02C9 4C23 29CB 8A7B 90B8
9B01 413C 748C 5165 3B81 4098 8D0C 0B79
B125 9A08 BB57 ADA3 7C1A 35CA 5CF8 DF71
5A9C 30BA 3280 0CC8 E236 2358 7C41 843F
BA4A 4025 8D57 56F9 E021 5635 317B 7E61
1057 907B E74B 8106 3CE7 A3F8 5E33 CB7C
5C11 C681 936F 107C EE7E EEED FB26 B28B
DDCD 5AEC 31B3 6CB1 05DC C113 0EAB 8CA3
9BF3 43D9 7E7C CE78 A55A B22A 94D7 3DBF
8238 F3D1 4A38 F198 9F4F 4394 EA95 053E
30B1 CA8C A49B 3E7A EF53 83BA F246 3B26
50B6 49D9 E8E8 F453 B423 F7F9 2FCF 1746
A422 047F F8A5 AC04 805D D531 736A B403
8F87 79A8 C68E 123A 4EFD 2F59 1C79 73EA
A8BA D06E D8DD 2A78 5BC1 5AA1 C51A 6846
1AB3 45C9 3190 30D2 6551 B213 5345 8607
        afterExptMod: A308 B26D FC91 530C 7565 5978 1586 B723
7A31 89FF A4FD CC53 FE82 0A8D 1E9C E306
0341 D2ED 04E9 BB1C 763A 4003 BB2D 8B5A
EA2B AE18 D3E6 927D C1FA FDA8 390A EC29
CBEF D8B4 2B4E FE67 60FE 2278 502C E54A
3D27 066F 57AE B05E F14B F126 8D1F 6C80
EC24 D925 499E FE4F 310A E81F BED9 2FA6
B268 3920 72FE 05E2 62B0 A389 0DBB 4B14
8366 597E EA74 B9F1 E9E1 2B89 2FE8 C3F5
05B2 4762 F129 235B B3DF 7BFD FB0D 4EC1
24A8 D00C C084 2363 54BD 2B95 C0A2 303E
0BE7 3167 C5F6 BB61 4CD9 3AF8 89C6 A72A
98A7 3D6D 65A5 6EA0 176D 7BDC B6F4 438A
720A FCC5 D879 6C65 6D6A F348 C8A3 D0DF
AF87 DDC5 A799 D5DF 2100 8E71 4B94 B031
DAA9 067C 1CDA 92F6 5E04 533D 37EE 7C10
6329 FAD8 77D3 244E 9DEC 42EE C645 C982
973F 346B 7928 95D2 2231 C624 7C0E 9F43
8BAC C17E DE90 9EB2 E1E5 4ED8 A827 CD57
EC85 F33A A982 E471 7C93 AB5D FF49 4171
894E DCCB AF59 8EC1 FA21 BE32 BB70 F4BC
A3B3 021E A52E 03AD 33B1 9DA0 C5F2 8158
C6F7 EA35 5BBD E4A7 5732 B899 B890 14D4
070D 8ACD BD83 B696 153A A52F F28C 0A43
E63C BD49 38D9 47DF 8018 ABFC 8059 D64C
ABE4 E4CB 01D8 C6E2 5BAE 4344 4FAB 88AF
A2AD FF68 43B1 CEA6 2F15 BE39 3A6E 60F1
0AE6 4DD3 F1F5 396F 3155 6086 34E2 7D55
D0D9 0DE3 750F 2687 7605 40E5 D141 6D6D
3AC8 42D0 7C91 A495 8346 1C83 1DDC DFFA
87D4 32DA ACD6 C138 1B69 3981 B97C D194
2255 3FB8 DB65 0392 8A2D 5518 D1C8 FAE1
        resultSize: 512
        OutputSize: 512
      --rsa_encrypt
    --rsaEncryptBytes
    encrypt: Elapsed time: 15 millisec
    Success.
  --EncryptStringENC
--ChilkatLog

ChilkatLog:
  DecryptStringENC(157ms):
    DllDate: Nov  4 2015
    ChilkatVersion: 9.5.0.54
    UnlockPrefix: nbvfds.CBX0916
    Username: CHILKAT13:Matt
    Architecture: Little Endian; 32-bit
    Language: Visual C++ 11.0 (32-bit)
    VerboseLogging: 1
    usePrivateKey: 1
    Component successfully unlocked using purchased unlock code.
    rsaDecryptBytes(157ms):
      rsa_decrypt(157ms):
        KeyType: Private
        InputSize: 512
        Padding: OAEP
        HashAlg: SHA-512
        ParamLen: 0
        ModulusBitLen: 4096
        inlen: 512
        modulus_bytelen: 512
        modulus_bitlen: 4096
        bigEndian: 1
        beforeExptMod: A308 B26D FC91 530C 7565 5978 1586 B723
7A31 89FF A4FD CC53 FE82 0A8D 1E9C E306
0341 D2ED 04E9 BB1C 763A 4003 BB2D 8B5A
EA2B AE18 D3E6 927D C1FA FDA8 390A EC29
CBEF D8B4 2B4E FE67 60FE 2278 502C E54A
3D27 066F 57AE B05E F14B F126 8D1F 6C80
EC24 D925 499E FE4F 310A E81F BED9 2FA6
B268 3920 72FE 05E2 62B0 A389 0DBB 4B14
8366 597E EA74 B9F1 E9E1 2B89 2FE8 C3F5
05B2 4762 F129 235B B3DF 7BFD FB0D 4EC1
24A8 D00C C084 2363 54BD 2B95 C0A2 303E
0BE7 3167 C5F6 BB61 4CD9 3AF8 89C6 A72A
98A7 3D6D 65A5 6EA0 176D 7BDC B6F4 438A
720A FCC5 D879 6C65 6D6A F348 C8A3 D0DF
AF87 DDC5 A799 D5DF 2100 8E71 4B94 B031
DAA9 067C 1CDA 92F6 5E04 533D 37EE 7C10
6329 FAD8 77D3 244E 9DEC 42EE C645 C982
973F 346B 7928 95D2 2231 C624 7C0E 9F43
8BAC C17E DE90 9EB2 E1E5 4ED8 A827 CD57
EC85 F33A A982 E471 7C93 AB5D FF49 4171
894E DCCB AF59 8EC1 FA21 BE32 BB70 F4BC
A3B3 021E A52E 03AD 33B1 9DA0 C5F2 8158
C6F7 EA35 5BBD E4A7 5732 B899 B890 14D4
070D 8ACD BD83 B696 153A A52F F28C 0A43
E63C BD49 38D9 47DF 8018 ABFC 8059 D64C
ABE4 E4CB 01D8 C6E2 5BAE 4344 4FAB 88AF
A2AD FF68 43B1 CEA6 2F15 BE39 3A6E 60F1
0AE6 4DD3 F1F5 396F 3155 6086 34E2 7D55
D0D9 0DE3 750F 2687 7605 40E5 D141 6D6D
3AC8 42D0 7C91 A495 8346 1C83 1DDC DFFA
87D4 32DA ACD6 C138 1B69 3981 B97C D194
2255 3FB8 DB65 0392 8A2D 5518 D1C8 FAE1
        inlen: 512
        afterExptMod: E35D 8686 47A9 9FC4 A345 CD47 A8B7 C9EB
4D4F 04D9 7050 B4AC 9866 D931 7961 869B
D640 203F 63E7 AC08 9696 05C2 C3A4 606B
2F02 0AF8 4949 1836 4F21 0074 45D3 4B02
76DB 6309 2CDF 0794 0766 5132 E453 7FCA
CE7D C9DA 3A20 6346 B740 777E AFD1 1019
B9A2 88F9 A8FA 864B 3A7C 652E A634 9E40
9CE7 BA6F B527 401A 52C7 13B7 2CC0 856B
0172 5111 416D C9A6 1DBC C53A 36D3 2517
C89F 7B50 7498 E570 388D 6A19 D6FA 6A51
52AB B0C8 DF14 E0D5 C575 6A0E 38DD 5876
0DBC C0A6 8330 DCC8 241A 8DBF B71F 4DCE
7F76 7DCB C721 9CA0 0C9A F816 0CE6 1CF3
1542 FBE1 DF27 ED75 11D7 568A 72EC 2FE3
6C00 A5E2 53F2 5BF7 86B1 A516 A06F 07F0
6C1E ED7A 4A94 6E55 DF85 B6CC 810D 0853
BACF 6C1E AE02 C94C 2329 CB8A 7B90 B89B
0141 3C74 8C51 653B 8140 988D 0C0B 79B1
259A 08BB 57AD A37C 1A35 CA5C F8DF 715A
9C30 BA32 800C C8E2 3623 587C 4184 3FBA
4A40 258D 5756 F9E0 2156 3531 7B7E 6110
5790 7BE7 4B81 063C E7A3 F85E 33CB 7C5C
11C6 8193 6F10 7CEE 7EEE EDFB 26B2 8BDD
CD5A EC31 B36C B105 DCC1 130E AB8C A39B
F343 D97E 7CCE 78A5 5AB2 2A94 D73D BF82
38F3 D14A 38F1 989F 4F43 94EA 9505 3E30
B1CA 8CA4 9B3E 7AEF 5383 BAF2 463B 2650
B649 D9E8 E8F4 53B4 23F7 F92F CF17 46A4
2204 7FF8 A5AC 0480 5DD5 3173 6AB4 038F
8779 A8C6 8E12 3A4E FD2F 591C 7973 EAA8
BAD0 6ED8 DD2A 785B C15A A1C5 1A68 461A
B345 C931 9030 D265 51B2 1353 4586 07
        padding: OAEP
        unmaskedDB: CF83 E135 7EEF B8BD F154 2850 D66D 8007
D620 E405 0B57 15DC 83F4 A921 D36C E9CE
47D0 D13C 5D85 F2B0 FF83 18D2 877E EC2F
63B9 31BD 4741 7A81 A538 327A F927 DA3E
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0001 6865 6C6C 6F
        OutputSize: 5
      --rsa_decrypt
    --rsaDecryptBytes
    decrypt: Elapsed time: 157 millisec
    Success.
  --DecryptStringENC
--ChilkatLog

I can provide you with a build that has this extra logging -- just let me know exactly which build (iOS? .NET for some framework?, etc.) If you pass something to Chilkat for decryption, and the exptmod produces garbage output (i.e. not conforming to OAEP padding), then either the input data was corrupted, or the wrong key was used.


Answer

Good evening and thank you for your reply. Very informative. I do understand the basics of RSA and this helped elucidate it even further.

To your point about the wrong public / private key being used for the process - I do not believe this is the case as I have debugged and compared the keys being used already. If one takes the same RSA key pair using Bouncycastle and Chilkat (configured per my description above), the resulting cipher is decrypt-able only on the platform it was encrypted with - if the cipher is crossed to the other platform (all else equal) I get the errors described.

Of course, there is a good enough chance I am doing something incredible stupid, but perhaps there is a problem with either library. I am unsure which. I do, however, have the benefit of being able to inspect the OAEP implementation within Bouncycastle. I have not yet taken the time to dissect it per RFC2437.

Please provide your modified library for Cocoa (ObjC, OSX). Also, I want to call out the fact that your support has been phenomenal and I really do appreciate your time.

Cheers!


Answer

Here is the verbose log from decrypting the cipher from BouncyCastle.

    ChilkatLog:

      DecryptBytes(51ms):

        DllDate: Nov  5 2015

        ChilkatVersion: 9.5.0.54

        UnlockPrefix: XXXXXXXX

        Architecture: Little Endian; 64-bit

        Language: Cocoa Objective-C

        VerboseLogging: 1

        usePrivateKey: 1

        rsaDecryptBytes(51ms):

          rsa_decrypt(51ms):

            KeyType: Private

            InputSize: 512

            Padding: OAEP

            HashAlg: SHA-512

            ParamLen: 0

            ModulusBitLen: 4096

            inlen: 512

            modulus_bytelen: 512

            modulus_bitlen: 4096

            bigEndian: 1

            beforeExptMod: 1C1C 9ACA DDB3 F07A E5B3 E2E4 072F 0A00

    6C92 7F69 F826 0F4A 2749 B6F7 DD7B C137

    DAA3 6ABD 726F C544 E8BE F2D7 91BD DEE2

    7781 C5DC 244F 5E46 D3DA B319 595C CAF4

    D32A 6803 7A62 842D 80F8 F1F9 1263 0A4F

    4093 693F 76F9 BE96 470D 2720 3CD6 6E4D

    9C30 D96E DF34 FB84 D6FA 5A73 A596 9369

    C162 C430 C507 9D4F D20C 9437 9B5D DAC1

    FD1A 6730 68EC 80EC 9952 8DC2 65C3 12C8

    1DCD 585E 2574 9357 B21D 9573 29EB 484B

    F61A EF6D 4DDB 2562 8B56 601D 10D5 02BD

    8E18 BC83 DE1A 24C1 16E9 E5CD 7B2C 428E

    23AA 78D2 428A A3CA CDD4 72DF 95D2 3D94

    05F3 2902 0DD8 F435 9147 1ABB 3C79 6E5B

    0289 444C 5F11 C194 E996 774B 5582 F0E7

    3C22 2E06 AACF FF80 9431 8C66 0CA1 1A24

    71F7 65FF 7B51 E5A7 9125 F037 17EB BD02

    BA3F DC6A 4D44 3F5B FF03 AE12 683B E4A6

    0792 CAA6 6F34 73DB 83CF F75F E101 D742

    DBF4 1EBF A6FB CCC2 1760 93EB DCDE D041

    1D8E E015 84C2 97D6 551F 5B46 DCA1 4AB6

    8E23 7B7C 7DB9 4825 4F62 F34F FE20 905A

    F0F7 B98B 31D9 59D4 22D9 CEB1 1B1E DCFE

    F9AF 4938 4196 F3B4 79AA 5DB5 F588 F5B9

    FB3E B472 BFF4 4829 DCAD 541C 267B 5B51

    B6C5 56E0 C297 A094 695E 7799 59C3 A391

    D6AE 4088 E840 DB2A 49B4 2C32 F9FD 5746

    AD5C 3478 A957 FFEF EED0 9322 E1B7 4550

    5EF7 89D3 1A1D FB5F 7F73 F9AE FFD1 DFEC

    D831 2066 9B99 C749 6C07 E799 F92B E587

    67DB 075A 66EA 7EB9 453D 6BFA B7D9 885C

    46D8 2235 E753 A1A0 A399 C172 406C FF74

            inlen: 512

            afterExptMod: 7E4C 67FB ABA5 027F E362 39F7 C6C8 4D7E

    01E2 44AC 46CA 8B9A C9EE 0DBF 102F 6E00

    646A B13A 244E 6C6C F1D3 A81F 7476 37EC

    7403 2F09 6BAA 31B3 1C23 7818 3356 2A0B

    D190 1CF1 CE56 8EAC 98BE B554 8144 1720

    661E 6766 0233 2C05 2346 EB87 ADA7 3A96

    E79B 9794 05ED 9C19 F2F4 171B 642F 7900

    1A11 4D30 F458 FC2F FF54 4993 D8BA A67C

    F7FF 33A6 CC09 28F9 3CB5 57BC 40B1 0281

    F4E2 F46D 7050 B210 ABA8 62B7 24C4 8E55

    0B2D D69D D997 45D3 2C17 88C4 2442 A48B

    C9E2 F5DC 9FCC E8EA FCB1 62DA 9143 B5F4

    872B 5298 414E E984 FD29 CCCF 557E 1B49

    4ADA 2D3E 0E76 A328 A4A8 79C9 3ED0 0E48

    1EAF 486B 3362 FA42 487A 0AFF D5DB 5105

    A0A0 8D80 EB67 DC56 8E98 E0CD FE8A 7023

    63FB 4045 12FF 49AD 349A 9D9E 8B3F DA97

    65C3 53F4 BE3E 9023 DC9B 00E6 7065 2A1B

    C517 A6B4 FB5C 9202 FB51 C826 A9B8 F0FF

    DE34 FB06 A58D 5DEB 9AA0 A684 707A 302D

    064E BA87 CD91 4D46 5DCE F79B E4AE B45B

    F162 2514 8CB3 9601 9291 78CA 725D F9C9

    2A37 B564 9797 4932 888C 8C0A DDEC C09D

    8833 583C 5998 5B94 1A71 5A3A 4C43 2B14

    202A E158 C968 EDF2 CB22 B20A B7FF 538D

    8BD7 D4CA ABE3 0E18 D70E 6061 54BF E67F

    3D5A 3E90 D114 520F CC92 9908 1067 CC4F

    5963 16F9 C780 52C5 E923 A483 00D0 9EF4

    601B AFEA F0B5 D29F 6AF4 B83A 5AD7 D21A

    FB6C 6283 CCC7 F305 1455 63EB E9F0 A23D

    58B2 1C7B BFB2 954F A99D F821 9752 C321

    F3F1 490B 8A81 527D 7E52 88D3 B632 66E5

            padding: OAEP

            No leading zero byte for OAEP decoding.

            OAEP decoding failed.

          --rsa_decrypt

        --rsaDecryptBytes

        Failed.

      --DecryptBytes

    --ChilkatLog