Пример #1
0
wi_data_t * wi_rsa_private_key(wi_rsa_t *rsa) {
	unsigned char	*buffer;
	int				length;

	if(!rsa->private_key) {
		buffer = NULL;
		length = i2d_RSAPrivateKey(rsa->rsa, &buffer);
		
		if(length <= 0) {
			wi_error_set_openssl_error();
			
			return NULL;
		}
		
		rsa->private_key = wi_data_init_with_bytes(wi_data_alloc(), buffer, length);

		OPENSSL_free(buffer);
	}
	
	return rsa->private_key;
}
Пример #2
0
wi_data_t * wi_string_encoding_data_from_utf8_bytes(wi_string_encoding_t *encoding, const char *buffer, wi_uinteger_t size) {
    wi_data_t       *data;
    char            *inbuffer, *outbuffer, *outbufferp;
    wi_uinteger_t   inbytes, outbytes;
    size_t          bytes, inbytesleft, outbytesleft;
    iconv_t         iconvd;
    
    iconvd = iconv_open(wi_string_utf8_string(encoding->target_encoding), wi_string_utf8_string(encoding->utf8_encoding));
    
    if(iconvd == (iconv_t) -1) {
        wi_error_set_errno(errno);
        
        return NULL;
    }
    
    inbytes = inbytesleft = size;
    outbytes = outbytesleft = size * 4;
    
    inbuffer = (char *) buffer;
    outbuffer = outbufferp = wi_malloc(outbytes);
    
    bytes = iconv(iconvd, &inbuffer, &inbytesleft, &outbuffer, &outbytesleft);
    
    if(bytes == (size_t) -1) {
        wi_free(outbufferp);
        iconv_close(iconvd);
        
        wi_error_set_errno(errno);
        
        return NULL;
    }
    
    data = wi_data_init_with_bytes(wi_data_alloc(), outbufferp, outbytes - outbytesleft);
    
    wi_free(outbufferp);
    iconv_close(iconvd);
    
    return wi_autorelease(data);
}
Пример #3
0
static wi_runtime_instance_t * _wi_data_copy(wi_runtime_instance_t *instance) {
	wi_data_t		*data = instance;
	
	return wi_data_init_with_bytes(wi_data_alloc(), data->bytes, data->length);
}
Пример #4
0
wi_data_t * wi_data_with_bytes(const void *bytes, wi_uinteger_t length) {
	return wi_autorelease(wi_data_init_with_bytes(wi_data_alloc(), bytes, length));
}