From 2e59f9740a29439df7c7a56cf0ae83dec3081d31 Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Mon, 11 Aug 2014 13:49:21 -0400 Subject: initial import of debian version from mentors --- .../crypto_auth/hmacsha256/auth_hmacsha256_api.c | 11 +++ src/libsodium/crypto_auth/hmacsha256/checksum | 1 + src/libsodium/crypto_auth/hmacsha256/cp/api.h | 9 ++ .../crypto_auth/hmacsha256/cp/hmac_hmacsha256.c | 110 +++++++++++++++++++++ .../crypto_auth/hmacsha256/cp/verify_hmacsha256.c | 9 ++ 5 files changed, 140 insertions(+) create mode 100644 src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c create mode 100644 src/libsodium/crypto_auth/hmacsha256/checksum create mode 100644 src/libsodium/crypto_auth/hmacsha256/cp/api.h create mode 100644 src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c create mode 100644 src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c (limited to 'src/libsodium/crypto_auth/hmacsha256') diff --git a/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c b/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c new file mode 100644 index 0000000..5af3388 --- /dev/null +++ b/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c @@ -0,0 +1,11 @@ +#include "crypto_auth_hmacsha256.h" + +size_t +crypto_auth_hmacsha256_bytes(void) { + return crypto_auth_hmacsha256_BYTES; +} + +size_t +crypto_auth_hmacsha256_keybytes(void) { + return crypto_auth_hmacsha256_KEYBYTES; +} diff --git a/src/libsodium/crypto_auth/hmacsha256/checksum b/src/libsodium/crypto_auth/hmacsha256/checksum new file mode 100644 index 0000000..2fa9604 --- /dev/null +++ b/src/libsodium/crypto_auth/hmacsha256/checksum @@ -0,0 +1 @@ +3bd7abd4f4dce04396f2ac7cb1cff70607f692411c49a1563b037d31e1662632 diff --git a/src/libsodium/crypto_auth/hmacsha256/cp/api.h b/src/libsodium/crypto_auth/hmacsha256/cp/api.h new file mode 100644 index 0000000..cd4d38e --- /dev/null +++ b/src/libsodium/crypto_auth/hmacsha256/cp/api.h @@ -0,0 +1,9 @@ + +#include "crypto_auth_hmacsha256.h" + +#define crypto_auth crypto_auth_hmacsha256 +#define crypto_auth_verify crypto_auth_hmacsha256_verify +#define crypto_auth_BYTES crypto_auth_hmacsha256_BYTES +#define crypto_auth_KEYBYTES crypto_auth_hmacsha256_KEYBYTES +#define crypto_auth_IMPLEMENTATION crypto_auth_hmacsha256_IMPLEMENTATION +#define crypto_auth_VERSION crypto_auth_hmacsha256_VERSION diff --git a/src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c b/src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c new file mode 100644 index 0000000..9cd69ac --- /dev/null +++ b/src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c @@ -0,0 +1,110 @@ + +/*- + * Copyright 2005,2007,2009 Colin Percival + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "api.h" +#include "crypto_auth_hmacsha256.h" +#include "crypto_hash_sha256.h" +#include "utils.h" + +#include + +#include +#include + +int +crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen) +{ + unsigned char pad[64]; + unsigned char khash[32]; + size_t i; + + if (keylen > 64) { + crypto_hash_sha256_init(&state->ictx); + crypto_hash_sha256_update(&state->ictx, key, keylen); + crypto_hash_sha256_final(&state->ictx, khash); + key = khash; + keylen = 32; + } + crypto_hash_sha256_init(&state->ictx); + memset(pad, 0x36, 64); + for (i = 0; i < keylen; i++) { + pad[i] ^= key[i]; + } + crypto_hash_sha256_update(&state->ictx, pad, 64); + + crypto_hash_sha256_init(&state->octx); + memset(pad, 0x5c, 64); + for (i = 0; i < keylen; i++) { + pad[i] ^= key[i]; + } + crypto_hash_sha256_update(&state->octx, pad, 64); + + sodium_memzero((void *) khash, sizeof khash); + + return 0; +} + +int +crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen) +{ + crypto_hash_sha256_update(&state->ictx, in, inlen); + + return 0; +} + +int +crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out) +{ + unsigned char ihash[32]; + + crypto_hash_sha256_final(&state->ictx, ihash); + crypto_hash_sha256_update(&state->octx, ihash, 32); + crypto_hash_sha256_final(&state->octx, out); + + sodium_memzero((void *) ihash, sizeof ihash); + + return 0; +} + +int +crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) +{ + crypto_auth_hmacsha256_state state; + + crypto_auth_hmacsha256_init(&state, k, crypto_auth_KEYBYTES); + crypto_auth_hmacsha256_update(&state, in, inlen); + crypto_auth_hmacsha256_final(&state, out); + + return 0; +} diff --git a/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c b/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c new file mode 100644 index 0000000..b6cf489 --- /dev/null +++ b/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c @@ -0,0 +1,9 @@ +#include "api.h" +#include "crypto_verify_32.h" + +int crypto_auth_verify(const unsigned char *h,const unsigned char *in,unsigned long long inlen,const unsigned char *k) +{ + unsigned char correct[32]; + crypto_auth(correct,in,inlen,k); + return crypto_verify_32(h,correct); +} -- cgit v1.2.3