Сохранить BIO в char * (из SMIME_write_CMS) - PullRequest
2 голосов
/ 08 февраля 2012

Я хочу сохранить (передать / скопировать) БИО в массив символов.Когда я знаю размер, он работает, но в остальном нет.

Например, я могу сохранить содержимое моего char * в BIO, используя это

const unsigned char* data = ...    
myBio = BIO_new_mem_buf((void*)data, strlen(data));

Но когда я пытаюсь использоватьSMIME_write_CMS, который принимает BIO (то, что я создал ранее) для вывода, он не работает.

const int SIZE = 50000;
unsigned char *temp = malloc(SIZE);
memset(temp, 0, SIZE);

out = BIO_new_mem_buf((void*)temp, SIZE);
if (!out) {
    NSLog(@"Couldn't create new file!");
    assert(false);
}


int finished = SMIME_write_CMS(out, cms, in, flags);
if (!finished) {
    NSLog(@"SMIME write CMS didn't succeed!");
    assert(false);
}

printf("cms encrypted: %s\n", temp);

NSLog(@"All succeeded!");

Ссылка OpenSSL использует прямой вывод файла с BIO.Это работает, но я не могу использовать BIO_new_file () в target-c ...: - /

out = BIO_new_file("smencr.txt", "w");
if (!out)
    goto err;

/* Write out S/MIME message */
if (!SMIME_write_CMS(out, cms, in, flags))
    goto err;

У вас, ребята, есть предложения?

1 Ответ

3 голосов
/ 08 февраля 2012

Я бы посоветовал попробовать использовать РАЗМЕР-1, таким образом, вы гарантированно прекращаете его. В противном случае возможно, что он просто переполнен буфером.

out = BIO_new_mem_buf((void*)temp, SIZE-1);

Дайте мне знать, если это поможет.

Edit:

При использовании BIO_new_mem_buf() это буфер только для чтения, поэтому вы не можете писать в него. Если вы хотите записать в память, используйте:

BIO *bio = BIO_new(BIO_s_mem());
...