Esempio n. 1
0
static void
test_rsa(const char *pemstr)
{
	char buffer[2048];
	int ret;
	rsakey_t *rsakey;

	rsakey = rsakey_init_pem(pemstr);
	if (!rsakey) {
		printf("Initializing RSA failed\n");
		return;
	}

	rsakey_sign(rsakey, buffer, sizeof(buffer), CHALLENGE,
	            ipaddr, sizeof(ipaddr), hwaddr, sizeof(hwaddr));
	printf("Signature:\n%s\n", buffer);

	ret = rsakey_decrypt(rsakey, (unsigned char *)buffer, sizeof(buffer), AESENC);
	printf("Decrypted length: %d\n", ret);

	rsakey_destroy(rsakey);
}
Esempio n. 2
0
raop_t *
raop_init(int max_clients, raop_callbacks_t *callbacks, const char *pemkey, int *error)
{
    raop_t *raop;
    httpd_t *httpd;
    rsakey_t *rsakey;
    httpd_callbacks_t httpd_cbs;

    assert(callbacks);
    assert(max_clients > 0);
    assert(max_clients < 100);
    assert(pemkey);

    /* Initialize the network */
    if (netutils_init() < 0) {
        return NULL;
    }

    /* Validate the callbacks structure */
    if (!callbacks->audio_init ||
            !callbacks->audio_process ||
            !callbacks->audio_destroy) {
        return NULL;
    }

    /* Allocate the raop_t structure */
    raop = calloc(1, sizeof(raop_t));
    if (!raop) {
        return NULL;
    }

    /* Initialize the logger */
    raop->logger = logger_init();

    /* Set HTTP callbacks to our handlers */
    memset(&httpd_cbs, 0, sizeof(httpd_cbs));
    httpd_cbs.opaque = raop;
    httpd_cbs.conn_init = &conn_init;
    httpd_cbs.conn_request = &conn_request;
    httpd_cbs.conn_destroy = &conn_destroy;

    /* Initialize the http daemon */
    httpd = httpd_init(raop->logger, &httpd_cbs, max_clients);
    if (!httpd) {
        free(raop);
        return NULL;
    }

    /* Copy callbacks structure */
    memcpy(&raop->callbacks, callbacks, sizeof(raop_callbacks_t));

    /* Initialize RSA key handler */
    rsakey = rsakey_init_pem(pemkey);
    if (!rsakey) {
        free(httpd);
        free(raop);
        return NULL;
    }

    raop->httpd = httpd;
    raop->rsakey = rsakey;

    return raop;
}