From 72b896eef6e56ea190a573683e98098115ef0655 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Thu, 7 Dec 2006 17:00:05 +0000 Subject: [PATCH] Added protocol value to key agreement payload. --- lib/silccore/silcauth.c | 25 ++++++++++++++++++------- lib/silccore/silcauth.h | 25 +++++++++++++++++++++---- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/lib/silccore/silcauth.c b/lib/silccore/silcauth.c index 22ba281a..25aadd8f 100644 --- a/lib/silccore/silcauth.c +++ b/lib/silccore/silcauth.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 2001 - 2005 Pekka Riikonen + Copyright (C) 2001 - 2006 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -458,7 +458,8 @@ SilcBool silc_auth_verify_data(const unsigned char *payload, struct SilcKeyAgreementPayloadStruct { SilcUInt16 hostname_len; unsigned char *hostname; - SilcUInt32 port; + SilcUInt16 protocol; + SilcUInt16 port; }; /* Parses and returns an allocated Key Agreement payload. */ @@ -473,16 +474,17 @@ silc_key_agreement_payload_parse(const unsigned char *payload, SILC_LOG_DEBUG(("Parsing Key Agreement Payload")); - silc_buffer_set(&buffer, (unsigned char *)payload, payload_len); newp = silc_calloc(1, sizeof(*newp)); if (!newp) return NULL; /* Parse the payload */ + silc_buffer_set(&buffer, (unsigned char *)payload, payload_len); ret = silc_buffer_unformat(&buffer, SILC_STR_UI16_NSTRING_ALLOC(&newp->hostname, &newp->hostname_len), - SILC_STR_UI_INT(&newp->port), + SILC_STR_UI_SHORT(&newp->protocol), + SILC_STR_UI_SHORT(&newp->port), SILC_STR_END); if (ret == -1 || newp->hostname_len > silc_buffer_len(&buffer) - 6) { silc_free(newp); @@ -495,7 +497,8 @@ silc_key_agreement_payload_parse(const unsigned char *payload, /* Encodes the Key Agreement protocol and returns the encoded buffer */ SilcBuffer silc_key_agreement_payload_encode(const char *hostname, - SilcUInt32 port) + SilcUInt16 protocol, + SilcUInt16 port) { SilcBuffer buffer; SilcUInt32 len = hostname ? strlen(hostname) : 0; @@ -508,7 +511,8 @@ SilcBuffer silc_key_agreement_payload_encode(const char *hostname, silc_buffer_format(buffer, SILC_STR_UI_SHORT(len), SILC_STR_UI_XNSTRING(hostname, len), - SILC_STR_UI_INT(port), + SILC_STR_UI_SHORT(protocol), + SILC_STR_UI_SHORT(port), SILC_STR_END); return buffer; @@ -531,9 +535,16 @@ char *silc_key_agreement_get_hostname(SilcKeyAgreementPayload payload) return payload->hostname; } +/* Returns the protocol in the payload */ + +SilcUInt16 silc_key_agreement_get_protocol(SilcKeyAgreementPayload payload) +{ + return payload->protocol; +} + /* Returns the port in the payload */ -SilcUInt32 silc_key_agreement_get_port(SilcKeyAgreementPayload payload) +SilcUInt16 silc_key_agreement_get_port(SilcKeyAgreementPayload payload) { return payload->port; } diff --git a/lib/silccore/silcauth.h b/lib/silccore/silcauth.h index f707dca3..31bbce07 100644 --- a/lib/silccore/silcauth.h +++ b/lib/silccore/silcauth.h @@ -389,7 +389,8 @@ silc_key_agreement_payload_parse(const unsigned char *payload, * SYNOPSIS * * SilcBuffer silc_key_agreement_payload_encode(char *hostname, - * SilcUInt32 port); + * SilcUInt16 protocol, + * SilcUInt16 port); * * DESCRIPTION * @@ -397,7 +398,8 @@ silc_key_agreement_payload_parse(const unsigned char *payload, * ***/ SilcBuffer silc_key_agreement_payload_encode(const char *hostname, - SilcUInt32 port); + SilcUInt16 protocol, + SilcUInt16 port); /****f* silccore/SilcAuthAPI/silc_key_agreement_payload_free * @@ -427,11 +429,26 @@ void silc_key_agreement_payload_free(SilcKeyAgreementPayload payload); ***/ char *silc_key_agreement_get_hostname(SilcKeyAgreementPayload payload); +/****f* silccore/SilcAuthAPI/silc_key_agreement_get_protocol + * + * SYNOPSIS + * + * SilcUInt16 + * silc_key_agreement_get_protocol(SilcKeyAgreementPayload payload); + * + * DESCRIPTION + * + * Returns the protocol in the payload. The protocol is either TCP (0) + * or UDP (1). + * + ***/ +SilcUInt16 silc_key_agreement_get_protocol(SilcKeyAgreementPayload payload); + /****f* silccore/SilcAuthAPI/silc_key_agreement_get_port * * SYNOPSIS * - * SilcUInt32 silc_key_agreement_get_port(SilcKeyAgreementPayload payload); + * SilcUInt16 silc_key_agreement_get_port(SilcKeyAgreementPayload payload); * * DESCRIPTION * @@ -440,6 +457,6 @@ char *silc_key_agreement_get_hostname(SilcKeyAgreementPayload payload); * the SILC Key Exchange protocol. * ***/ -SilcUInt32 silc_key_agreement_get_port(SilcKeyAgreementPayload payload); +SilcUInt16 silc_key_agreement_get_port(SilcKeyAgreementPayload payload); #endif -- 2.24.0