Affected files are apps/silcd/protocol.c and
lib/silcclient/protocol.c.
+ * Added SILC_HASH_MAXLEN to lib/silccrypt/silchash.h, and changed
+ all hash buffers to use that instead of fixed values.
+
Wed Nov 16 15:47:12 EET 2005 Pekka Riikonen <priikone@silcnet.org>
* Added SHA-256 to crypto library. The SHA-256 takes now
if (mode_mask & SILC_CHANNEL_MODE_HMAC) {
if (!(channel->mode & SILC_CHANNEL_MODE_HMAC)) {
/* HMAC to use protect the traffic */
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
SilcHmac newhmac;
/* Get hmac */
/* Hmac mode is unset. Remove the hmac and revert back to
default hmac */
SilcHmac newhmac;
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
hmac = channel->hmac_name;
/* Delete old hmac and allocate default one */
SilcServer server = cmd->server;
char *add_nick, *del_nick;
SilcUInt32 add_nick_len, del_nick_len, tmp_len, pk_len;
- unsigned char hash[16], *tmp, *pk, *nick;
+ unsigned char hash[SILC_HASH_MAXLEN], *tmp, *pk, *nick;
SilcClientEntry client;
SilcClientID *client_id = NULL;
SilcUInt16 old_ident;
if (server->server_type != SILC_ROUTER && !client->data.public_key) {
SilcAttributePayload attr;
SilcAttributeObjPk pk;
- unsigned char f[20];
+ unsigned char f[SILC_HASH_MAXLEN];
SilcDList attrs = silc_attribute_payload_parse(tmp, len);
SILC_LOG_DEBUG(("Take client public key from attributes"));
{
SilcIDCacheList list = NULL;
SilcIDCacheEntry id_cache = NULL;
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
SilcClientID client_id;
SILC_LOG_DEBUG(("Start"));
/* Get the hmac */
tmp = silc_argument_get_arg_type(args, 4, &tmp_len);
if (tmp) {
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
if (channel->hmac)
silc_hmac_free(channel->hmac);
SilcUInt32 key_len)
{
int i;
- unsigned char channel_key[32], hash[32];
+ unsigned char channel_key[32], hash[SILC_HASH_MAXLEN];
SilcUInt32 len;
if (channel->mode & SILC_CHANNEL_MODE_PRIVKEY) {
{
SilcChannelKeyPayload payload = NULL;
SilcChannelID *id = NULL;
- unsigned char *tmp, hash[32];
+ unsigned char *tmp, hash[SILC_HASH_MAXLEN];
SilcUInt32 tmp_len;
char *cipher;
SilcBuffer key_payload,
SilcChannelEntry channel)
{
- unsigned char *id_string, *key, *cipher, *hmac, hash[32];
+ unsigned char *id_string, *key, *cipher, *hmac, hash[SILC_HASH_MAXLEN];
SilcUInt32 tmp_len;
SilcChannelID *id;
SilcChannelKeyPayload payload;
SilcChannelPrivateKey *ret_key)
{
SilcChannelPrivateKey entry;
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
SilcSKEKeyMaterial *keymat;
assert(client && channel);
/* Get the hmac */
hmac = silc_argument_get_arg_type(args, 4, &tmp_len);
if (hmac) {
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
if (channel->hmac)
silc_hmac_free(channel->hmac);
} else if (!strcasecmp(cmd->argv[i], "-auth")) {
SilcPublicKey pubkey = cmd->client->public_key;
SilcPrivateKey privkey = cmd->client->private_key;
- unsigned char *pk, pkhash[20], *pubdata;
+ unsigned char *pk, pkhash[SILC_HASH_MAXLEN], *pubdata;
SilcUInt32 pk_len;
if (cmd->argc >= i + 3) {
SilcUInt32 data_len)
{
SilcHash new_hash = NULL;
- unsigned char h[32];
+ unsigned char h[SILC_HASH_MAXLEN];
char *ret;
if (!hash) {
{
SilcHash new_hash = NULL;
char *babbleprint;
- unsigned char hval[32];
+ unsigned char hval[SILC_HASH_MAXLEN];
unsigned int a, b, c, d, e, check;
int i, k, out_len;
/* Default HASH function in the SILC protocol */
#define SILC_DEFAULT_HASH "sha1"
+#define SILC_HASH_MAXLEN 64
/* Macros */
{
SilcHash hash = hmac->hash;
SilcUInt32 block_len;
- unsigned char hvalue[20];
+ unsigned char hvalue[SILC_HASH_MAXLEN];
int i;
memset(hmac->inner_pad, 0, sizeof(hmac->inner_pad));
SilcUInt32 truncated_len,
unsigned char *return_hash)
{
- unsigned char hvalue[20];
+ unsigned char hvalue[SILC_HASH_MAXLEN];
SILC_LOG_DEBUG(("Making HMAC for message"));
SilcUInt32 *return_len)
{
SilcHash hash = hmac->hash;
- unsigned char mac[20];
+ unsigned char mac[SILC_HASH_MAXLEN];
silc_hash_final(hash, mac);
silc_hash_init(hash);
unsigned char *src, SilcUInt32 src_len,
unsigned char *dst, SilcUInt32 *dst_len)
{
- unsigned char hashr[32];
+ unsigned char hashr[SILC_HASH_MAXLEN];
SilcUInt32 hash_len;
int ret;
unsigned char *data,
SilcUInt32 data_len)
{
- unsigned char hashr[32];
+ unsigned char hashr[SILC_HASH_MAXLEN];
SilcUInt32 hash_len;
int ret;
/* Compute signature data if we are doing mutual authentication */
if (private_key && ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL) {
- unsigned char hash[32], sign[2048 + 1];
+ unsigned char hash[SILC_HASH_MAXLEN], sign[2048 + 1];
SilcUInt32 hash_len, sign_len;
SILC_LOG_DEBUG(("We are doing mutual authentication"));
void *context)
{
SilcSKEKEPayload *payload;
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
SilcUInt32 hash_len;
SilcPublicKey public_key = NULL;
if (ske->start_payload &&
ske->start_payload->flags & SILC_SKE_SP_FLAG_MUTUAL) {
SilcPublicKey public_key = NULL;
- unsigned char hash[32];
+ unsigned char hash[SILC_HASH_MAXLEN];
SilcUInt32 hash_len;
/* Decode the public key */
SilcSKEStatus status = SILC_SKE_STATUS_OK;
SilcBuffer payload_buf;
SilcMPInt *KEY;
- unsigned char hash[32], sign[2048 + 1], *pk;
+ unsigned char hash[SILC_HASH_MAXLEN], sign[2048 + 1], *pk;
SilcUInt32 hash_len, sign_len, pk_len;
SILC_LOG_DEBUG(("Start"));
SilcSKEKeyMaterial *key)
{
SilcBuffer buf;
- unsigned char hashd[32];
+ unsigned char hashd[SILC_HASH_MAXLEN];
SilcUInt32 hash_len = req_hmac_key_len;
SilcUInt32 enc_key_len = req_enc_key_len / 8;
buf->data[0] = 2;
if (enc_key_len > hash_len) {
SilcBuffer dist;
- unsigned char k1[32], k2[32], k3[32];
+ unsigned char k1[SILC_HASH_MAXLEN], k2[SILC_HASH_MAXLEN],
+ k3[SILC_HASH_MAXLEN];
unsigned char *dtmp;
/* XXX */
buf->data[0] = 3;
if (enc_key_len > hash_len) {
SilcBuffer dist;
- unsigned char k1[32], k2[32], k3[32];
+ unsigned char k1[SILC_HASH_MAXLEN], k2[SILC_HASH_MAXLEN],
+ k3[SILC_HASH_MAXLEN];
unsigned char *dtmp;
/* XXX */