summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/hmac/hmac.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/hmac/hmac.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lib/libcrypto/hmac/hmac.c b/src/lib/libcrypto/hmac/hmac.c
index f2e5f149e0..155e32a540 100644
--- a/src/lib/libcrypto/hmac/hmac.c
+++ b/src/lib/libcrypto/hmac/hmac.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: hmac.c,v 1.21 2014/07/11 08:44:48 jsing Exp $ */ 1/* $OpenBSD: hmac.c,v 1.22 2015/02/10 09:52:35 miod Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -60,6 +60,7 @@
60#include <stdlib.h> 60#include <stdlib.h>
61#include <string.h> 61#include <string.h>
62 62
63#include <openssl/err.h>
63#include <openssl/hmac.h> 64#include <openssl/hmac.h>
64 65
65int 66int
@@ -78,7 +79,10 @@ HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md,
78 if (key != NULL) { 79 if (key != NULL) {
79 reset = 1; 80 reset = 1;
80 j = EVP_MD_block_size(md); 81 j = EVP_MD_block_size(md);
81 OPENSSL_assert(j <= (int)sizeof(ctx->key)); 82 if ((size_t)j > sizeof(ctx->key)) {
83 EVPerr(EVP_F_HMAC_INIT_EX, EVP_R_BAD_BLOCK_LENGTH);
84 goto err;
85 }
82 if (j < len) { 86 if (j < len) {
83 if (!EVP_DigestInit_ex(&ctx->md_ctx, md, impl)) 87 if (!EVP_DigestInit_ex(&ctx->md_ctx, md, impl))
84 goto err; 88 goto err;
@@ -88,8 +92,11 @@ HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md,
88 &ctx->key_length)) 92 &ctx->key_length))
89 goto err; 93 goto err;
90 } else { 94 } else {
91 OPENSSL_assert(len >= 0 && 95 if ((size_t)len > sizeof(ctx->key)) {
92 len <= (int)sizeof(ctx->key)); 96 EVPerr(EVP_F_HMAC_INIT_EX,
97 EVP_R_BAD_KEY_LENGTH);
98 goto err;
99 }
93 memcpy(ctx->key, key, len); 100 memcpy(ctx->key, key, len);
94 ctx->key_length = len; 101 ctx->key_length = len;
95 } 102 }