Unify coding style
@sjaeckel integrated clang-format with formal coding style. Run his script and commit changes. There are pros and cons of this commit. Mixed coding style is a "broken window". A good single style simplifies reading and writing code. On the other hand, this is a big change which will lead to conflicts.
This commit is contained in:
240
src/crypto.c
240
src/crypto.c
@@ -20,13 +20,13 @@
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h> /* memset, memcpy */
|
||||
#include <string.h> /* memset, memcpy */
|
||||
|
||||
#include "common.h" /* xmpp_alloc */
|
||||
#include "ostypes.h" /* uint8_t, size_t */
|
||||
#include "common.h" /* xmpp_alloc */
|
||||
#include "ostypes.h" /* uint8_t, size_t */
|
||||
#include "sha1.h"
|
||||
#include "snprintf.h" /* xmpp_snprintf */
|
||||
#include "strophe.h" /* xmpp_ctx_t, xmpp_free */
|
||||
#include "snprintf.h" /* xmpp_snprintf */
|
||||
#include "strophe.h" /* xmpp_ctx_t, xmpp_free */
|
||||
|
||||
struct _xmpp_sha1_t {
|
||||
xmpp_ctx_t *xmpp_ctx;
|
||||
@@ -91,7 +91,8 @@ char *xmpp_sha1(xmpp_ctx_t *ctx, const unsigned char *data, size_t len)
|
||||
*
|
||||
* @ingroup Digests
|
||||
*/
|
||||
void xmpp_sha1_digest(const unsigned char *data, size_t len,
|
||||
void xmpp_sha1_digest(const unsigned char *data,
|
||||
size_t len,
|
||||
unsigned char *digest)
|
||||
{
|
||||
crypto_SHA1((const uint8_t *)data, len, digest);
|
||||
@@ -214,52 +215,44 @@ void xmpp_sha1_to_digest(xmpp_sha1_t *sha1, unsigned char *digest)
|
||||
memcpy(digest, sha1->digest, SHA1_DIGEST_SIZE);
|
||||
}
|
||||
|
||||
|
||||
/* Base64 encoding routines. Implemented according to RFC 3548. */
|
||||
|
||||
/* map of all byte values to the base64 values, or to
|
||||
'65' which indicates an invalid character. '=' is '64' */
|
||||
static const unsigned char _base64_invcharmap[256] = {
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,62, 65,65,65,63,
|
||||
52,53,54,55, 56,57,58,59, 60,61,65,65, 65,64,65,65,
|
||||
65, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
|
||||
15,16,17,18, 19,20,21,22, 23,24,25,65, 65,65,65,65,
|
||||
65,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
|
||||
41,42,43,44, 45,46,47,48, 49,50,51,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65,
|
||||
65,65,65,65, 65,65,65,65, 65,65,65,65, 65,65,65,65
|
||||
};
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 62, 65, 65, 65, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60,
|
||||
61, 65, 65, 65, 64, 65, 65, 65, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
||||
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 65, 65, 65, 65,
|
||||
65, 65, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
|
||||
43, 44, 45, 46, 47, 48, 49, 50, 51, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
|
||||
65, 65, 65, 65, 65, 65, 65, 65, 65};
|
||||
|
||||
/* map of all 6-bit values to their corresponding byte
|
||||
in the base64 alphabet. Padding char is the value '64' */
|
||||
static const char _base64_charmap[65] = {
|
||||
'A','B','C','D', 'E','F','G','H',
|
||||
'I','J','K','L', 'M','N','O','P',
|
||||
'Q','R','S','T', 'U','V','W','X',
|
||||
'Y','Z','a','b', 'c','d','e','f',
|
||||
'g','h','i','j', 'k','l','m','n',
|
||||
'o','p','q','r', 's','t','u','v',
|
||||
'w','x','y','z', '0','1','2','3',
|
||||
'4','5','6','7', '8','9','+','/',
|
||||
'='
|
||||
};
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||||
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '='};
|
||||
|
||||
static size_t base64_encoded_len(const size_t len)
|
||||
{
|
||||
/* encoded steam is 4 bytes for every three, rounded up */
|
||||
return ((len + 2)/3) << 2;
|
||||
return ((len + 2) / 3) << 2;
|
||||
}
|
||||
|
||||
static char *base64_encode(xmpp_ctx_t *ctx,
|
||||
const unsigned char * const buffer, const size_t len)
|
||||
const unsigned char *const buffer,
|
||||
const size_t len)
|
||||
{
|
||||
size_t clen;
|
||||
char *cbuf, *c;
|
||||
@@ -272,7 +265,7 @@ static char *base64_encode(xmpp_ctx_t *ctx,
|
||||
c = cbuf;
|
||||
/* loop over data, turning every 3 bytes into 4 characters */
|
||||
for (i = 0; i + 2 < len; i += 3) {
|
||||
word = buffer[i] << 16 | buffer[i+1] << 8 | buffer[i+2];
|
||||
word = buffer[i] << 16 | buffer[i + 1] << 8 | buffer[i + 2];
|
||||
hextet = (word & 0x00FC0000) >> 18;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = (word & 0x0003F000) >> 12;
|
||||
@@ -284,26 +277,26 @@ static char *base64_encode(xmpp_ctx_t *ctx,
|
||||
}
|
||||
/* zero, one or two bytes left */
|
||||
switch (len - i) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
hextet = (buffer[len-1] & 0xFC) >> 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = (buffer[len-1] & 0x03) << 4;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
break;
|
||||
case 2:
|
||||
hextet = (buffer[len-2] & 0xFC) >> 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = ((buffer[len-2] & 0x03) << 4) |
|
||||
((buffer[len-1] & 0xF0) >> 4);
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = (buffer[len-1] & 0x0F) << 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
hextet = (buffer[len - 1] & 0xFC) >> 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = (buffer[len - 1] & 0x03) << 4;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
break;
|
||||
case 2:
|
||||
hextet = (buffer[len - 2] & 0xFC) >> 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = ((buffer[len - 2] & 0x03) << 4) |
|
||||
((buffer[len - 1] & 0xF0) >> 4);
|
||||
*c++ = _base64_charmap[hextet];
|
||||
hextet = (buffer[len - 1] & 0x0F) << 2;
|
||||
*c++ = _base64_charmap[hextet];
|
||||
*c++ = _base64_charmap[64]; /* pad */
|
||||
break;
|
||||
}
|
||||
/* add a terminal null */
|
||||
*c = '\0';
|
||||
@@ -311,30 +304,37 @@ static char *base64_encode(xmpp_ctx_t *ctx,
|
||||
return cbuf;
|
||||
}
|
||||
|
||||
static size_t base64_decoded_len(const char * const buffer, const size_t len)
|
||||
static size_t base64_decoded_len(const char *const buffer, const size_t len)
|
||||
{
|
||||
size_t nudge = 0;
|
||||
unsigned char c;
|
||||
size_t i;
|
||||
|
||||
if (len < 4) return 0;
|
||||
if (len < 4)
|
||||
return 0;
|
||||
|
||||
/* count the padding characters for the remainder */
|
||||
for (i = len; i > 0; --i) {
|
||||
c = _base64_invcharmap[(unsigned char)buffer[i-1]];
|
||||
if (c < 64) break;
|
||||
if (c == 64) ++nudge;
|
||||
if (c > 64) return 0;
|
||||
c = _base64_invcharmap[(unsigned char)buffer[i - 1]];
|
||||
if (c < 64)
|
||||
break;
|
||||
if (c == 64)
|
||||
++nudge;
|
||||
if (c > 64)
|
||||
return 0;
|
||||
}
|
||||
if (nudge > 2) return 0;
|
||||
if (nudge > 2)
|
||||
return 0;
|
||||
|
||||
/* decoded steam is 3 bytes for every four */
|
||||
return 3 * (len >> 2) - nudge;
|
||||
}
|
||||
|
||||
static void base64_decode(xmpp_ctx_t *ctx,
|
||||
const char * const buffer, const size_t len,
|
||||
unsigned char **out, size_t *outlen)
|
||||
const char *const buffer,
|
||||
const size_t len,
|
||||
unsigned char **out,
|
||||
size_t *outlen)
|
||||
{
|
||||
size_t dlen;
|
||||
unsigned char *dbuf, *d;
|
||||
@@ -342,10 +342,12 @@ static void base64_decode(xmpp_ctx_t *ctx,
|
||||
size_t i;
|
||||
|
||||
/* len must be a multiple of 4 */
|
||||
if (len & 0x03) goto _base64_error;
|
||||
if (len & 0x03)
|
||||
goto _base64_error;
|
||||
|
||||
dlen = base64_decoded_len(buffer, len);
|
||||
if (dlen == 0) goto _base64_error;
|
||||
if (dlen == 0)
|
||||
goto _base64_error;
|
||||
|
||||
dbuf = xmpp_alloc(ctx, dlen + 1);
|
||||
if (dbuf != NULL) {
|
||||
@@ -353,57 +355,70 @@ static void base64_decode(xmpp_ctx_t *ctx,
|
||||
/* loop over each set of 4 characters, decoding 3 bytes */
|
||||
for (i = 0; i + 3 < len; i += 4) {
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i]];
|
||||
if (hextet & 0xC0) break;
|
||||
if (hextet & 0xC0)
|
||||
break;
|
||||
word = hextet << 18;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i+1]];
|
||||
if (hextet & 0xC0) break;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i + 1]];
|
||||
if (hextet & 0xC0)
|
||||
break;
|
||||
word |= hextet << 12;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i+2]];
|
||||
if (hextet & 0xC0) break;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i + 2]];
|
||||
if (hextet & 0xC0)
|
||||
break;
|
||||
word |= hextet << 6;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i+3]];
|
||||
if (hextet & 0xC0) break;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[i + 3]];
|
||||
if (hextet & 0xC0)
|
||||
break;
|
||||
word |= hextet;
|
||||
*d++ = (word & 0x00FF0000) >> 16;
|
||||
*d++ = (word & 0x0000FF00) >> 8;
|
||||
*d++ = (word & 0x000000FF);
|
||||
}
|
||||
if (hextet > 64) goto _base64_decode_error;
|
||||
if (hextet > 64)
|
||||
goto _base64_decode_error;
|
||||
/* handle the remainder */
|
||||
switch (dlen % 3) {
|
||||
case 0:
|
||||
/* nothing to do */
|
||||
break;
|
||||
case 1:
|
||||
/* redo the last quartet, checking for correctness */
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-4]];
|
||||
if (hextet & 0xC0) goto _base64_decode_error;
|
||||
word = hextet << 2;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-3]];
|
||||
if (hextet & 0xC0) goto _base64_decode_error;
|
||||
word |= hextet >> 4;
|
||||
*d++ = word & 0xFF;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-2]];
|
||||
if (hextet != 64) goto _base64_decode_error;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-1]];
|
||||
if (hextet != 64) goto _base64_decode_error;
|
||||
break;
|
||||
case 2:
|
||||
/* redo the last quartet, checking for correctness */
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-4]];
|
||||
if (hextet & 0xC0) goto _base64_decode_error;
|
||||
word = hextet << 10;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-3]];
|
||||
if (hextet & 0xC0) goto _base64_decode_error;
|
||||
word |= hextet << 4;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-2]];
|
||||
if (hextet & 0xC0) goto _base64_decode_error;
|
||||
word |= hextet >> 2;
|
||||
*d++ = (word & 0xFF00) >> 8;
|
||||
*d++ = (word & 0x00FF);
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len-1]];
|
||||
if (hextet != 64) goto _base64_decode_error;
|
||||
break;
|
||||
case 0:
|
||||
/* nothing to do */
|
||||
break;
|
||||
case 1:
|
||||
/* redo the last quartet, checking for correctness */
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 4]];
|
||||
if (hextet & 0xC0)
|
||||
goto _base64_decode_error;
|
||||
word = hextet << 2;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 3]];
|
||||
if (hextet & 0xC0)
|
||||
goto _base64_decode_error;
|
||||
word |= hextet >> 4;
|
||||
*d++ = word & 0xFF;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 2]];
|
||||
if (hextet != 64)
|
||||
goto _base64_decode_error;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 1]];
|
||||
if (hextet != 64)
|
||||
goto _base64_decode_error;
|
||||
break;
|
||||
case 2:
|
||||
/* redo the last quartet, checking for correctness */
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 4]];
|
||||
if (hextet & 0xC0)
|
||||
goto _base64_decode_error;
|
||||
word = hextet << 10;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 3]];
|
||||
if (hextet & 0xC0)
|
||||
goto _base64_decode_error;
|
||||
word |= hextet << 4;
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 2]];
|
||||
if (hextet & 0xC0)
|
||||
goto _base64_decode_error;
|
||||
word |= hextet >> 2;
|
||||
*d++ = (word & 0xFF00) >> 8;
|
||||
*d++ = (word & 0x00FF);
|
||||
hextet = _base64_invcharmap[(unsigned char)buffer[len - 1]];
|
||||
if (hextet != 64)
|
||||
goto _base64_decode_error;
|
||||
break;
|
||||
}
|
||||
*d = '\0';
|
||||
}
|
||||
@@ -484,8 +499,11 @@ char *xmpp_base64_decode_str(xmpp_ctx_t *ctx, const char *base64, size_t len)
|
||||
*
|
||||
* @ingroup Encodings
|
||||
*/
|
||||
void xmpp_base64_decode_bin(xmpp_ctx_t *ctx, const char *base64, size_t len,
|
||||
unsigned char **out, size_t *outlen)
|
||||
void xmpp_base64_decode_bin(xmpp_ctx_t *ctx,
|
||||
const char *base64,
|
||||
size_t len,
|
||||
unsigned char **out,
|
||||
size_t *outlen)
|
||||
{
|
||||
base64_decode(ctx, base64, len, out, outlen);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user