Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert uint8_t to NSData

I have implemented publickey privatekey RSA encryption in iOS application based on the examples provided on the Apple Developer site.

It works perfectly if I encrypt and return the uint8_t cipherBuffer, and then decrypt from the uint8_t cipherBuffer. However I need to store the encrypted data to an .xcdata model as NSData.

The problem I'm having is reliably converting the uint8_t cipherBuffer to NSData and/or converting the NSData back to uint8_t when it's time to decrypt. The decrypted data appears to be truncated.

This is how I'm converting the uint8_t encrypted buffer to NSData:

return [NSData dataWithBytesNoCopy:cipherBuffer length:BUFFER_SIZE];

This is how I'm converting the encrypted NSData back to a uint8_t buffer when it is time to decrypt it:

uint8_t *cipherBuffer = (uint8_t*)[cipherText bytes];
like image 464
John M Avatar asked Mar 05 '26 06:03

John M


2 Answers

Thanks jgh and Jody;

I changed the encryption method to "malloc" the buffer and tried several approaches to write the bytes to NSData, wound up with:

return [NSData dataWithBytes:(const void *)cipherBuffer length:CIPHER_BUFFER_SIZE];

What finally fixed the issue was changing the way I was creating the uint8_t in the decryption method:

const uint8_t *cipherBuffer = (const uint8_t*)[data bytes];
like image 90
John M Avatar answered Mar 06 '26 20:03

John M


Without seeing how you're creating cipherBuffer, it's difficult to say exactly why it's not working. However, from the documentation on dataWithBytesNoCopy:

The returned object takes ownership of the bytes pointer and frees it on deallocation. Therefore, bytes must point to a memory block allocated with malloc.

If you're just declaring cipherBuffer as

uint8_t cipherBuffer[BUFFER_SIZE];

it may explain your problems. Instead, use malloc:

uint8_t* cipherBuffer = malloc(BUFFER_SIZE);
like image 23
jgh Avatar answered Mar 06 '26 20:03

jgh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!