[Spice-devel] [PATCH 3/9] Move RSA key generation for ticket to a helper function
Christophe Fergeau
cfergeau at redhat.com
Wed Mar 12 11:27:37 PDT 2014
---
server/reds.c | 68 +++++++++++++++++++++++++++++++++++------------------------
1 file changed, 41 insertions(+), 27 deletions(-)
diff --git a/server/reds.c b/server/reds.c
index 1e169ad..19a3298 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -1327,6 +1327,46 @@ static void reds_channel_init_auth_caps(RedLinkInfo *link, RedChannel *channel)
}
+static int reds_generate_ticket_pubkey(RedLinkInfo *link, SpiceLinkReply *ack)
+{
+ BUF_MEM *bmBuf;
+ BIO *bio = NULL;
+ bool ret = FALSE;
+
+ if (!(link->tiTicketing.rsa = RSA_new())) {
+ spice_warning("RSA new failed");
+ goto end;
+ }
+
+ if (!(bio = BIO_new(BIO_s_mem()))) {
+ spice_warning("BIO new failed");
+ goto end;
+ }
+
+ if (RSA_generate_key_ex(link->tiTicketing.rsa,
+ SPICE_TICKET_KEY_PAIR_LENGTH,
+ link->tiTicketing.bn,
+ NULL) != 1) {
+ spice_warning("Failed to generate %d bits RSA key: %s",
+ SPICE_TICKET_KEY_PAIR_LENGTH,
+ ERR_error_string(ERR_get_error(), NULL));
+ goto end;
+ }
+ link->tiTicketing.rsa_size = RSA_size(link->tiTicketing.rsa);
+
+ i2d_RSA_PUBKEY_bio(bio, link->tiTicketing.rsa);
+ BIO_get_mem_ptr(bio, &bmBuf);
+ memcpy(ack->pub_key, bmBuf->data, sizeof(ack->pub_key));
+ ret = TRUE;
+
+end:
+ if (bio != NULL) {
+ BIO_free(bio);
+ }
+ return ret;
+}
+
+
static bool test_link_capability(RedLinkInfo *link, uint32_t cap)
{
uint32_t *caps = (uint32_t *)((uint8_t *)link->link_mess + link->link_mess->caps_offset);
@@ -1341,8 +1381,6 @@ static int reds_send_link_ack(RedLinkInfo *link)
SpiceLinkReply ack;
RedChannel *channel;
RedChannelCapabilities *channel_caps;
- BUF_MEM *bmBuf;
- BIO *bio;
int ret = FALSE;
header.magic = SPICE_MAGIC;
@@ -1366,31 +1404,8 @@ static int reds_send_link_ack(RedLinkInfo *link)
ack.num_channel_caps = channel_caps->num_caps;
header.size += (ack.num_common_caps + ack.num_channel_caps) * sizeof(uint32_t);
ack.caps_offset = sizeof(SpiceLinkReply);
-
- if (!(link->tiTicketing.rsa = RSA_new())) {
- spice_warning("RSA new failed");
- return FALSE;
- }
-
- if (!(bio = BIO_new(BIO_s_mem()))) {
- spice_warning("BIO new failed");
- return FALSE;
- }
-
- if (RSA_generate_key_ex(link->tiTicketing.rsa,
- SPICE_TICKET_KEY_PAIR_LENGTH,
- link->tiTicketing.bn,
- NULL) != 1) {
- spice_warning("Failed to generate %d bits RSA key: %s",
- SPICE_TICKET_KEY_PAIR_LENGTH,
- ERR_error_string(ERR_get_error(), NULL));
+ if (!reds_generate_ticket_pubkey(link, &ack))
goto end;
- }
- link->tiTicketing.rsa_size = RSA_size(link->tiTicketing.rsa);
-
- i2d_RSA_PUBKEY_bio(bio, link->tiTicketing.rsa);
- BIO_get_mem_ptr(bio, &bmBuf);
- memcpy(ack.pub_key, bmBuf->data, sizeof(ack.pub_key));
if (!reds_stream_write_all(link->stream, &header, sizeof(header)))
goto end;
@@ -1404,7 +1419,6 @@ static int reds_send_link_ack(RedLinkInfo *link)
ret = TRUE;
end:
- BIO_free(bio);
return ret;
}
--
1.8.5.3
More information about the Spice-devel
mailing list