liboauth/backport-NOOP-whitespace-indent.patch

3737 lines
121 KiB
Diff
Raw Normal View History

From 7001b8256cd654952ec2515b055d2c5b243be600 Mon Sep 17 00:00:00 2001
From: Robin Gareus <robin@gareus.org>
Date: Tue, 1 Jul 2014 14:44:31 +0200
Subject: [PATCH] NOOP, whitespace & indent
---
src/hash.c | 590 +++++++++++------------
src/oauth.c | 1168 +++++++++++++++++++++++-----------------------
src/oauth.h | 158 +++----
src/oauth_http.c | 702 ++++++++++++++--------------
src/sha1.c | 34 +-
src/xmalloc.c | 30 +-
6 files changed, 1341 insertions(+), 1341 deletions(-)
diff --git a/src/hash.c b/src/hash.c
index a337b0e..b7c016b 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -1,18 +1,18 @@
/*
- * hash algorithms used in OAuth
+ * hash algorithms used in OAuth
*
* Copyright 2007-2012 Robin Gareus <robin@gareus.org>
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,7 +20,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
- *
+ *
*/
#if HAVE_CONFIG_H
@@ -40,31 +40,31 @@ char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, c
sha1_initHmac(&s, (const uint8_t*) k, kl);
sha1_write(&s, m, ml);
unsigned char *digest = sha1_resultHmac(&s);
- return oauth_encode_base64(HASH_LENGTH, digest);
+ return oauth_encode_base64(HASH_LENGTH, digest);
}
char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
+ return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
}
char *oauth_body_hash_file(char *filename) {
- size_t len=0;
- char fb[BUFSIZ];
+ size_t len=0;
+ char fb[BUFSIZ];
sha1nfo s;
- FILE *F= fopen(filename, "r");
+ FILE *F= fopen(filename, "r");
- if (!F) return NULL;
+ if (!F) return NULL;
sha1_init(&s);
- while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
+ while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
sha1_write(&s, fb, len);
}
- fclose(F);
+ fclose(F);
- unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, sha1_result(&s), HASH_LENGTH);
- return oauth_body_hash_encode(HASH_LENGTH, dgst);
+ unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
+ memcpy(dgst, sha1_result(&s), HASH_LENGTH);
+ return oauth_body_hash_encode(HASH_LENGTH, dgst);
}
char *oauth_body_hash_data(size_t length, const char *data) {
@@ -72,9 +72,9 @@ char *oauth_body_hash_data(size_t length, const char *data) {
sha1_init(&s);
for (;length--;) sha1_writebyte(&s, *data++);
- unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, sha1_result(&s), HASH_LENGTH);
- return oauth_body_hash_encode(HASH_LENGTH, dgst);
+ unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
+ memcpy(dgst, sha1_result(&s), HASH_LENGTH);
+ return oauth_body_hash_encode(HASH_LENGTH, dgst);
}
char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
@@ -105,9 +105,9 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *sig) {
#include "cert.h"
#if 1 // work-around compiler-warning
- // see http://bugzilla.mozilla.org/show_bug.cgi?id=243245#c3
- extern CERTCertificate *
- __CERT_DecodeDERCertificate (SECItem *derSignedCert, PRBool copyDER, char *nickname);
+// see http://bugzilla.mozilla.org/show_bug.cgi?id=243245#c3
+extern CERTCertificate *
+__CERT_DecodeDERCertificate (SECItem *derSignedCert, PRBool copyDER, char *nickname);
#endif
static const char NS_CERT_HEADER[] = "-----BEGIN CERTIFICATE-----";
@@ -116,8 +116,8 @@ static const char NS_PRIV_HEADER[] = "-----BEGIN PRIVATE KEY-----";
static const char NS_PRIV_TRAILER[] = "-----END PRIVATE KEY-----";
void oauth_init_nss() {
- static short nss_initialized = 0;
- if (!nss_initialized) { NSS_NoDB_Init(NULL); nss_initialized=1;}
+ static short nss_initialized = 0;
+ if (!nss_initialized) { NSS_NoDB_Init(NULL); nss_initialized=1;}
}
/**
@@ -127,217 +127,217 @@ void oauth_init_nss() {
* the returned string (if not NULL) needs to be freed by the caller
*/
char *oauth_strip_pkcs(const char *txt, const char *h, const char *t) {
- char *start, *end, *rv;
- size_t len;
- if ((start=strstr(txt, h))==NULL) return NULL;
- start+=strlen(h);
- while (*start=='\r' || *start=='\n') start++;
- if ((end=strstr(start, t))==NULL) return NULL;
- end--;
- while (*end=='\r' || *end=='\n') end--;
- len = end-start+2;
- rv = xmalloc(len*sizeof(char));
- memcpy(rv,start,len);
- rv[len-1]='\0';
- return rv;
+ char *start, *end, *rv;
+ size_t len;
+ if ((start=strstr(txt, h))==NULL) return NULL;
+ start+=strlen(h);
+ while (*start=='\r' || *start=='\n') start++;
+ if ((end=strstr(start, t))==NULL) return NULL;
+ end--;
+ while (*end=='\r' || *end=='\n') end--;
+ len = end-start+2;
+ rv = xmalloc(len*sizeof(char));
+ memcpy(rv,start,len);
+ rv[len-1]='\0';
+ return rv;
}
char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
+ return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
}
char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) {
- PK11SlotInfo *slot = NULL;
- PK11SymKey *pkey = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- SECItem keyItem, noParams;
- char *rv=NULL;
-
- keyItem.type = siBuffer;
- keyItem.data = (unsigned char*) k;
- keyItem.len = kl;
-
- noParams.type = siBuffer;
- noParams.data = NULL;
- noParams.len = 0;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- pkey = PK11_ImportSymKey(slot, CKM_SHA_1_HMAC, PK11_OriginUnwrap, CKA_SIGN, &keyItem, NULL);
- if (!pkey) goto looser;
- context = PK11_CreateContextBySymKey(CKM_SHA_1_HMAC, CKA_SIGN, pkey, &noParams);
- if (!context) goto looser;
-
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestOp(context, (unsigned char*) m, ml);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
-
- rv=oauth_encode_base64(len, digest);
+ PK11SlotInfo *slot = NULL;
+ PK11SymKey *pkey = NULL;
+ PK11Context *context = NULL;
+ unsigned char digest[20]; // Is there a way to tell how large the output is?
+ unsigned int len;
+ SECStatus s;
+ SECItem keyItem, noParams;
+ char *rv=NULL;
+
+ keyItem.type = siBuffer;
+ keyItem.data = (unsigned char*) k;
+ keyItem.len = kl;
+
+ noParams.type = siBuffer;
+ noParams.data = NULL;
+ noParams.len = 0;
+
+ oauth_init_nss();
+
+ slot = PK11_GetInternalKeySlot();
+ if (!slot) goto looser;
+ pkey = PK11_ImportSymKey(slot, CKM_SHA_1_HMAC, PK11_OriginUnwrap, CKA_SIGN, &keyItem, NULL);
+ if (!pkey) goto looser;
+ context = PK11_CreateContextBySymKey(CKM_SHA_1_HMAC, CKA_SIGN, pkey, &noParams);
+ if (!context) goto looser;
+
+ s = PK11_DigestBegin(context);
+ if (s != SECSuccess) goto looser;
+ s = PK11_DigestOp(context, (unsigned char*) m, ml);
+ if (s != SECSuccess) goto looser;
+ s = PK11_DigestFinal(context, digest, &len, sizeof digest);
+ if (s != SECSuccess) goto looser;
+
+ rv=oauth_encode_base64(len, digest);
looser:
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (pkey) PK11_FreeSymKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- return rv;
+ if (context) PK11_DestroyContext(context, PR_TRUE);
+ if (pkey) PK11_FreeSymKey(pkey);
+ if (slot) PK11_FreeSlot(slot);
+ return rv;
}
char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
- PK11SlotInfo *slot = NULL;
- SECKEYPrivateKey *pkey = NULL;
- SECItem signature;
- SECStatus s;
- SECItem der;
- char *rv=NULL;
-
- char *key = oauth_strip_pkcs(k, NS_PRIV_HEADER, NS_PRIV_TRAILER);
- if (!key) return NULL;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- s = ATOB_ConvertAsciiToItem(&der, key);
- if (s != SECSuccess) goto looser;
- s = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot, &der, NULL, NULL, PR_FALSE, PR_TRUE, KU_ALL, &pkey, NULL);
- SECITEM_FreeItem(&der, PR_FALSE);
- if (s != SECSuccess) goto looser;
- if (!pkey) goto looser;
- if (pkey->keyType != rsaKey) goto looser;
- s = SEC_SignData(&signature, (unsigned char*) m, strlen(m), pkey, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE);
- if (s != SECSuccess) goto looser;
-
- rv=oauth_encode_base64(signature.len, signature.data);
- SECITEM_FreeItem(&signature, PR_FALSE);
+ PK11SlotInfo *slot = NULL;
+ SECKEYPrivateKey *pkey = NULL;
+ SECItem signature;
+ SECStatus s;
+ SECItem der;
+ char *rv=NULL;
+
+ char *key = oauth_strip_pkcs(k, NS_PRIV_HEADER, NS_PRIV_TRAILER);
+ if (!key) return NULL;
+
+ oauth_init_nss();
+
+ slot = PK11_GetInternalKeySlot();
+ if (!slot) goto looser;
+ s = ATOB_ConvertAsciiToItem(&der, key);
+ if (s != SECSuccess) goto looser;
+ s = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot, &der, NULL, NULL, PR_FALSE, PR_TRUE, KU_ALL, &pkey, NULL);
+ SECITEM_FreeItem(&der, PR_FALSE);
+ if (s != SECSuccess) goto looser;
+ if (!pkey) goto looser;
+ if (pkey->keyType != rsaKey) goto looser;
+ s = SEC_SignData(&signature, (unsigned char*) m, strlen(m), pkey, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE);
+ if (s != SECSuccess) goto looser;
+
+ rv=oauth_encode_base64(signature.len, signature.data);
+ SECITEM_FreeItem(&signature, PR_FALSE);
looser:
- if (pkey) SECKEY_DestroyPrivateKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- xfree(key);
- return rv;
+ if (pkey) SECKEY_DestroyPrivateKey(pkey);
+ if (slot) PK11_FreeSlot(slot);
+ xfree(key);
+ return rv;
}
int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *sig) {
- PK11SlotInfo *slot = NULL;
- SECKEYPublicKey *pkey = NULL;
- CERTCertificate *cert = NULL;
- SECItem signature;
- SECStatus s;
- SECItem der;
- int rv=0;
-
- char *key = oauth_strip_pkcs(c, NS_CERT_HEADER, NS_CERT_TRAILER);
- if (!key) return 0;
-
- oauth_init_nss();
-
- s = ATOB_ConvertAsciiToItem(&signature, (char*) sig); // XXX cast (const char*) -> (char*)
- if (s != SECSuccess) goto looser;
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- s = ATOB_ConvertAsciiToItem(&der, key);
- if (s != SECSuccess) goto looser;
- cert = __CERT_DecodeDERCertificate(&der, PR_TRUE, NULL);
- SECITEM_FreeItem(&der, PR_FALSE);
- if (!cert) goto looser;
- pkey = CERT_ExtractPublicKey(cert);
- if (!pkey) goto looser;
- if (pkey->keyType != rsaKey) goto looser;
-
- s = VFY_VerifyData((unsigned char*) m, strlen(m), pkey, &signature, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE, NULL);
- if (s == SECSuccess) rv=1;
+ PK11SlotInfo *slot = NULL;
+ SECKEYPublicKey *pkey = NULL;
+ CERTCertificate *cert = NULL;
+ SECItem signature;
+ SECStatus s;
+ SECItem der;
+ int rv=0;
+
+ char *key = oauth_strip_pkcs(c, NS_CERT_HEADER, NS_CERT_TRAILER);
+ if (!key) return 0;
+
+ oauth_init_nss();
+
+ s = ATOB_ConvertAsciiToItem(&signature, (char*) sig); // XXX cast (const char*) -> (char*)
+ if (s != SECSuccess) goto looser;
+ slot = PK11_GetInternalKeySlot();
+ if (!slot) goto looser;
+ s = ATOB_ConvertAsciiToItem(&der, key);
+ if (s != SECSuccess) goto looser;
+ cert = __CERT_DecodeDERCertificate(&der, PR_TRUE, NULL);
+ SECITEM_FreeItem(&der, PR_FALSE);
+ if (!cert) goto looser;
+ pkey = CERT_ExtractPublicKey(cert);
+ if (!pkey) goto looser;
+ if (pkey->keyType != rsaKey) goto looser;
+
+ s = VFY_VerifyData((unsigned char*) m, strlen(m), pkey, &signature, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE, NULL);
+ if (s == SECSuccess) rv=1;
#if 0
- else if (PR_GetError()!= SEC_ERROR_BAD_SIGNATURE) rv=-1;
+ else if (PR_GetError()!= SEC_ERROR_BAD_SIGNATURE) rv=-1;
#endif
looser:
- if (pkey) SECKEY_DestroyPublicKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- xfree(key);
- return rv;
+ if (pkey) SECKEY_DestroyPublicKey(pkey);
+ if (slot) PK11_FreeSlot(slot);
+ xfree(key);
+ return rv;
}
char *oauth_body_hash_file(char *filename) {
- PK11SlotInfo *slot = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- char *rv=NULL;
- size_t bl;
+ PK11SlotInfo *slot = NULL;
+ PK11Context *context = NULL;
+ unsigned char digest[20]; // Is there a way to tell how large the output is?
+ unsigned int len;
+ SECStatus s;
+ char *rv=NULL;
+ size_t bl;
unsigned char fb[BUFSIZ];
unsigned char *dgst;
- FILE *F= fopen(filename, "r");
- if (!F) return NULL;
+ FILE *F= fopen(filename, "r");
+ if (!F) return NULL;
- oauth_init_nss();
+ oauth_init_nss();
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- context = PK11_CreateDigestContext(SEC_OID_SHA1);
- if (!context) goto looser;
+ slot = PK11_GetInternalKeySlot();
+ if (!slot) goto looser;
+ context = PK11_CreateDigestContext(SEC_OID_SHA1);
+ if (!context) goto looser;
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- while (!feof(F) && (bl=fread(fb,sizeof(char),BUFSIZ, F))>0) {
- s = PK11_DigestOp(context, (unsigned char*) fb, bl);
- if (s != SECSuccess) goto looser;
- }
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
+ s = PK11_DigestBegin(context);
+ if (s != SECSuccess) goto looser;
+ while (!feof(F) && (bl=fread(fb,sizeof(char),BUFSIZ, F))>0) {
+ s = PK11_DigestOp(context, (unsigned char*) fb, bl);
+ if (s != SECSuccess) goto looser;
+ }
+ s = PK11_DigestFinal(context, digest, &len, sizeof digest);
+ if (s != SECSuccess) goto looser;
- dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, digest, len);
- rv=oauth_body_hash_encode(len, dgst);
+ dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
+ memcpy(dgst, digest, len);
+ rv=oauth_body_hash_encode(len, dgst);
looser:
- fclose(F);
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (slot) PK11_FreeSlot(slot);
- return rv;
+ fclose(F);
+ if (context) PK11_DestroyContext(context, PR_TRUE);
+ if (slot) PK11_FreeSlot(slot);
+ return rv;
}
char *oauth_body_hash_data(size_t length, const char *data) {
- PK11SlotInfo *slot = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- char *rv=NULL;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- context = PK11_CreateDigestContext(SEC_OID_SHA1);
- if (!context) goto looser;
-
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestOp(context, (unsigned char*) data, length);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
-
- unsigned char *dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, digest, len);
- rv=oauth_body_hash_encode(len, dgst);
+ PK11SlotInfo *slot = NULL;
+ PK11Context *context = NULL;
+ unsigned char digest[20]; // Is there a way to tell how large the output is?
+ unsigned int len;
+ SECStatus s;
+ char *rv=NULL;
+
+ oauth_init_nss();
+
+ slot = PK11_GetInternalKeySlot();
+ if (!slot) goto looser;
+ context = PK11_CreateDigestContext(SEC_OID_SHA1);
+ if (!context) goto looser;
+
+ s = PK11_DigestBegin(context);
+ if (s != SECSuccess) goto looser;
+ s = PK11_DigestOp(context, (unsigned char*) data, length);
+ if (s != SECSuccess) goto looser;
+ s = PK11_DigestFinal(context, digest, &len, sizeof digest);
+ if (s != SECSuccess) goto looser;
+
+ unsigned char *dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
+ memcpy(dgst, digest, len);
+ rv=oauth_body_hash_encode(len, dgst);
looser:
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (slot) PK11_FreeSlot(slot);
- return rv;
+ if (context) PK11_DestroyContext(context, PR_TRUE);
+ if (slot) PK11_FreeSlot(slot);
+ return rv;
}
-#else
+#else
/* use http://www.openssl.org/ for hash/sign */
#ifdef _GNU_SOURCE
@@ -365,18 +365,18 @@ looser:
#include <openssl/hmac.h>
char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
+ return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
}
char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) {
- unsigned char result[EVP_MAX_MD_SIZE];
- unsigned int resultlen = 0;
-
- HMAC(EVP_sha1(), k, kl,
- (unsigned char*) m, ml,
- result, &resultlen);
-
- return(oauth_encode_base64(resultlen, result));
+ unsigned char result[EVP_MAX_MD_SIZE];
+ unsigned int resultlen = 0;
+
+ HMAC(EVP_sha1(), k, kl,
+ (unsigned char*) m, ml,
+ result, &resultlen);
+
+ return(oauth_encode_base64(resultlen, result));
}
#include <openssl/evp.h>
@@ -385,108 +385,108 @@ char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, c
#include <openssl/ssl.h>
char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
- unsigned char *sig = NULL;
- unsigned char *passphrase = NULL;
- unsigned int len=0;
- EVP_MD_CTX md_ctx;
-
- EVP_PKEY *pkey;
- BIO *in;
- in = BIO_new_mem_buf((unsigned char*) k, strlen(k));
- pkey = PEM_read_bio_PrivateKey(in, NULL, 0, passphrase); // generate sign
- BIO_free(in);
-
- if (pkey == NULL) {
- //fprintf(stderr, "liboauth/OpenSSL: can not read private key\n");
- return xstrdup("liboauth/OpenSSL: can not read private key");
- }
-
- len = EVP_PKEY_size(pkey);
- sig = (unsigned char*)xmalloc((len+1)*sizeof(char));
-
- EVP_SignInit(&md_ctx, EVP_sha1());
- EVP_SignUpdate(&md_ctx, m, strlen(m));
- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) {
- char *tmp;
- sig[len] = '\0';
- tmp = oauth_encode_base64(len,sig);
- OPENSSL_free(sig);
- EVP_PKEY_free(pkey);
- return tmp;
- }
- return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed");
+ unsigned char *sig = NULL;
+ unsigned char *passphrase = NULL;
+ unsigned int len=0;
+ EVP_MD_CTX md_ctx;
+
+ EVP_PKEY *pkey;
+ BIO *in;
+ in = BIO_new_mem_buf((unsigned char*) k, strlen(k));
+ pkey = PEM_read_bio_PrivateKey(in, NULL, 0, passphrase); // generate sign
+ BIO_free(in);
+
+ if (pkey == NULL) {
+ //fprintf(stderr, "liboauth/OpenSSL: can not read private key\n");
+ return xstrdup("liboauth/OpenSSL: can not read private key");
+ }
+
+ len = EVP_PKEY_size(pkey);
+ sig = (unsigned char*)xmalloc((len+1)*sizeof(char));
+
+ EVP_SignInit(&md_ctx, EVP_sha1());
+ EVP_SignUpdate(&md_ctx, m, strlen(m));
+ if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) {
+ char *tmp;
+ sig[len] = '\0';
+ tmp = oauth_encode_base64(len,sig);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ return tmp;
+ }
+ return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed");
}
int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) {
- EVP_MD_CTX md_ctx;
- EVP_PKEY *pkey;
- BIO *in;
- X509 *cert = NULL;
- unsigned char *b64d;
- int slen, err;
-
- in = BIO_new_mem_buf((unsigned char*)c, strlen(c));
- cert = PEM_read_bio_X509(in, NULL, 0, NULL);
- if (cert) {
- pkey = (EVP_PKEY *) X509_get_pubkey(cert);
- X509_free(cert);
- } else {
- pkey = PEM_read_bio_PUBKEY(in, NULL, 0, NULL);
- }
- BIO_free(in);
- if (pkey == NULL) {
- //fprintf(stderr, "could not read cert/pubkey.\n");
- return -2;
- }
-
- b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s));
- slen = oauth_decode_base64(b64d, s);
-
- EVP_VerifyInit(&md_ctx, EVP_sha1());
- EVP_VerifyUpdate(&md_ctx, m, strlen(m));
- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey);
- EVP_MD_CTX_cleanup(&md_ctx);
- EVP_PKEY_free(pkey);
- xfree(b64d);
- return (err);
+ EVP_MD_CTX md_ctx;
+ EVP_PKEY *pkey;
+ BIO *in;
+ X509 *cert = NULL;
+ unsigned char *b64d;
+ int slen, err;
+
+ in = BIO_new_mem_buf((unsigned char*)c, strlen(c));
+ cert = PEM_read_bio_X509(in, NULL, 0, NULL);
+ if (cert) {
+ pkey = (EVP_PKEY *) X509_get_pubkey(cert);
+ X509_free(cert);
+ } else {
+ pkey = PEM_read_bio_PUBKEY(in, NULL, 0, NULL);
+ }
+ BIO_free(in);
+ if (pkey == NULL) {
+ //fprintf(stderr, "could not read cert/pubkey.\n");
+ return -2;
+ }
+
+ b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s));
+ slen = oauth_decode_base64(b64d, s);
+
+ EVP_VerifyInit(&md_ctx, EVP_sha1());
+ EVP_VerifyUpdate(&md_ctx, m, strlen(m));
+ err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey);
+ EVP_MD_CTX_cleanup(&md_ctx);
+ EVP_PKEY_free(pkey);
+ xfree(b64d);
+ return (err);
}
-/**
+/**
* http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
*/
char *oauth_body_hash_file(char *filename) {
- unsigned char fb[BUFSIZ];
- EVP_MD_CTX ctx;
- size_t len=0;
- unsigned char *md;
- FILE *F= fopen(filename, "r");
- if (!F) return NULL;
-
- EVP_MD_CTX_init(&ctx);
- EVP_DigestInit(&ctx,EVP_sha1());
- while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
- EVP_DigestUpdate(&ctx, fb, len);
- }
- fclose(F);
- len=0;
- md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
- EVP_MD_CTX_cleanup(&ctx);
- return oauth_body_hash_encode(len, md);
+ unsigned char fb[BUFSIZ];
+ EVP_MD_CTX ctx;
+ size_t len=0;
+ unsigned char *md;
+ FILE *F= fopen(filename, "r");
+ if (!F) return NULL;
+
+ EVP_MD_CTX_init(&ctx);
+ EVP_DigestInit(&ctx,EVP_sha1());
+ while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
+ EVP_DigestUpdate(&ctx, fb, len);
+ }
+ fclose(F);
+ len=0;
+ md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
+ EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
+ EVP_MD_CTX_cleanup(&ctx);
+ return oauth_body_hash_encode(len, md);
}
char *oauth_body_hash_data(size_t length, const char *data) {
- EVP_MD_CTX ctx;
- size_t len=0;
- unsigned char *md;
- md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
- EVP_MD_CTX_init(&ctx);
- EVP_DigestInit(&ctx,EVP_sha1());
- EVP_DigestUpdate(&ctx, data, length);
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
- EVP_MD_CTX_cleanup(&ctx);
- return oauth_body_hash_encode(len, md);
+ EVP_MD_CTX ctx;
+ size_t len=0;
+ unsigned char *md;
+ md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
+ EVP_MD_CTX_init(&ctx);
+ EVP_DigestInit(&ctx,EVP_sha1());
+ EVP_DigestUpdate(&ctx, data, length);
+ EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
+ EVP_MD_CTX_cleanup(&ctx);
+ return oauth_body_hash_encode(len, md);
}
#endif
diff --git a/src/oauth.c b/src/oauth.c
index 9529e2a..b4214c0 100644
--- a/src/oauth.c
+++ b/src/oauth.c
@@ -2,7 +2,7 @@
* OAuth string functions in POSIX-C.
*
* Copyright 2007-2013 Robin Gareus <robin@gareus.org>
- *
+ *
* The base64 functions are by Jan-Henrik Haukeland, <hauk@tildeslash.com>
* and un/escape_url() was inspired by libcurl's curl_escape under ISC-license
* many thanks to Daniel Stenberg <daniel@haxx.se>.
@@ -13,10 +13,10 @@
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -24,7 +24,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
- *
+ *
*/
#if HAVE_CONFIG_H
# include <config.h>
@@ -94,40 +94,40 @@ int oauth_b64_is_base64(char c) {
* @return encoded string otherwise NULL
*/
char *oauth_encode_base64(int size, const unsigned char *src) {
- int i;
- char *out, *p;
-
- if(!src) return NULL;
- if(!size) size= strlen((char *)src);
- out= (char*) xcalloc(sizeof(char), size*4/3+4);
- p= out;
-
- for(i=0; i<size; i+=3) {
- unsigned char b1=0, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0;
- b1= src[i];
- if(i+1<size) b2= src[i+1];
- if(i+2<size) b3= src[i+2];
-
- b4= b1>>2;
- b5= ((b1&0x3)<<4)|(b2>>4);
- b6= ((b2&0xf)<<2)|(b3>>6);
- b7= b3&0x3f;
-
- *p++= oauth_b64_encode(b4);
- *p++= oauth_b64_encode(b5);
-
- if(i+1<size) *p++= oauth_b64_encode(b6);
- else *p++= '=';
-
- if(i+2<size) *p++= oauth_b64_encode(b7);
- else *p++= '=';
- }
- return out;
+ int i;
+ char *out, *p;
+
+ if(!src) return NULL;
+ if(!size) size= strlen((char *)src);
+ out= (char*) xcalloc(sizeof(char), size*4/3+4);
+ p= out;
+
+ for(i=0; i<size; i+=3) {
+ unsigned char b1=0, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0;
+ b1= src[i];
+ if(i+1<size) b2= src[i+1];
+ if(i+2<size) b3= src[i+2];
+
+ b4= b1>>2;
+ b5= ((b1&0x3)<<4)|(b2>>4);
+ b6= ((b2&0xf)<<2)|(b3>>6);
+ b7= b3&0x3f;
+
+ *p++= oauth_b64_encode(b4);
+ *p++= oauth_b64_encode(b5);
+
+ if(i+1<size) *p++= oauth_b64_encode(b6);
+ else *p++= '=';
+
+ if(i+2<size) *p++= oauth_b64_encode(b7);
+ else *p++= '=';
+ }
+ return out;
}
/**
* Decode the base64 encoded string 'src' into the memory pointed to by
- * 'dest'.
+ * 'dest'.
*
* @param dest Pointer to memory for holding the decoded string.
* Must be large enough to receive the decoded string.
@@ -136,42 +136,42 @@ char *oauth_encode_base64(int size, const unsigned char *src) {
* succeeded otherwise 0.
*/
int oauth_decode_base64(unsigned char *dest, const char *src) {
- if(src && *src) {
- unsigned char *p= dest;
- int k, l= strlen(src)+1;
- unsigned char *buf= (unsigned char*) xcalloc(sizeof(unsigned char), l);
-
- /* Ignore non base64 chars as per the POSIX standard */
- for(k=0, l=0; src[k]; k++) {
- if(oauth_b64_is_base64(src[k])) {
- buf[l++]= src[k];
- }
- }
-
- for(k=0; k<l; k+=4) {
- char c1='A', c2='A', c3='A', c4='A';
- unsigned char b1=0, b2=0, b3=0, b4=0;
- c1= buf[k];
-
- if(k+1<l) c2= buf[k+1];
- if(k+2<l) c3= buf[k+2];
- if(k+3<l) c4= buf[k+3];
-
- b1= oauth_b64_decode(c1);
- b2= oauth_b64_decode(c2);
- b3= oauth_b64_decode(c3);
- b4= oauth_b64_decode(c4);
-
- *p++=((b1<<2)|(b2>>4) );
-
- if(c3 != '=') *p++=(((b2&0xf)<<4)|(b3>>2) );
- if(c4 != '=') *p++=(((b3&0x3)<<6)|b4 );
- }
- xfree(buf);
- dest[p-dest]='\0';
- return(p-dest);
- }
- return 0;
+ if(src && *src) {
+ unsigned char *p= dest;
+ int k, l= strlen(src)+1;
+ unsigned char *buf= (unsigned char*) xcalloc(sizeof(unsigned char), l);
+
+ /* Ignore non base64 chars as per the POSIX standard */
+ for(k=0, l=0; src[k]; k++) {
+ if(oauth_b64_is_base64(src[k])) {
+ buf[l++]= src[k];
+ }
+ }
+
+ for(k=0; k<l; k+=4) {
+ char c1='A', c2='A', c3='A', c4='A';
+ unsigned char b1=0, b2=0, b3=0, b4=0;
+ c1= buf[k];
+
+ if(k+1<l) c2= buf[k+1];
+ if(k+2<l) c3= buf[k+2];
+ if(k+3<l) c4= buf[k+3];
+
+ b1= oauth_b64_decode(c1);
+ b2= oauth_b64_decode(c2);
+ b3= oauth_b64_decode(c3);
+ b4= oauth_b64_decode(c4);
+
+ *p++=((b1<<2)|(b2>>4) );
+
+ if(c3 != '=') *p++=(((b2&0xf)<<4)|(b3>>2) );
+ if(c4 != '=') *p++=(((b3&0x3)<<6)|b4 );
+ }
+ xfree(buf);
+ dest[p-dest]='\0';
+ return(p-dest);
+ }
+ return 0;
}
/**
@@ -183,54 +183,54 @@ int oauth_decode_base64(unsigned char *dest, const char *src) {
* The caller must free the returned string.
*/
char *oauth_url_escape(const char *string) {
- size_t alloc, newlen;
- char *ns = NULL, *testing_ptr = NULL;
- unsigned char in;
- size_t strindex=0;
- size_t length;
-
- if (!string) return xstrdup("");
-
- alloc = strlen(string)+1;
- newlen = alloc;
-
- ns = (char*) xmalloc(alloc);
-
- length = alloc-1;
- while(length--) {
- in = *string;
-
- switch(in){
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'L': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case '_': case '~': case '.': case '-':
- ns[strindex++]=in;
- break;
- default:
- newlen += 2; /* this'll become a %XX */
- if(newlen > alloc) {
- alloc *= 2;
- testing_ptr = (char*) xrealloc(ns, alloc);
- ns = testing_ptr;
- }
- snprintf(&ns[strindex], 4, "%%%02X", in);
- strindex+=3;
- break;
- }
- string++;
- }
- ns[strindex]=0;
- return ns;
+ size_t alloc, newlen;
+ char *ns = NULL, *testing_ptr = NULL;
+ unsigned char in;
+ size_t strindex=0;
+ size_t length;
+
+ if (!string) return xstrdup("");
+
+ alloc = strlen(string)+1;
+ newlen = alloc;
+
+ ns = (char*) xmalloc(alloc);
+
+ length = alloc-1;
+ while(length--) {
+ in = *string;
+
+ switch(in){
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case 'a': case 'b': case 'c': case 'd': case 'e':
+ case 'f': case 'g': case 'h': case 'i': case 'j':
+ case 'k': case 'l': case 'm': case 'n': case 'o':
+ case 'p': case 'q': case 'r': case 's': case 't':
+ case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+ case 'A': case 'B': case 'C': case 'D': case 'E':
+ case 'F': case 'G': case 'H': case 'I': case 'J':
+ case 'K': case 'L': case 'M': case 'N': case 'O':
+ case 'P': case 'Q': case 'R': case 'S': case 'T':
+ case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case '_': case '~': case '.': case '-':
+ ns[strindex++]=in;
+ break;
+ default:
+ newlen += 2; /* this'll become a %XX */
+ if(newlen > alloc) {
+ alloc *= 2;
+ testing_ptr = (char*) xrealloc(ns, alloc);
+ ns = testing_ptr;
+ }
+ snprintf(&ns[strindex], 4, "%%%02X", in);
+ strindex+=3;
+ break;
+ }
+ string++;
+ }
+ ns[strindex]=0;
+ return ns;
}
#ifndef ISXDIGIT
@@ -246,33 +246,33 @@ char *oauth_url_escape(const char *string) {
* The caller must free the returned string.
*/
char *oauth_url_unescape(const char *string, size_t *olen) {
- size_t alloc, strindex=0;
- char *ns = NULL;
- unsigned char in;
- long hex;
-
- if (!string) return NULL;
- alloc = strlen(string)+1;
- ns = (char*) xmalloc(alloc);
-
- while(--alloc > 0) {
- in = *string;
- if(('%' == in) && ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
- char hexstr[3]; // '%XX'
- hexstr[0] = string[1];
- hexstr[1] = string[2];
- hexstr[2] = 0;
- hex = strtol(hexstr, NULL, 16);
- in = (unsigned char)hex; /* hex is always < 256 */
- string+=2;
- alloc-=2;
- }
- ns[strindex++] = in;
- string++;
- }
- ns[strindex]=0;
- if(olen) *olen = strindex;
- return ns;
+ size_t alloc, strindex=0;
+ char *ns = NULL;
+ unsigned char in;
+ long hex;
+
+ if (!string) return NULL;
+ alloc = strlen(string)+1;
+ ns = (char*) xmalloc(alloc);
+
+ while(--alloc > 0) {
+ in = *string;
+ if(('%' == in) && ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
+ char hexstr[3]; // '%XX'
+ hexstr[0] = string[1];
+ hexstr[1] = string[2];
+ hexstr[2] = 0;
+ hex = strtol(hexstr, NULL, 16);
+ in = (unsigned char)hex; /* hex is always < 256 */
+ string+=2;
+ alloc-=2;
+ }
+ ns[strindex++] = in;
+ string++;
+ }
+ ns[strindex]=0;
+ if(olen) *olen = strindex;
+ return ns;
}
/**
@@ -285,123 +285,123 @@ char *oauth_url_unescape(const char *string, size_t *olen) {
* @return signature string
*/
char *oauth_sign_plaintext (const char *m, const char *k) {
- return(xstrdup(k));
+ return(xstrdup(k));
}
/**
* encode strings and concatenate with '&' separator.
* The number of strings to be concatenated must be
* given as first argument.
- * all arguments thereafter must be of type (char *)
+ * all arguments thereafter must be of type (char *)
*
* @param len the number of arguments to follow this parameter
* @param ... string to escape and added (may be NULL)
*
- * @return pointer to memory holding the concatenated
+ * @return pointer to memory holding the concatenated
* strings - needs to be xfree(d) by the caller. or NULL
* in case we ran out of memory.
*/
char *oauth_catenc(int len, ...) {
- va_list va;
- int i;
- char *rv = (char*) xmalloc(sizeof(char));
- *rv='\0';
- va_start(va, len);
- for(i=0;i<len;i++) {
- char *arg = va_arg(va, char *);
- char *enc;
- int len;
- enc = oauth_url_escape(arg);
- if(!enc) break;
- len = strlen(enc) + 1 + ((i>0)?1:0);
- len+=strlen(rv);
- rv=(char*) xrealloc(rv,len*sizeof(char));
-
- if(i>0) strcat(rv, "&");
- strcat(rv, enc);
- xfree(enc);
- }
- va_end(va);
- return(rv);
+ va_list va;
+ int i;
+ char *rv = (char*) xmalloc(sizeof(char));
+ *rv='\0';
+ va_start(va, len);
+ for(i=0;i<len;i++) {
+ char *arg = va_arg(va, char *);
+ char *enc;
+ int len;
+ enc = oauth_url_escape(arg);
+ if(!enc) break;
+ len = strlen(enc) + 1 + ((i>0)?1:0);
+ len+=strlen(rv);
+ rv=(char*) xrealloc(rv,len*sizeof(char));
+
+ if(i>0) strcat(rv, "&");
+ strcat(rv, enc);
+ xfree(enc);
+ }
+ va_end(va);
+ return(rv);
}
/**
- * splits the given url into a parameter array.
+ * splits the given url into a parameter array.
* (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
*
* NOTE: Request-parameters-values may include an ampersand character.
- * However if unescaped this function will use them as parameter delimiter.
+ * However if unescaped this function will use them as parameter delimiter.
* If you need to make such a request, this function since version 0.3.5 allows
* to use the ASCII SOH (0x01) character as alias for '&' (0x26).
- * (the motivation is convenience: SOH is /untypeable/ and much more
- * unlikely to appear than '&' - If you plan to sign fancy URLs you
+ * (the motivation is convenience: SOH is /untypeable/ and much more
+ * unlikely to appear than '&' - If you plan to sign fancy URLs you
* should not split a query-string, but rather provide the parameter array
* directly to \ref oauth_serialize_url)
*
- * @param url the url or query-string to parse.
+ * @param url the url or query-string to parse.
* @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
+ * The array is re-allocated to match the number of parameters and each
* parameter-string is allocated with strdup. - The memory needs to be freed
* by the caller.
* @param qesc use query parameter escape (vs post-param-escape) - if set
* to 1 all '+' are treated as spaces ' '
- *
+ *
* @return number of parameter(s) in array.
*/
int oauth_split_post_paramters(const char *url, char ***argv, short qesc) {
- int argc=0;
- char *token, *tmp, *t1;
- if (!argv) return 0;
- if (!url) return 0;
- t1=xstrdup(url);
-
- // '+' represents a space, in a URL query string
- while ((qesc&1) && (tmp=strchr(t1,'+'))) *tmp=' ';
-
- tmp=t1;
- while((token=strtok(tmp,"&?"))) {
- if(!strncasecmp("oauth_signature=",token,16)) continue;
- (*argv)=(char**) xrealloc(*argv,sizeof(char*)*(argc+1));
- while (!(qesc&2) && (tmp=strchr(token,'\001'))) *tmp='&';
- if (argc>0 || (qesc&4))
- (*argv)[argc]=oauth_url_unescape(token, NULL);
- else
- (*argv)[argc]=xstrdup(token);
- if (argc==0 && strstr(token, ":/")) {
- // HTTP does not allow empty absolute paths, so the URL
- // 'http://example.com' is equivalent to 'http://example.com/' and should
- // be treated as such for the purposes of OAuth signing (rfc2616, section 3.2.1)
- // see http://groups.google.com/group/oauth/browse_thread/thread/c44b6f061bfd98c?hl=en
- char *slash=strstr(token, ":/");
- while (slash && *(++slash) == '/') ; // skip slashes eg /xxx:[\/]*/
+ int argc=0;
+ char *token, *tmp, *t1;
+ if (!argv) return 0;
+ if (!url) return 0;
+ t1=xstrdup(url);
+
+ // '+' represents a space, in a URL query string
+ while ((qesc&1) && (tmp=strchr(t1,'+'))) *tmp=' ';
+
+ tmp=t1;
+ while((token=strtok(tmp,"&?"))) {
+ if(!strncasecmp("oauth_signature=",token,16)) continue;
+ (*argv)=(char**) xrealloc(*argv,sizeof(char*)*(argc+1));
+ while (!(qesc&2) && (tmp=strchr(token,'\001'))) *tmp='&';
+ if (argc>0 || (qesc&4))
+ (*argv)[argc]=oauth_url_unescape(token, NULL);
+ else
+ (*argv)[argc]=xstrdup(token);
+ if (argc==0 && strstr(token, ":/")) {
+ // HTTP does not allow empty absolute paths, so the URL
+ // 'http://example.com' is equivalent to 'http://example.com/' and should
+ // be treated as such for the purposes of OAuth signing (rfc2616, section 3.2.1)
+ // see http://groups.google.com/group/oauth/browse_thread/thread/c44b6f061bfd98c?hl=en
+ char *slash=strstr(token, ":/");
+ while (slash && *(++slash) == '/') ; // skip slashes eg /xxx:[\/]*/
#if 0
- // skip possibly unescaped slashes in the userinfo - they're not allowed by RFC2396 but have been seen.
- // the hostname/IP may only contain alphanumeric characters - so we're safe there.
- if (slash && strchr(slash,'@')) slash=strchr(slash,'@');
+ // skip possibly unescaped slashes in the userinfo - they're not allowed by RFC2396 but have been seen.
+ // the hostname/IP may only contain alphanumeric characters - so we're safe there.
+ if (slash && strchr(slash,'@')) slash=strchr(slash,'@');
#endif
- if (slash && !strchr(slash,'/')) {
+ if (slash && !strchr(slash,'/')) {
#ifdef DEBUG_OAUTH
- fprintf(stderr, "\nliboauth: added trailing slash to URL: '%s'\n\n", token);
+ fprintf(stderr, "\nliboauth: added trailing slash to URL: '%s'\n\n", token);
#endif
- xfree((*argv)[argc]);
- (*argv)[argc]= (char*) xmalloc(sizeof(char)*(2+strlen(token)));
- strcpy((*argv)[argc],token);
- strcat((*argv)[argc],"/");
- }
- }
- if (argc==0 && (tmp=strstr((*argv)[argc],":80/"))) {
- memmove(tmp, tmp+3, strlen(tmp+2));
- }
- tmp=NULL;
- argc++;
- }
-
- xfree(t1);
- return argc;
+ xfree((*argv)[argc]);
+ (*argv)[argc]= (char*) xmalloc(sizeof(char)*(2+strlen(token)));
+ strcpy((*argv)[argc],token);
+ strcat((*argv)[argc],"/");
+ }
+ }
+ if (argc==0 && (tmp=strstr((*argv)[argc],":80/"))) {
+ memmove(tmp, tmp+3, strlen(tmp+2));
+ }
+ tmp=NULL;
+ argc++;
+ }
+
+ xfree(t1);
+ return argc;
}
int oauth_split_url_parameters(const char *url, char ***argv) {
- return oauth_split_post_paramters(url, argv, 1);
+ return oauth_split_post_paramters(url, argv, 1);
}
/**
@@ -414,7 +414,7 @@ int oauth_split_url_parameters(const char *url, char ***argv) {
*
*/
char *oauth_serialize_url (int argc, int start, char **argv) {
- return oauth_serialize_url_sep( argc, start, argv, "&", 0);
+ return oauth_serialize_url_sep( argc, start, argv, "&", 0);
}
/**
@@ -423,84 +423,84 @@ char *oauth_serialize_url (int argc, int start, char **argv) {
* @param argc the total number of elements in the array
* @param start element in the array at which to start concatenating.
* @param argv parameter-array to concatenate.
- * @param sep separator for parameters (usually "&")
- * @param mod - bitwise modifiers:
+ * @param sep separator for parameters (usually "&")
+ * @param mod - bitwise modifiers:
* 1: skip all values that start with "oauth_"
* 2: skip all values that don't start with "oauth_"
* 4: add double quotation marks around values (use with sep=", " to generate HTTP Authorization header).
* @return url string needs to be freed by the caller.
*/
char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int mod) {
- char *tmp, *t1;
- int i;
- int first=1;
- int seplen=strlen(sep);
- char *query = (char*) xmalloc(sizeof(char));
- *query='\0';
- for(i=start; i< argc; i++) {
- int len = 0;
- if ((mod&1)==1 && (strncmp(argv[i],"oauth_",6) == 0 || strncmp(argv[i],"x_oauth_",8) == 0) ) continue;
- if ((mod&2)==2 && (strncmp(argv[i],"oauth_",6) != 0 && strncmp(argv[i],"x_oauth_",8) != 0) && i!=0) continue;
-
- len+=strlen(query);
-
- if (i==start && i==0 && strstr(argv[i], ":/")) {
- tmp=xstrdup(argv[i]);
+ char *tmp, *t1;
+ int i;
+ int first=1;
+ int seplen=strlen(sep);
+ char *query = (char*) xmalloc(sizeof(char));
+ *query='\0';
+ for(i=start; i< argc; i++) {
+ int len = 0;
+ if ((mod&1)==1 && (strncmp(argv[i],"oauth_",6) == 0 || strncmp(argv[i],"x_oauth_",8) == 0) ) continue;
+ if ((mod&2)==2 && (strncmp(argv[i],"oauth_",6) != 0 && strncmp(argv[i],"x_oauth_",8) != 0) && i!=0) continue;
+
+ len+=strlen(query);
+
+ if (i==start && i==0 && strstr(argv[i], ":/")) {
+ tmp=xstrdup(argv[i]);
#if 1 // encode white-space in the base-url
- while ((t1=strchr(tmp,' '))) {
+ while ((t1=strchr(tmp,' '))) {
# if 0
- *t1='+';
+ *t1='+';
# else
- size_t off = t1-tmp;
- char *t2 = (char*) xmalloc(sizeof(char)*(3+strlen(tmp)));
- strcpy(t2, tmp);
- strcpy(t2+off+2, tmp+off);
- *(t2+off)='%'; *(t2+off+1)='2'; *(t2+off+2)='0';
- xfree(tmp);
- tmp=t2;
+ size_t off = t1-tmp;
+ char *t2 = (char*) xmalloc(sizeof(char)*(3+strlen(tmp)));
+ strcpy(t2, tmp);
+ strcpy(t2+off+2, tmp+off);
+ *(t2+off)='%'; *(t2+off+1)='2'; *(t2+off+2)='0';
+ xfree(tmp);
+ tmp=t2;
# endif
#endif
- }
- len+=strlen(tmp);
- } else if(!(t1=strchr(argv[i], '='))) {
- // see http://oauth.net/core/1.0/#anchor14
- // escape parameter names and arguments but not the '='
- tmp=xstrdup(argv[i]);
- tmp=(char*) xrealloc(tmp,(strlen(tmp)+2)*sizeof(char));
- strcat(tmp,"=");
- len+=strlen(tmp);
- } else {
- *t1=0;
- tmp = oauth_url_escape(argv[i]);
- *t1='=';
- t1 = oauth_url_escape((t1+1));
- tmp=(char*) xrealloc(tmp,(strlen(tmp)+strlen(t1)+2+(mod&4?2:0))*sizeof(char));
- strcat(tmp,"=");
- if (mod&4) strcat(tmp,"\"");
- strcat(tmp,t1);
- if (mod&4) strcat(tmp,"\"");
- xfree(t1);
- len+=strlen(tmp);
- }
- len+=seplen+1;
- query=(char*) xrealloc(query,len*sizeof(char));
- strcat(query, ((i==start||first)?"":sep));
- first=0;
- strcat(query, tmp);
- if (i==start && i==0 && strstr(tmp, ":/")) {
- strcat(query, "?");
- first=1;
- }
- xfree(tmp);
- }
- return (query);
+ }
+ len+=strlen(tmp);
+ } else if(!(t1=strchr(argv[i], '='))) {
+ // see http://oauth.net/core/1.0/#anchor14
+ // escape parameter names and arguments but not the '='
+ tmp=xstrdup(argv[i]);
+ tmp=(char*) xrealloc(tmp,(strlen(tmp)+2)*sizeof(char));
+ strcat(tmp,"=");
+ len+=strlen(tmp);
+ } else {
+ *t1=0;
+ tmp = oauth_url_escape(argv[i]);
+ *t1='=';
+ t1 = oauth_url_escape((t1+1));
+ tmp=(char*) xrealloc(tmp,(strlen(tmp)+strlen(t1)+2+(mod&4?2:0))*sizeof(char));
+ strcat(tmp,"=");
+ if (mod&4) strcat(tmp,"\"");
+ strcat(tmp,t1);
+ if (mod&4) strcat(tmp,"\"");
+ xfree(t1);
+ len+=strlen(tmp);
+ }
+ len+=seplen+1;
+ query=(char*) xrealloc(query,len*sizeof(char));
+ strcat(query, ((i==start||first)?"":sep));
+ first=0;
+ strcat(query, tmp);
+ if (i==start && i==0 && strstr(tmp, ":/")) {
+ strcat(query, "?");
+ first=1;
+ }
+ xfree(tmp);
+ }
+ return (query);
}
/**
* build a query parameter string from an array.
*
- * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
- * It strips the leading host/path, which is usually the first
+ * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
+ * It strips the leading host/path, which is usually the first
* element when using oauth_split_url_parameters on an URL.
*
* @param argc the total number of elements in the array
@@ -508,7 +508,7 @@ char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int
* @return url string needs to be freed by the caller.
*/
char *oauth_serialize_url_parameters (int argc, char **argv) {
- return oauth_serialize_url(argc, 1, argv);
+ return oauth_serialize_url(argc, 1, argv);
}
/**
@@ -521,36 +521,36 @@ char *oauth_serialize_url_parameters (int argc, char **argv) {
#if !defined HAVE_OPENSSL_HMAC_H && !defined USE_NSS
/* pre liboauth-0.7.2 and possible future versions that don't use OpenSSL or NSS */
char *oauth_gen_nonce() {
- char *nc;
- static int rndinit = 1;
- const char *chars = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
- unsigned int max = strlen( chars );
- int i, len;
-
- if(rndinit) {srand(time(NULL)
+ char *nc;
+ static int rndinit = 1;
+ const char *chars = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
+ unsigned int max = strlen( chars );
+ int i, len;
+
+ if(rndinit) {srand(time(NULL)
#ifndef WIN32 // quick windows check.
- * getpid()
+ * getpid()
#endif
- ); rndinit=0;} // seed random number generator - FIXME: we can do better ;)
-
- len=15+floor(rand()*16.0/(double)RAND_MAX);
- nc = (char*) xmalloc((len+1)*sizeof(char));
- for(i=0;i<len; i++) {
- nc[i] = chars[ rand() % max ];
- }
- nc[i]='\0';
- return (nc);
+ ); rndinit=0;} // seed random number generator - FIXME: we can do better ;)
+
+ len=15+floor(rand()*16.0/(double)RAND_MAX);
+ nc = (char*) xmalloc((len+1)*sizeof(char));
+ for(i=0;i<len; i++) {
+ nc[i] = chars[ rand() % max ];
+ }
+ nc[i]='\0';
+ return (nc);
}
#else // OpenSSL or NSS random number generator
#ifdef USE_NSS
- void oauth_init_nss(); //decladed in hash.c
+void oauth_init_nss(); //decladed in hash.c
# include "pk11pub.h"
# define MY_RAND PK11_GenerateRandom
# define MY_SRAND oauth_init_nss();
#else
# ifdef _GNU_SOURCE
-/* Note: the OpenSSL/GPL exemption stated
+/* Note: the OpenSSL/GPL exemption stated
* verbosely in hash.c applies to this code as well. */
# endif
# include <openssl/rand.h>
@@ -558,23 +558,23 @@ char *oauth_gen_nonce() {
# define MY_SRAND ;
#endif
char *oauth_gen_nonce() {
- char *nc;
- unsigned char buf;
- const char *chars = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
- unsigned int max = strlen(chars);
- int i, len;
-
- MY_SRAND
- MY_RAND(&buf, 1);
- len=15+(((short)buf)&0x0f);
- nc = (char*) xmalloc((len+1)*sizeof(char));
- for(i=0;i<len; i++) {
- MY_RAND(&buf, 1);
- nc[i] = chars[ ((short)buf) % max ];
- }
- nc[i]='\0';
- return (nc);
+ char *nc;
+ unsigned char buf;
+ const char *chars = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
+ unsigned int max = strlen(chars);
+ int i, len;
+
+ MY_SRAND
+ MY_RAND(&buf, 1);
+ len=15+(((short)buf)&0x0f);
+ nc = (char*) xmalloc((len+1)*sizeof(char));
+ for(i=0;i<len; i++) {
+ MY_RAND(&buf, 1);
+ nc[i] = chars[ ((short)buf) % max ];
+ }
+ nc[i]='\0';
+ return (nc);
}
#endif
@@ -585,42 +585,42 @@ char *oauth_gen_nonce() {
* see http://oauth.net/core/1.0/#anchor14
*/
int oauth_cmpstringp(const void *p1, const void *p2) {
- char *v1,*v2;
- char *t1,*t2;
- int rv;
- if (!p1 || !p2) return 0;
- // TODO: this is not fast - we should escape the
- // array elements (once) before sorting.
- v1=oauth_url_escape(* (char * const *)p1);
- v2=oauth_url_escape(* (char * const *)p2);
-
- // '=' signs are not "%3D" !
- if ((t1=strstr(v1,"%3D"))) {
- t1[0]='\0'; t1[1]='='; t1[2]='=';
- }
- if ((t2=strstr(v2,"%3D"))) {
- t2[0]='\0'; t2[1]='='; t2[2]='=';
- }
-
- // compare parameter names
- rv=strcmp(v1,v2);
- if (rv != 0) {
- xfree(v1);
- xfree(v2);
- return rv;
- }
-
- // if parameter names are equal, sort by value.
- if (t1) t1[0]='=';
- if (t2) t2[0]='=';
- if (t1 && t2) rv=strcmp(t1,t2);
- else if (!t1 && !t2) rv=0;
- else if (!t1) rv=-1;
- else rv=1;
-
- xfree(v1);
- xfree(v2);
- return rv;
+ char *v1,*v2;
+ char *t1,*t2;
+ int rv;
+ if (!p1 || !p2) return 0;
+ // TODO: this is not fast - we should escape the
+ // array elements (once) before sorting.
+ v1=oauth_url_escape(* (char * const *)p1);
+ v2=oauth_url_escape(* (char * const *)p2);
+
+ // '=' signs are not "%3D" !
+ if ((t1=strstr(v1,"%3D"))) {
+ t1[0]='\0'; t1[1]='='; t1[2]='=';
+ }
+ if ((t2=strstr(v2,"%3D"))) {
+ t2[0]='\0'; t2[1]='='; t2[2]='=';
+ }
+
+ // compare parameter names
+ rv=strcmp(v1,v2);
+ if (rv != 0) {
+ xfree(v1);
+ xfree(v2);
+ return rv;
+ }
+
+ // if parameter names are equal, sort by value.
+ if (t1) t1[0]='=';
+ if (t2) t2[0]='=';
+ if (t1 && t2) rv=strcmp(t1,t2);
+ else if (!t1 && !t2) rv=0;
+ else if (!t1) rv=-1;
+ else rv=1;
+
+ xfree(v1);
+ xfree(v2);
+ return rv;
}
/**
@@ -632,235 +632,235 @@ int oauth_cmpstringp(const void *p1, const void *p2) {
* @return FALSE (0) if array does not contain a parameter with given key, TRUE (1) otherwise.
*/
int oauth_param_exists(char **argv, int argc, char *key) {
- int i;
- size_t l= strlen(key);
- for (i=0;i<argc;i++)
- if (strlen(argv[i])>l && !strncmp(argv[i],key,l) && argv[i][l] == '=') return 1;
- return 0;
+ int i;
+ size_t l= strlen(key);
+ for (i=0;i<argc;i++)
+ if (strlen(argv[i])>l && !strncmp(argv[i],key,l) && argv[i][l] == '=') return 1;
+ return 0;
}
/**
* add query parameter to array
*
* @param argcp pointer to array length int
- * @param argvp pointer to array values
+ * @param argvp pointer to array values
* @param addparam parameter to add (eg. "foo=bar")
*/
void oauth_add_param_to_array(int *argcp, char ***argvp, const char *addparam) {
- (*argvp)=(char**) xrealloc(*argvp,sizeof(char*)*((*argcp)+1));
- (*argvp)[(*argcp)++]= (char*) xstrdup(addparam);
+ (*argvp)=(char**) xrealloc(*argvp,sizeof(char*)*((*argcp)+1));
+ (*argvp)[(*argcp)++]= (char*) xstrdup(addparam);
}
/**
*
*/
-void oauth_add_protocol(int *argcp, char ***argvp,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *t_key //< token key - posted plain text in URL
- ){
- char oarg[1024];
-
- // add OAuth specific arguments
- if (!oauth_param_exists(*argvp,*argcp,"oauth_nonce")) {
- char *tmp;
- snprintf(oarg, 1024, "oauth_nonce=%s", (tmp=oauth_gen_nonce()));
- oauth_add_param_to_array(argcp, argvp, oarg);
- xfree(tmp);
- }
-
- if (!oauth_param_exists(*argvp,*argcp,"oauth_timestamp")) {
- snprintf(oarg, 1024, "oauth_timestamp=%li", (long int) time(NULL));
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-
- if (t_key) {
- snprintf(oarg, 1024, "oauth_token=%s", t_key);
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-
- snprintf(oarg, 1024, "oauth_consumer_key=%s", c_key);
- oauth_add_param_to_array(argcp, argvp, oarg);
-
- snprintf(oarg, 1024, "oauth_signature_method=%s",
- method==0?"HMAC-SHA1":method==1?"RSA-SHA1":"PLAINTEXT");
- oauth_add_param_to_array(argcp, argvp, oarg);
-
- if (!oauth_param_exists(*argvp,*argcp,"oauth_version")) {
- snprintf(oarg, 1024, "oauth_version=1.0");
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
+void oauth_add_protocol(int *argcp, char ***argvp,
+ OAuthMethod method,
+ const char *c_key, //< consumer key - posted plain text
+ const char *t_key //< token key - posted plain text in URL
+ ){
+ char oarg[1024];
+
+ // add OAuth specific arguments
+ if (!oauth_param_exists(*argvp,*argcp,"oauth_nonce")) {
+ char *tmp;
+ snprintf(oarg, 1024, "oauth_nonce=%s", (tmp=oauth_gen_nonce()));
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ xfree(tmp);
+ }
+
+ if (!oauth_param_exists(*argvp,*argcp,"oauth_timestamp")) {
+ snprintf(oarg, 1024, "oauth_timestamp=%li", (long int) time(NULL));
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ }
+
+ if (t_key) {
+ snprintf(oarg, 1024, "oauth_token=%s", t_key);
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ }
+
+ snprintf(oarg, 1024, "oauth_consumer_key=%s", c_key);
+ oauth_add_param_to_array(argcp, argvp, oarg);
+
+ snprintf(oarg, 1024, "oauth_signature_method=%s",
+ method==0?"HMAC-SHA1":method==1?"RSA-SHA1":"PLAINTEXT");
+ oauth_add_param_to_array(argcp, argvp, oarg);
+
+ if (!oauth_param_exists(*argvp,*argcp,"oauth_version")) {
+ snprintf(oarg, 1024, "oauth_version=1.0");
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ }
#if 0 // oauth_version 1.0 Rev A
- if (!oauth_param_exists(argv,argc,"oauth_callback")) {
- snprintf(oarg, 1024, "oauth_callback=oob");
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
+ if (!oauth_param_exists(argv,argc,"oauth_callback")) {
+ snprintf(oarg, 1024, "oauth_callback=oob");
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ }
#endif
}
-char *oauth_sign_url (const char *url, char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- return oauth_sign_url2(url, postargs,
- method, NULL,
- c_key, c_secret,
- t_key, t_secret);
-}
-
-char *oauth_sign_url2 (const char *url, char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- int argc;
- char **argv = NULL;
- char *rv;
-
- if (postargs)
- argc = oauth_split_post_paramters(url, &argv, 0);
- else
- argc = oauth_split_url_parameters(url, &argv);
-
- rv=oauth_sign_array2(&argc, &argv, postargs,
- method, http_method,
- c_key, c_secret, t_key, t_secret);
-
- oauth_free_array(&argc, &argv);
- return(rv);
+char *oauth_sign_url (const char *url, char **postargs,
+ OAuthMethod method,
+ const char *c_key, //< consumer key - posted plain text
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_key, //< token key - posted plain text in URL
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
+ return oauth_sign_url2(url, postargs,
+ method, NULL,
+ c_key, c_secret,
+ t_key, t_secret);
+}
+
+char *oauth_sign_url2 (const char *url, char **postargs,
+ OAuthMethod method,
+ const char *http_method, //< HTTP request method
+ const char *c_key, //< consumer key - posted plain text
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_key, //< token key - posted plain text in URL
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
+ int argc;
+ char **argv = NULL;
+ char *rv;
+
+ if (postargs)
+ argc = oauth_split_post_paramters(url, &argv, 0);
+ else
+ argc = oauth_split_url_parameters(url, &argv);
+
+ rv=oauth_sign_array2(&argc, &argv, postargs,
+ method, http_method,
+ c_key, c_secret, t_key, t_secret);
+
+ oauth_free_array(&argc, &argv);
+ return(rv);
}
char *oauth_sign_array (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- return oauth_sign_array2 (argcp, argvp,
- postargs, method,
- NULL,
- c_key, c_secret,
- t_key, t_secret);
+ char **postargs,
+ OAuthMethod method,
+ const char *c_key, //< consumer key - posted plain text
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_key, //< token key - posted plain text in URL
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
+ return oauth_sign_array2 (argcp, argvp,
+ postargs, method,
+ NULL,
+ c_key, c_secret,
+ t_key, t_secret);
}
void oauth_sign_array2_process (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- char oarg[1024];
- char *query;
- char *okey, *odat, *sign;
- char *http_request_method;
-
- if (!http_method) {
- http_request_method = xstrdup(postargs?"POST":"GET");
- } else {
- int i;
- http_request_method = xstrdup(http_method);
- for (i=0;i<strlen(http_request_method);i++)
- http_request_method[i]=toupper(http_request_method[i]);
- }
-
- // add required OAuth protocol parameters
- oauth_add_protocol(argcp, argvp, method, c_key, t_key);
-
- // sort parameters
- qsort(&(*argvp)[1], (*argcp)-1, sizeof(char *), oauth_cmpstringp);
-
- // serialize URL - base-url
- query= oauth_serialize_url_parameters(*argcp, *argvp);
-
- // prepare data to sign
- if (method == OA_RSA) {
- size_t len = 1;
- if (c_secret) {
- len += strlen(c_secret);
- }
- if (t_secret) {
- len += strlen(t_secret);
- }
- okey = (char*)xmalloc(len * sizeof(char));
- *okey = '\0';
- if (c_secret) {
- okey = strcat(okey, c_secret);
- }
- if (t_secret) {
- okey = strcat(okey, t_secret);
- }
- } else {
- okey = oauth_catenc(2, c_secret, t_secret);
- }
-
- odat = oauth_catenc(3, http_request_method, (*argvp)[0], query); // base-string
- xfree(http_request_method);
+ char **postargs,
+ OAuthMethod method,
+ const char *http_method, //< HTTP request method
+ const char *c_key, //< consumer key - posted plain text
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_key, //< token key - posted plain text in URL
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
+ char oarg[1024];
+ char *query;
+ char *okey, *odat, *sign;
+ char *http_request_method;
+
+ if (!http_method) {
+ http_request_method = xstrdup(postargs?"POST":"GET");
+ } else {
+ int i;
+ http_request_method = xstrdup(http_method);
+ for (i=0;i<strlen(http_request_method);i++)
+ http_request_method[i]=toupper(http_request_method[i]);
+ }
+
+ // add required OAuth protocol parameters
+ oauth_add_protocol(argcp, argvp, method, c_key, t_key);
+
+ // sort parameters
+ qsort(&(*argvp)[1], (*argcp)-1, sizeof(char *), oauth_cmpstringp);
+
+ // serialize URL - base-url
+ query= oauth_serialize_url_parameters(*argcp, *argvp);
+
+ // prepare data to sign
+ if (method == OA_RSA) {
+ size_t len = 1;
+ if (c_secret) {
+ len += strlen(c_secret);
+ }
+ if (t_secret) {
+ len += strlen(t_secret);
+ }
+ okey = (char*)xmalloc(len * sizeof(char));
+ *okey = '\0';
+ if (c_secret) {
+ okey = strcat(okey, c_secret);
+ }
+ if (t_secret) {
+ okey = strcat(okey, t_secret);
+ }
+ } else {
+ okey = oauth_catenc(2, c_secret, t_secret);
+ }
+
+ odat = oauth_catenc(3, http_request_method, (*argvp)[0], query); // base-string
+ xfree(http_request_method);
#ifdef DEBUG_OAUTH
- fprintf (stderr, "\nliboauth: data to sign='%s'\n\n", odat);
- fprintf (stderr, "\nliboauth: key='%s'\n\n", okey);
+ fprintf (stderr, "\nliboauth: data to sign='%s'\n\n", odat);
+ fprintf (stderr, "\nliboauth: key='%s'\n\n", okey);
#endif
- // generate signature
- switch(method) {
- case OA_RSA:
- sign = oauth_sign_rsa_sha1(odat,okey); // XXX okey needs to be RSA key!
- break;
- case OA_PLAINTEXT:
- sign = oauth_sign_plaintext(odat,okey);
- break;
- default:
- sign = oauth_sign_hmac_sha1(odat,okey);
- }
+ // generate signature
+ switch(method) {
+ case OA_RSA:
+ sign = oauth_sign_rsa_sha1(odat,okey); // XXX okey needs to be RSA key!
+ break;
+ case OA_PLAINTEXT:
+ sign = oauth_sign_plaintext(odat,okey);
+ break;
+ default:
+ sign = oauth_sign_hmac_sha1(odat,okey);
+ }
#ifdef WIPE_MEMORY
- memset(okey,0, strlen(okey));
- memset(odat,0, strlen(odat));
+ memset(okey,0, strlen(okey));
+ memset(odat,0, strlen(odat));
#endif
- xfree(odat);
- xfree(okey);
-
- // append signature to query args.
- snprintf(oarg, 1024, "oauth_signature=%s",sign);
- oauth_add_param_to_array(argcp, argvp, oarg);
- xfree(sign);
- if(query) xfree(query);
+ xfree(odat);
+ xfree(okey);
+
+ // append signature to query args.
+ snprintf(oarg, 1024, "oauth_signature=%s",sign);
+ oauth_add_param_to_array(argcp, argvp, oarg);
+ xfree(sign);
+ if(query) xfree(query);
}
char *oauth_sign_array2 (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
-
- char *result;
- oauth_sign_array2_process(argcp, argvp, postargs, method, http_method, c_key, c_secret, t_key, t_secret);
-
- // build URL params
- result = oauth_serialize_url(*argcp, (postargs?1:0), *argvp);
-
- if(postargs) {
- *postargs = result;
- result = xstrdup((*argvp)[0]);
- }
-
- return result;
+ char **postargs,
+ OAuthMethod method,
+ const char *http_method, //< HTTP request method
+ const char *c_key, //< consumer key - posted plain text
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_key, //< token key - posted plain text in URL
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
+
+ char *result;
+ oauth_sign_array2_process(argcp, argvp, postargs, method, http_method, c_key, c_secret, t_key, t_secret);
+
+ // build URL params
+ result = oauth_serialize_url(*argcp, (postargs?1:0), *argvp);
+
+ if(postargs) {
+ *postargs = result;
+ result = xstrdup((*argvp)[0]);
+ }
+
+ return result;
}
@@ -871,11 +871,11 @@ char *oauth_sign_array2 (int *argcp, char***argvp,
* @param argvp pointer to array values to be xfree()d
*/
void oauth_free_array(int *argcp, char ***argvp) {
- int i;
- for (i=0;i<(*argcp);i++) {
- xfree((*argvp)[i]);
- }
- if(*argvp) xfree(*argvp);
+ int i;
+ for (i=0;i<(*argcp);i++) {
+ xfree((*argvp)[i]);
+ }
+ if(*argvp) xfree(*argvp);
}
/**
@@ -883,12 +883,12 @@ void oauth_free_array(int *argcp, char ***argvp) {
* with the oauth_body_hash
*/
char *oauth_body_hash_encode(size_t len, unsigned char *digest) {
- char *sign=oauth_encode_base64(len,digest);
- char *sig_url = (char*)xmalloc(17+strlen(sign));
- sprintf(sig_url,"oauth_body_hash=%s", sign);
- xfree(sign);
- xfree(digest);
- return sig_url;
+ char *sign=oauth_encode_base64(len,digest);
+ char *sig_url = (char*)xmalloc(17+strlen(sign));
+ sprintf(sig_url,"oauth_body_hash=%s", sign);
+ xfree(sign);
+ xfree(digest);
+ return sig_url;
}
@@ -897,7 +897,7 @@ char *oauth_body_hash_encode(size_t len, unsigned char *digest) {
* attacker guess how many leading chars are correct:
* http://rdist.root.org/2010/01/07/timing-independent-array-comparison/ )
*
- * @param a string to compare
+ * @param a string to compare
* @param b string to compare
* @param len_a length of string a
* @param len_b length of string b
@@ -905,40 +905,40 @@ char *oauth_body_hash_encode(size_t len, unsigned char *digest) {
* returns 0 (false) if strings are not equal, and 1 (true) if strings are equal.
*/
int oauth_time_independent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b) {
- int diff, i, j;
- if (a == NULL) return (b == NULL);
- else if (b == NULL) return 0;
- else if (len_b == 0) return (len_a == 0);
- diff = len_a ^ len_b;
- j=0;
- for (i=0; i<len_a; ++i) {
- diff |= a[i] ^ b[j];
- j = (j+1) % len_b;
- }
- return diff == 0;
+ int diff, i, j;
+ if (a == NULL) return (b == NULL);
+ else if (b == NULL) return 0;
+ else if (len_b == 0) return (len_a == 0);
+ diff = len_a ^ len_b;
+ j=0;
+ for (i=0; i<len_a; ++i) {
+ diff |= a[i] ^ b[j];
+ j = (j+1) % len_b;
+ }
+ return diff == 0;
}
int oauth_time_indepenent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b) {
- return oauth_time_independent_equals_n(a, b, len_a, len_b);
+ return oauth_time_independent_equals_n(a, b, len_a, len_b);
}
int oauth_time_independent_equals(const char* a, const char* b) {
- return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
+ return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
}
int oauth_time_indepenent_equals(const char* a, const char* b) {
- return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
+ return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
}
/**
* xep-0235 - TODO
*/
char *oauth_sign_xmpp (const char *xml,
- OAuthMethod method,
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
+ OAuthMethod method,
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *t_secret //< token secret - used as 2st part of secret-key
+ ) {
- return NULL;
+ return NULL;
}
// vi: sts=2 sw=2 ts=2
diff --git a/src/oauth.h b/src/oauth.h
index bb6dc3c..297e463 100644
--- a/src/oauth.h
+++ b/src/oauth.h
@@ -11,10 +11,10 @@
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -25,7 +25,7 @@
*
*/
#ifndef _OAUTH_H
-#define _OAUTH_H 1
+#define _OAUTH_H
#ifndef DOXYGEN_IGNORE
// liboauth version
@@ -62,10 +62,10 @@ extern "C" {
/** \enum OAuthMethod
* signature method to used for signing the request.
- */
-typedef enum {
+ */
+typedef enum {
OA_HMAC=0, ///< use HMAC-SHA1 request signing method
- OA_RSA, ///< use RSA signature
+ OA_RSA, ///< use RSA signature
OA_PLAINTEXT ///< use plain text signature (for testing only)
} OAuthMethod;
@@ -81,7 +81,7 @@ char *oauth_encode_base64(int size, const unsigned char *src);
/**
* Decode the base64 encoded string 'src' into the memory pointed to by
- * 'dest'.
+ * 'dest'.
*
* @param dest Pointer to memory for holding the decoded string.
* Must be large enough to receive the decoded string.
@@ -110,7 +110,7 @@ char *oauth_url_escape(const char *string);
* The caller must free the returned string.
*/
char *oauth_url_unescape(const char *string, size_t *olen);
-
+
/**
* returns base64 encoded HMAC-SHA1 signature for
@@ -153,7 +153,7 @@ char *oauth_sign_plaintext (const char *m, const char *k);
* the returned signature needs to be freed by the caller.
*
* @param m message to be signed
- * @param k private-key PKCS and Base64-encoded
+ * @param k private-key PKCS and Base64-encoded
* @return base64 encoded signature string.
*/
char *oauth_sign_rsa_sha1 (const char *m, const char *k);
@@ -175,43 +175,43 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s);
* url-escape strings and concatenate with '&' separator.
* The number of strings to be concatenated must be
* given as first argument.
- * all arguments thereafter must be of type (char *)
+ * all arguments thereafter must be of type (char *)
*
* @param len the number of arguments to follow this parameter
*
- * @return pointer to memory holding the concatenated
+ * @return pointer to memory holding the concatenated
* strings - needs to be xfree(d) by the caller. or NULL
* in case we ran out of memory.
*/
char *oauth_catenc(int len, ...);
/**
- * splits the given url into a parameter array.
+ * splits the given url into a parameter array.
* (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
* (see \ref oauth_split_post_paramters for a more generic version)
*
* @param url the url or query-string to parse; may be NULL
* @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
+ * The array is re-allocated to match the number of parameters and each
* parameter-string is allocated with strdup. - The memory needs to be freed
* by the caller.
- *
+ *
* @return number of parameter(s) in array.
*/
int oauth_split_url_parameters(const char *url, char ***argv);
/**
- * splits the given url into a parameter array.
+ * splits the given url into a parameter array.
* (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
*
- * @param url the url or query-string to parse.
+ * @param url the url or query-string to parse.
* @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
+ * The array is re-allocated to match the number of parameters and each
* parameter-string is allocated with strdup. - The memory needs to be freed
* by the caller.
* @param qesc use query parameter escape (vs post-param-escape) - if set
* to 1 all '+' are treated as spaces ' '
- *
+ *
* @return number of parameter(s) in array.
*/
int oauth_split_post_paramters(const char *url, char ***argv, short qesc);
@@ -233,8 +233,8 @@ char *oauth_serialize_url (int argc, int start, char **argv);
* @param argc the total number of elements in the array
* @param start element in the array at which to start concatenating.
* @param argv parameter-array to concatenate.
- * @param sep separator for parameters (usually "&")
- * @param mod - bitwise modifiers:
+ * @param sep separator for parameters (usually "&")
+ * @param mod - bitwise modifiers:
* 1: skip all values that start with "oauth_"
* 2: skip all values that don't start with "oauth_"
* 4: double quotation marks are added around values (use with sep ", " for HTTP Authorization header).
@@ -245,8 +245,8 @@ char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int
/**
* build a query parameter string from an array.
*
- * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
- * It strips the leading host/path, which is usually the first
+ * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
+ * It strips the leading host/path, which is usually the first
* element when using oauth_split_url_parameters on an URL.
*
* @param argc the total number of elements in the array
@@ -254,7 +254,7 @@ char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int
* @return url string needs to be freed by the caller.
*/
char *oauth_serialize_url_parameters (int argc, char **argv);
-
+
/**
* generate a random string between 15 and 32 chars length
* and return a pointer to it. The value needs to be freed by the
@@ -287,7 +287,7 @@ int oauth_param_exists(char **argv, int argc, char *key);
* add query parameter to array
*
* @param argcp pointer to array length int
- * @param argvp pointer to array values
+ * @param argvp pointer to array values
* @param addparam parameter to add (eg. "foo=bar")
*/
void oauth_add_param_to_array(int *argcp, char ***argvp, const char *addparam);
@@ -305,7 +305,7 @@ void oauth_free_array(int *argcp, char ***argvp);
* attacker guess how many leading chars are correct:
* http://rdist.root.org/2010/01/07/timing-independent-array-comparison/ )
*
- * @param a string to compare
+ * @param a string to compare
* @param b string to compare
* @param len_a length of string a
* @param len_b length of string b
@@ -321,10 +321,10 @@ int oauth_time_indepenent_equals_n(const char* a, const char* b, size_t len_a, s
/**
* compare two strings in constant-time.
- * wrapper to \ref oauth_time_independent_equals_n
+ * wrapper to \ref oauth_time_independent_equals_n
* which calls strlen() for each argument.
*
- * @param a string to compare
+ * @param a string to compare
* @param b string to compare
*
* returns 0 (false) if strings are not equal, and 1 (true) if strings are equal.
@@ -339,25 +339,25 @@ int oauth_time_indepenent_equals(const char* a, const char* b) attribute_depreca
/**
* calculate OAuth-signature for a given HTTP request URL, parameters and oauth-tokens.
*
- * if 'postargs' is NULL a "GET" request is signed and the
- * signed URL is returned. Else this fn will modify 'postargs'
- * to point to memory that contains the signed POST-variables
+ * if 'postargs' is NULL a "GET" request is signed and the
+ * signed URL is returned. Else this fn will modify 'postargs'
+ * to point to memory that contains the signed POST-variables
* and returns the base URL.
*
* both, the return value and (if given) 'postargs' need to be freed
* by the caller.
*
- * @param url The request URL to be signed. append all GET or POST
+ * @param url The request URL to be signed. append all GET or POST
* query-parameters separated by either '?' or '&' to this parameter.
*
* @param postargs This parameter points to an area where the return value
* is stored. If 'postargs' is NULL, no value is stored.
*
- * @param method specify the signature method to use. It is of type
+ * @param method specify the signature method to use. It is of type
* \ref OAuthMethod and most likely \ref OA_HMAC.
*
* @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
+ * If NULL is given as 'http_method' this defaults to "GET" when
* 'postargs' is also NULL and when postargs is not NULL "POST" is used.
*
* @param c_key consumer key
@@ -368,11 +368,11 @@ int oauth_time_indepenent_equals(const char* a, const char* b) attribute_depreca
* @return the signed url or NULL if an error occurred.
*
*/
-char *oauth_sign_url2 (const char *url, char **postargs,
- OAuthMethod method,
+char *oauth_sign_url2 (const char *url, char **postargs,
+ OAuthMethod method,
const char *http_method, //< HTTP request method
const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_key, //< token key - posted plain text in URL
const char *t_secret //< token secret - used as 2st part of secret-key
);
@@ -380,10 +380,10 @@ char *oauth_sign_url2 (const char *url, char **postargs,
/**
* @deprecated Use oauth_sign_url2() instead.
*/
-char *oauth_sign_url (const char *url, char **postargs,
- OAuthMethod method,
+char *oauth_sign_url (const char *url, char **postargs,
+ OAuthMethod method,
const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_key, //< token key - posted plain text in URL
const char *t_secret //< token secret - used as 2st part of secret-key
) attribute_deprecated;
@@ -399,10 +399,10 @@ char *oauth_sign_url (const char *url, char **postargs,
* OAuth HTTP Authorization header:
* see http://oauth.net/core/1.0a/#consumer_req_param
* the oauthtest2 example code does so.
- *
+ *
*
* @param argcp pointer to array length int
- * @param argvp pointer to array values
+ * @param argvp pointer to array values
* (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" ..
* the array is modified: fi. oauth_ parameters are added)
* These arrays can be generated with /ref oauth_split_url_parameters
@@ -411,11 +411,11 @@ char *oauth_sign_url (const char *url, char **postargs,
* @param postargs This parameter points to an area where the return value
* is stored. If 'postargs' is NULL, no value is stored.
*
- * @param method specify the signature method to use. It is of type
+ * @param method specify the signature method to use. It is of type
* \ref OAuthMethod and most likely \ref OA_HMAC.
*
* @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
+ * If NULL is given as 'http_method' this defaults to "GET" when
* 'postargs' is also NULL and when postargs is not NULL "POST" is used.
*
* @param c_key consumer key
@@ -428,20 +428,20 @@ char *oauth_sign_url (const char *url, char **postargs,
*/
void oauth_sign_array2_process (int *argcp, char***argvp,
char **postargs,
- OAuthMethod method,
+ OAuthMethod method,
const char *http_method, //< HTTP request method
const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_key, //< token key - posted plain text in URL
const char *t_secret //< token secret - used as 2st part of secret-key
);
/**
* same as /ref oauth_sign_url
- * with the url already split into parameter array
+ * with the url already split into parameter array
*
* @param argcp pointer to array length int
- * @param argvp pointer to array values
+ * @param argvp pointer to array values
* (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" ..
* the array is modified: fi. oauth_ parameters are added)
* These arrays can be generated with /ref oauth_split_url_parameters
@@ -450,11 +450,11 @@ void oauth_sign_array2_process (int *argcp, char***argvp,
* @param postargs This parameter points to an area where the return value
* is stored. If 'postargs' is NULL, no value is stored.
*
- * @param method specify the signature method to use. It is of type
+ * @param method specify the signature method to use. It is of type
* \ref OAuthMethod and most likely \ref OA_HMAC.
*
* @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
+ * If NULL is given as 'http_method' this defaults to "GET" when
* 'postargs' is also NULL and when postargs is not NULL "POST" is used.
*
* @param c_key consumer key
@@ -466,10 +466,10 @@ void oauth_sign_array2_process (int *argcp, char***argvp,
*/
char *oauth_sign_array2 (int *argcp, char***argvp,
char **postargs,
- OAuthMethod method,
+ OAuthMethod method,
const char *http_method, //< HTTP request method
const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_key, //< token key - posted plain text in URL
const char *t_secret //< token secret - used as 2st part of secret-key
);
@@ -479,38 +479,38 @@ char *oauth_sign_array2 (int *argcp, char***argvp,
*/
char *oauth_sign_array (int *argcp, char***argvp,
char **postargs,
- OAuthMethod method,
+ OAuthMethod method,
const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_key, //< token key - posted plain text in URL
const char *t_secret //< token secret - used as 2st part of secret-key
) attribute_deprecated;
-/**
+/**
* calculate body hash (sha1sum) of given file and return
* a oauth_body_hash=xxxx parameter to be added to the request.
* The returned string needs to be freed by the calling function.
*
* see
* http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
- *
+ *
* @param filename the filename to calculate the hash for
*
* @return URL oauth_body_hash parameter string
*/
char *oauth_body_hash_file(char *filename);
-/**
+/**
* calculate body hash (sha1sum) of given data and return
* a oauth_body_hash=xxxx parameter to be added to the request.
* The returned string needs to be freed by the calling function.
- * The returned string is not yet url-escaped and suitable to be
+ * The returned string is not yet url-escaped and suitable to be
* passed as argument to \ref oauth_catenc.
*
* see
* http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
- *
+ *
* @param length length of the data parameter in bytes
* @param data to calculate the hash for
*
@@ -521,7 +521,7 @@ char *oauth_body_hash_data(size_t length, const char *data);
/**
* base64 encode digest, free it and return a URL parameter
* with the oauth_body_hash. The returned hash needs to be freed by the
- * calling function. The returned string is not yet url-escaped and
+ * calling function. The returned string is not yet url-escaped and
* thus suitable to be passed to \ref oauth_catenc.
*
* @param len length of the digest to encode
@@ -535,19 +535,19 @@ char *oauth_body_hash_encode(size_t len, unsigned char *digest);
* xep-0235 - TODO
*/
char *oauth_sign_xmpp (const char *xml,
- OAuthMethod method,
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
+ OAuthMethod method,
+ const char *c_secret, //< consumer secret - used as 1st part of secret-key
const char *t_secret //< token secret - used as 2st part of secret-key
);
/**
- * do a HTTP GET request, wait for it to finish
+ * do a HTTP GET request, wait for it to finish
* and return the content of the reply.
* (requires libcurl or a command-line HTTP client)
*
* If compiled <b>without</b> libcurl this function calls
* a command-line executable defined in the environment variable
- * OAUTH_HTTP_GET_CMD - it defaults to
+ * OAUTH_HTTP_GET_CMD - it defaults to
* <tt>curl -sA 'liboauth-agent/0.1' '%%u'</tt>
* where %%u is replaced with the URL and query parameters.
*
@@ -556,7 +556,7 @@ char *oauth_sign_xmpp (const char *xml,
*
* WARNING: this is a tentative function. it's convenient and handy for testing
* or developing OAuth code. But don't rely on this function
- * to become a stable part of this API. It does not do
+ * to become a stable part of this API. It does not do
* much error checking or handling for one thing..
*
* NOTE: \a u and \a q are just concatenated with a '?' in between,
@@ -572,7 +572,7 @@ char *oauth_sign_xmpp (const char *xml,
char *oauth_http_get (const char *u, const char *q) attribute_deprecated;
/**
- * do a HTTP GET request, wait for it to finish
+ * do a HTTP GET request, wait for it to finish
* and return the content of the reply.
*
* (requires libcurl)
@@ -596,16 +596,16 @@ char *oauth_http_get2 (const char *u, const char *q, const char *customheader) a
/**
- * do a HTTP POST request, wait for it to finish
+ * do a HTTP POST request, wait for it to finish
* and return the content of the reply.
* (requires libcurl or a command-line HTTP client)
*
* If compiled <b>without</b> libcurl this function calls
* a command-line executable defined in the environment variable
- * OAUTH_HTTP_CMD - it defaults to
+ * OAUTH_HTTP_CMD - it defaults to
* <tt>curl -sA 'liboauth-agent/0.1' -d '%%p' '%%u'</tt>
- * where %%p is replaced with the postargs and %%u is replaced with
- * the URL.
+ * where %%p is replaced with the postargs and %%u is replaced with
+ * the URL.
*
* bash & wget example:
* <tt>export OAUTH_HTTP_CMD="wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "</tt>
@@ -617,7 +617,7 @@ char *oauth_http_get2 (const char *u, const char *q, const char *customheader) a
*
* WARNING: this is a tentative function. it's convenient and handy for testing
* or developing OAuth code. But don't rely on this function
- * to become a stable part of this API. It does not do
+ * to become a stable part of this API. It does not do
* much error checking for one thing..
*
* @param u url to query
@@ -629,7 +629,7 @@ char *oauth_http_get2 (const char *u, const char *q, const char *customheader) a
char *oauth_http_post (const char *u, const char *p) attribute_deprecated;
/**
- * do a HTTP POST request, wait for it to finish
+ * do a HTTP POST request, wait for it to finish
* and return the content of the reply.
* (requires libcurl)
*
@@ -678,7 +678,7 @@ char *oauth_post_file (const char *u, const char *fn, const size_t len, const ch
*
* @param u url to retrieve
* @param data data to post
- * @param len length of the data in bytes.
+ * @param len length of the data in bytes.
* @param customheader specify custom HTTP header (or NULL for default)
* Multiple header elements can be passed separating them with "\r\n"
* @return returned HTTP reply or NULL on error
@@ -710,9 +710,9 @@ char *oauth_post_data (const char *u, const char *data, size_t len, const char *
*
* @deprecated use libcurl - http://curl.haxx.se/libcurl/c/
*/
-char *oauth_post_data_with_callback (const char *u,
- const char *data,
- size_t len,
+char *oauth_post_data_with_callback (const char *u,
+ const char *data,
+ size_t len,
const char *customheader,
void (*callback)(void*,int,size_t,size_t),
void *callback_data) attribute_deprecated;
@@ -728,7 +728,7 @@ char *oauth_post_data_with_callback (const char *u,
*
* @param u url to retrieve
* @param data data to post
- * @param len length of the data in bytes.
+ * @param len length of the data in bytes.
* @param customheader specify custom HTTP header (or NULL for default)
* Multiple header elements can be passed separating them with "\r\n"
* @param httpMethod specify http verb ("GET"/"POST"/"PUT"/"DELETE") to be used. if httpMethod is NULL, a POST is executed.
@@ -766,9 +766,9 @@ char *oauth_send_data (const char *u,
*
* @deprecated use libcurl - http://curl.haxx.se/libcurl/c/
*/
-char *oauth_send_data_with_callback (const char *u,
- const char *data,
- size_t len,
+char *oauth_send_data_with_callback (const char *u,
+ const char *data,
+ size_t len,
const char *customheader,
void (*callback)(void*,int,size_t,size_t),
void *callback_data,
diff --git a/src/oauth_http.c b/src/oauth_http.c
index 9d637e1..2307f5a 100644
--- a/src/oauth_http.c
+++ b/src/oauth_http.c
@@ -9,10 +9,10 @@
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -61,53 +61,53 @@
}
struct MemoryStruct {
- char *data;
- size_t size; //< bytes remaining (r), bytes accumulated (w)
+ char *data;
+ size_t size; //< bytes remaining (r), bytes accumulated (w)
- size_t start_size; //< only used with ..AndCall()
- void (*callback)(void*,int,size_t,size_t); //< only used with ..AndCall()
- void *callback_data; //< only used with ..AndCall()
+ size_t start_size; //< only used with ..AndCall()
+ void (*callback)(void*,int,size_t,size_t); //< only used with ..AndCall()
+ void *callback_data; //< only used with ..AndCall()
};
static size_t
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) {
- size_t realsize = size * nmemb;
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
-
- mem->data = (char *)xrealloc(mem->data, mem->size + realsize + 1);
- if (mem->data) {
- memcpy(&(mem->data[mem->size]), ptr, realsize);
- mem->size += realsize;
- mem->data[mem->size] = 0;
- }
- return realsize;
+ size_t realsize = size * nmemb;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+
+ mem->data = (char *)xrealloc(mem->data, mem->size + realsize + 1);
+ if (mem->data) {
+ memcpy(&(mem->data[mem->size]), ptr, realsize);
+ mem->size += realsize;
+ mem->data[mem->size] = 0;
+ }
+ return realsize;
}
static size_t
ReadMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t realsize = size * nmemb;
- if (realsize > mem->size) realsize = mem->size;
- memcpy(ptr, mem->data, realsize);
- mem->size -= realsize;
- mem->data += realsize;
- return realsize;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+ size_t realsize = size * nmemb;
+ if (realsize > mem->size) realsize = mem->size;
+ memcpy(ptr, mem->data, realsize);
+ mem->size -= realsize;
+ mem->data += realsize;
+ return realsize;
}
static size_t
WriteMemoryCallbackAndCall(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t ret=WriteMemoryCallback(ptr,size,nmemb,data);
- mem->callback(mem->callback_data,0,mem->size,mem->size);
- return ret;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+ size_t ret=WriteMemoryCallback(ptr,size,nmemb,data);
+ mem->callback(mem->callback_data,0,mem->size,mem->size);
+ return ret;
}
static size_t
ReadMemoryCallbackAndCall(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t ret=ReadMemoryCallback(ptr,size,nmemb,data);
- mem->callback(mem->callback_data,1,mem->start_size-mem->size,mem->start_size);
- return ret;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+ size_t ret=ReadMemoryCallback(ptr,size,nmemb,data);
+ mem->callback(mem->callback_data,1,mem->start_size-mem->size,mem->start_size);
+ return ret;
}
/**
@@ -115,43 +115,43 @@ ReadMemoryCallbackAndCall(void *ptr, size_t size, size_t nmemb, void *data) {
* the returned string (if not NULL) needs to be freed by the caller
*
* @param u url to retrieve
- * @param p post parameters
+ * @param p post parameters
* @param customheader specify custom HTTP header (or NULL for none)
* @return returned HTTP
*/
char *oauth_curl_post (const char *u, const char *p, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
-
- struct MemoryStruct chunk;
- chunk.data=NULL;
- chunk.size = 0;
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, p);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- if (customheader) {
- slist = curl_slist_append(slist, customheader);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- }
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ CURL *curl;
+ CURLcode res;
+ struct curl_slist *slist=NULL;
+
+ struct MemoryStruct chunk;
+ chunk.data=NULL;
+ chunk.size = 0;
+
+ curl = curl_easy_init();
+ if(!curl) return NULL;
+ curl_easy_setopt(curl, CURLOPT_URL, u);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, p);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+ if (customheader) {
+ slist = curl_slist_append(slist, customheader);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+ }
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
+#ifdef OAUTH_CURL_TIMEOUT
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (res) {
- return NULL;
- }
-
- curl_easy_cleanup(curl);
- return (chunk.data);
+ GLOBAL_CURL_ENVIROMENT_OPTIONS;
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(slist);
+ if (res) {
+ return NULL;
+ }
+
+ curl_easy_cleanup(curl);
+ return (chunk.data);
}
/**
@@ -159,58 +159,58 @@ char *oauth_curl_post (const char *u, const char *p, const char *customheader) {
* the returned string (if not NULL) needs to be freed by the caller
*
* @param u url to retrieve
- * @param q optional query parameters
+ * @param q optional query parameters
* @param customheader specify custom HTTP header (or NULL for none)
* @return returned HTTP
*/
char *oauth_curl_get (const char *u, const char *q, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- char *t1=NULL;
- struct MemoryStruct chunk;
-
- if (q) {
- t1=(char*)xmalloc(sizeof(char)*(strlen(u)+strlen(q)+2));
- strcpy(t1,u); strcat(t1,"?"); strcat(t1,q);
- }
-
- chunk.data=NULL;
- chunk.size = 0;
-
- curl = curl_easy_init();
- if(!curl) {
- xfree(t1);
- return NULL;
- }
- curl_easy_setopt(curl, CURLOPT_URL, q?t1:u);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- if (customheader) {
- slist = curl_slist_append(slist, customheader);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- }
+ CURL *curl;
+ CURLcode res;
+ struct curl_slist *slist=NULL;
+ char *t1=NULL;
+ struct MemoryStruct chunk;
+
+ if (q) {
+ t1=(char*)xmalloc(sizeof(char)*(strlen(u)+strlen(q)+2));
+ strcpy(t1,u); strcat(t1,"?"); strcat(t1,q);
+ }
+
+ chunk.data=NULL;
+ chunk.size = 0;
+
+ curl = curl_easy_init();
+ if(!curl) {
+ xfree(t1);
+ return NULL;
+ }
+ curl_easy_setopt(curl, CURLOPT_URL, q?t1:u);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+ if (customheader) {
+ slist = curl_slist_append(slist, customheader);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+ }
#if 0 // TODO - support request methods..
- if (0)
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
- else if (0)
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
+ if (0)
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
+ else if (0)
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
#endif
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
+#ifdef OAUTH_CURL_TIMEOUT
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- xfree(t1);
- curl_easy_cleanup(curl);
-
- if (res) {
- return NULL;
- }
- return (chunk.data);
+ GLOBAL_CURL_ENVIROMENT_OPTIONS;
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(slist);
+ xfree(t1);
+ curl_easy_cleanup(curl);
+
+ if (res) {
+ return NULL;
+ }
+ return (chunk.data);
}
/**
@@ -225,60 +225,60 @@ char *oauth_curl_get (const char *u, const char *q, const char *customheader) {
* @return returned HTTP or NULL on error
*/
char *oauth_curl_post_file (const char *u, const char *fn, size_t len, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- struct MemoryStruct chunk;
- FILE *f;
- long filelen;
-
- chunk.data=NULL;
- chunk.size=0;
-
- if (customheader)
- slist = curl_slist_append(slist, customheader);
- else
- slist = curl_slist_append(slist, "Content-Type: image/jpeg;"); // good guess :)
-
- f = fopen(fn,"r");
- if (!f) return NULL;
-
- fseek(f, 0L, SEEK_END);
- filelen = ftell(f);
- fseek(f, 0L, SEEK_SET);
-
- if (!len || len > filelen) {
- len = filelen;
- }
-
- curl = curl_easy_init();
- if(!curl) {
- fclose(f);
- return NULL;
- }
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- curl_easy_setopt(curl, CURLOPT_READDATA, f);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ CURL *curl;
+ CURLcode res;
+ struct curl_slist *slist=NULL;
+ struct MemoryStruct chunk;
+ FILE *f;
+ long filelen;
+
+ chunk.data=NULL;
+ chunk.size=0;
+
+ if (customheader)
+ slist = curl_slist_append(slist, customheader);
+ else
+ slist = curl_slist_append(slist, "Content-Type: image/jpeg;"); // good guess :)
+
+ f = fopen(fn,"r");
+ if (!f) return NULL;
+
+ fseek(f, 0L, SEEK_END);
+ filelen = ftell(f);
+ fseek(f, 0L, SEEK_SET);
+
+ if (!len || len > filelen) {
+ len = filelen;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fclose(f);
+ return NULL;
+ }
+ curl_easy_setopt(curl, CURLOPT_URL, u);
+ curl_easy_setopt(curl, CURLOPT_POST, 1);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+ curl_easy_setopt(curl, CURLOPT_READDATA, f);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
+#ifdef OAUTH_CURL_TIMEOUT
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- fclose(f);
- if (res) {
- // error
- return NULL;
- }
-
- curl_easy_cleanup(curl);
- return (chunk.data);
+ GLOBAL_CURL_ENVIROMENT_OPTIONS;
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(slist);
+ fclose(f);
+ if (res) {
+ // error
+ return NULL;
+ }
+
+ curl_easy_cleanup(curl);
+ return (chunk.data);
}
/**
@@ -297,60 +297,60 @@ char *oauth_curl_post_file (const char *u, const char *fn, size_t len, const cha
* @return returned HTTP reply or NULL on error
*/
char *oauth_curl_send_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data, const char *httpMethod) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- struct MemoryStruct chunk;
- struct MemoryStruct rdnfo;
-
- chunk.data=NULL;
- chunk.size=0;
- chunk.start_size=0;
- chunk.callback=callback;
- chunk.callback_data=callback_data;
- rdnfo.data=(char *)data;
- rdnfo.size=len;
- rdnfo.start_size=len;
- rdnfo.callback=callback;
- rdnfo.callback_data=callback_data;
-
- if (customheader)
- slist = curl_slist_append(slist, customheader);
- else
- slist = curl_slist_append(slist, "Content-Type: image/jpeg;");
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- if (httpMethod) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, httpMethod);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&rdnfo);
- if (callback)
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallbackAndCall);
- else
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- if (callback)
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallbackAndCall);
- else
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ CURL *curl;
+ CURLcode res;
+ struct curl_slist *slist=NULL;
+ struct MemoryStruct chunk;
+ struct MemoryStruct rdnfo;
+
+ chunk.data=NULL;
+ chunk.size=0;
+ chunk.start_size=0;
+ chunk.callback=callback;
+ chunk.callback_data=callback_data;
+ rdnfo.data=(char *)data;
+ rdnfo.size=len;
+ rdnfo.start_size=len;
+ rdnfo.callback=callback;
+ rdnfo.callback_data=callback_data;
+
+ if (customheader)
+ slist = curl_slist_append(slist, customheader);
+ else
+ slist = curl_slist_append(slist, "Content-Type: image/jpeg;");
+
+ curl = curl_easy_init();
+ if(!curl) return NULL;
+ curl_easy_setopt(curl, CURLOPT_URL, u);
+ curl_easy_setopt(curl, CURLOPT_POST, 1);
+ if (httpMethod) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, httpMethod);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+ curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&rdnfo);
+ if (callback)
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallbackAndCall);
+ else
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallback);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
+ if (callback)
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallbackAndCall);
+ else
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
+#ifdef OAUTH_CURL_TIMEOUT
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (res) {
- // error
- return NULL;
- }
-
- curl_easy_cleanup(curl);
- return (chunk.data);
+ GLOBAL_CURL_ENVIROMENT_OPTIONS;
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(slist);
+ if (res) {
+ // error
+ return NULL;
+ }
+
+ curl_easy_cleanup(curl);
+ return (chunk.data);
}
/**
@@ -366,15 +366,15 @@ char *oauth_curl_send_data_with_callback (const char *u, const char *data, size_
* @return returned HTTP reply or NULL on error
*/
char *oauth_curl_post_data(const char *u, const char *data, size_t len, const char *customheader) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, NULL);
+ return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, NULL);
}
char *oauth_curl_send_data (const char *u, const char *data, size_t len, const char *customheader, const char *httpMethod) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, httpMethod);
+ return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, httpMethod);
}
char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, callback, callback_data, NULL);
+ return oauth_curl_send_data_with_callback(u, data, len, customheader, callback, callback_data, NULL);
}
#endif // libcURL.
@@ -386,7 +386,7 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
#define _OAUTH_ENV_HTTPCMD "OAUTH_HTTP_CMD"
#define _OAUTH_ENV_HTTPGET "OAUTH_HTTP_GET_CMD"
-#ifdef OAUTH_CURL_TIMEOUT
+#ifdef OAUTH_CURL_TIMEOUT
#define cpxstr(s) cpstr(s)
#define cpstr(s) #s
@@ -396,7 +396,7 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
//alternative: "wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "
#endif
-#ifndef _OAUTH_DEF_HTTPGET
+#ifndef _OAUTH_DEF_HTTPGET
# define _OAUTH_DEF_HTTPGET "curl -sA '"OAUTH_USER_AGENT"' -m "cpxstr(OAUTH_CURL_TIMEOUT)" '%u' "
//alternative: "wget -q -U 'liboauth-agent/0.1' '%u' "
#endif
@@ -408,7 +408,7 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
//alternative: "wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "
#endif
-#ifndef _OAUTH_DEF_HTTPGET
+#ifndef _OAUTH_DEF_HTTPGET
# define _OAUTH_DEF_HTTPGET "curl -sA '"OAUTH_USER_AGENT"' '%u' "
//alternative: "wget -q -U 'liboauth-agent/0.1' '%u' "
#endif
@@ -424,7 +424,7 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
* WARNING: this function only escapes single-quotes (')
*
*
- * RFC2396 defines the following
+ * RFC2396 defines the following
* reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
* besides alphanum the following are allowed as unreserved:
* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
@@ -432,9 +432,9 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
* checking `echo '-_.!~*()'` it seems we
* just need to escape the tick (') itself from "'" to "'\''"
*
- * In C shell, the "!" character may need a backslash before it.
+ * In C shell, the "!" character may need a backslash before it.
* It depends on the characters next to it. If it is surrounded by spaces,
- * you don't need to use a backslash.
+ * you don't need to use a backslash.
* (here: we'd always need to escape it for c shell)
* @todo: escape '!' for c-shell curl/wget commandlines
*
@@ -442,20 +442,20 @@ char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_
* @return escaped parameter
*/
char *oauth_escape_shell (const char *cmd) {
- char *esc = xstrdup(cmd);
- char *tmp = esc;
- int idx;
- while ((tmp=strchr(tmp,'\''))) {
- idx = tmp-esc;
- esc=(char*)xrealloc(esc,(strlen(esc)+5)*sizeof(char));
- memmove(esc+idx+4,esc+idx+1, strlen(esc+idx));
- esc[idx+1]='\\'; esc[idx+2]='\''; esc[idx+3]='\'';
- tmp=esc+(idx+4);
- }
-
-// TODO escape '!' if CSHELL ?!
-
- return esc;
+ char *esc = xstrdup(cmd);
+ char *tmp = esc;
+ int idx;
+ while ((tmp=strchr(tmp,'\''))) {
+ idx = tmp-esc;
+ esc=(char*)xrealloc(esc,(strlen(esc)+5)*sizeof(char));
+ memmove(esc+idx+4,esc+idx+1, strlen(esc+idx));
+ esc[idx+1]='\\'; esc[idx+2]='\''; esc[idx+3]='\'';
+ tmp=esc+(idx+4);
+ }
+
+ // TODO escape '!' if CSHELL ?!
+
+ return esc;
}
/**
@@ -468,29 +468,29 @@ char *oauth_escape_shell (const char *cmd) {
*/
char *oauth_exec_shell (const char *cmd) {
#ifdef DEBUG_OAUTH
- printf("DEBUG: executing: %s\n",cmd);
+ printf("DEBUG: executing: %s\n",cmd);
#endif
- FILE *in = popen (cmd, "r");
- size_t len = 0;
- size_t alloc = 0;
- char *data = NULL;
- int rcv = 1;
- while (in && rcv > 0 && !feof(in)) {
- alloc +=1024;
- data = (char*)xrealloc(data, alloc * sizeof(char));
- rcv = fread(data + (alloc-1024), sizeof(char), 1024, in);
- len += rcv;
- }
- pclose(in);
+ FILE *in = popen (cmd, "r");
+ size_t len = 0;
+ size_t alloc = 0;
+ char *data = NULL;
+ int rcv = 1;
+ while (in && rcv > 0 && !feof(in)) {
+ alloc +=1024;
+ data = (char*)xrealloc(data, alloc * sizeof(char));
+ rcv = fread(data + (alloc-1024), sizeof(char), 1024, in);
+ len += rcv;
+ }
+ pclose(in);
#ifdef DEBUG_OAUTH
- printf("DEBUG: read %i bytes\n",len);
+ printf("DEBUG: read %i bytes\n",len);
#endif
- data[len]=0;
+ data[len]=0;
#ifdef DEBUG_OAUTH
- if (data) printf("DEBUG: return: %s\n",data);
- else printf("DEBUG: NULL data\n");
+ if (data) printf("DEBUG: return: %s\n",data);
+ else printf("DEBUG: NULL data\n");
#endif
- return (data);
+ return (data);
}
/**
@@ -505,39 +505,39 @@ char *oauth_exec_shell (const char *cmd) {
* replied content from HTTP server. latter needs to be freed by caller.
*/
char *oauth_exec_post (const char *u, const char *p) {
- char cmd[BUFSIZ];
- char *t1,*t2;
- char *cmdtpl = getenv(_OAUTH_ENV_HTTPCMD);
- if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPCMD);
- else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
-
- // add URL and post param - error if no '%p' or '%u' present in definition
- t1=strstr(cmdtpl, "%p");
- t2=strstr(cmdtpl, "%u");
- if (!t1 || !t2) {
- fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPCMD);
- return(NULL);
- }
- // TODO: check if there are exactly two '%' in cmdtpl
- *(++t1)= 's'; *(++t2)= 's';
- if (t1>t2) {
- t1=oauth_escape_shell(u);
- t2=oauth_escape_shell(p);
- } else {
- t1=oauth_escape_shell(p);
- t2=oauth_escape_shell(u);
- }
- snprintf(cmd, BUFSIZ, cmdtpl, t1, t2);
- xfree(cmdtpl);
- xfree(t1); xfree(t2);
- return oauth_exec_shell(cmd);
+ char cmd[BUFSIZ];
+ char *t1,*t2;
+ char *cmdtpl = getenv(_OAUTH_ENV_HTTPCMD);
+ if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPCMD);
+ else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
+
+ // add URL and post param - error if no '%p' or '%u' present in definition
+ t1=strstr(cmdtpl, "%p");
+ t2=strstr(cmdtpl, "%u");
+ if (!t1 || !t2) {
+ fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPCMD);
+ return(NULL);
+ }
+ // TODO: check if there are exactly two '%' in cmdtpl
+ *(++t1)= 's'; *(++t2)= 's';
+ if (t1>t2) {
+ t1=oauth_escape_shell(u);
+ t2=oauth_escape_shell(p);
+ } else {
+ t1=oauth_escape_shell(p);
+ t2=oauth_escape_shell(u);
+ }
+ snprintf(cmd, BUFSIZ, cmdtpl, t1, t2);
+ xfree(cmdtpl);
+ xfree(t1); xfree(t2);
+ return oauth_exec_shell(cmd);
}
/**
* send GET via a command line HTTP client
* and return the content of the reply..
* requires a command-line HTTP client.
- *
+ *
* Note: u and q are just concatenated with a '?' in between unless q is NULL. in which case only u will be used.
*
* see \ref oauth_http_get
@@ -548,47 +548,47 @@ char *oauth_exec_post (const char *u, const char *p) {
* replied content from HTTP server. latter needs to be freed by caller.
*/
char *oauth_exec_get (const char *u, const char *q) {
- char cmd[BUFSIZ];
- char *cmdtpl, *t1, *e1;
-
- if (!u) return (NULL);
-
- cmdtpl = getenv(_OAUTH_ENV_HTTPGET);
- if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPGET);
- else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
-
- // add URL and post param - error if no '%p' or '%u' present in definition
- t1=strstr(cmdtpl, "%u");
- if (!t1) {
- fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPGET);
- xfree(cmdtpl);
- return(NULL);
- }
- *(++t1)= 's';
-
- e1 = oauth_escape_shell(u);
- if (q) {
- char *e2;
- e2 = oauth_escape_shell(q);
- t1=(char*)xmalloc(sizeof(char)*(strlen(e1)+strlen(e2)+2));
- strcpy(t1,e1); strcat(t1,"?"); strcat(t1,e2);
- xfree(e2);
- }
- snprintf(cmd, BUFSIZ, cmdtpl, q?t1:e1);
- xfree(cmdtpl);
- xfree(e1);
- if (q) xfree(t1);
- return oauth_exec_shell(cmd);
+ char cmd[BUFSIZ];
+ char *cmdtpl, *t1, *e1;
+
+ if (!u) return (NULL);
+
+ cmdtpl = getenv(_OAUTH_ENV_HTTPGET);
+ if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPGET);
+ else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
+
+ // add URL and post param - error if no '%p' or '%u' present in definition
+ t1=strstr(cmdtpl, "%u");
+ if (!t1) {
+ fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPGET);
+ xfree(cmdtpl);
+ return(NULL);
+ }
+ *(++t1)= 's';
+
+ e1 = oauth_escape_shell(u);
+ if (q) {
+ char *e2;
+ e2 = oauth_escape_shell(q);
+ t1=(char*)xmalloc(sizeof(char)*(strlen(e1)+strlen(e2)+2));
+ strcpy(t1,e1); strcat(t1,"?"); strcat(t1,e2);
+ xfree(e2);
+ }
+ snprintf(cmd, BUFSIZ, cmdtpl, q?t1:e1);
+ xfree(cmdtpl);
+ xfree(e1);
+ if (q) xfree(t1);
+ return oauth_exec_shell(cmd);
}
#endif // command-line curl.
/* wrapper functions */
/**
- * do a HTTP GET request, wait for it to finish
+ * do a HTTP GET request, wait for it to finish
* and return the content of the reply.
* (requires libcurl or a command-line HTTP client)
- *
+ *
* more documentation in oauth.h
*
* @param u base url to get
@@ -598,19 +598,19 @@ char *oauth_exec_get (const char *u, const char *q) {
*/
char *oauth_http_get (const char *u, const char *q) {
#ifdef HAVE_CURL
- return oauth_curl_get(u,q,NULL);
+ return oauth_curl_get(u,q,NULL);
#elif defined(HAVE_SHELL_CURL)
- return oauth_exec_get(u,q);
-#else
- return NULL;
+ return oauth_exec_get(u,q);
+#else
+ return NULL;
#endif
}
/**
- * do a HTTP GET request, wait for it to finish
+ * do a HTTP GET request, wait for it to finish
* and return the content of the reply.
* (requires libcurl)
- *
+ *
* @param u base url to get
* @param q query string to send along with the HTTP request or NULL.
* @param customheader specify custom HTTP header (or NULL for none)
@@ -619,14 +619,14 @@ char *oauth_http_get (const char *u, const char *q) {
*/
char *oauth_http_get2 (const char *u, const char *q, const char *customheader) {
#ifdef HAVE_CURL
- return oauth_curl_get(u,q,customheader);
-#else
- return NULL;
+ return oauth_curl_get(u,q,customheader);
+#else
+ return NULL;
#endif
}
/**
- * do a HTTP POST request, wait for it to finish
+ * do a HTTP POST request, wait for it to finish
* and return the content of the reply.
* (requires libcurl or a command-line HTTP client)
*
@@ -639,17 +639,17 @@ char *oauth_http_get2 (const char *u, const char *q, const char *customheader) {
*/
char *oauth_http_post (const char *u, const char *p) {
#ifdef HAVE_CURL
- return oauth_curl_post(u,p,NULL);
+ return oauth_curl_post(u,p,NULL);
#elif defined(HAVE_SHELL_CURL)
- return oauth_exec_post(u,p);
-#else
- return NULL;
+ return oauth_exec_post(u,p);
+#else
+ return NULL;
#endif
}
/**
- * do a HTTP POST request, wait for it to finish
+ * do a HTTP POST request, wait for it to finish
* and return the content of the reply.
* (requires libcurl)
*
@@ -663,9 +663,9 @@ char *oauth_http_post (const char *u, const char *p) {
*/
char *oauth_http_post2 (const char *u, const char *p, const char *customheader) {
#ifdef HAVE_CURL
- return oauth_curl_post(u,p,customheader);
+ return oauth_curl_post(u,p,customheader);
#else
- return NULL;
+ return NULL;
#endif
}
@@ -683,12 +683,12 @@ char *oauth_http_post2 (const char *u, const char *p, const char *customheader)
*/
char *oauth_post_file (const char *u, const char *fn, const size_t len, const char *customheader){
#ifdef HAVE_CURL
- return oauth_curl_post_file (u, fn, len, customheader);
+ return oauth_curl_post_file (u, fn, len, customheader);
#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
-#else
- return NULL;
+ fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
+ return NULL;
+#else
+ return NULL;
#endif
}
@@ -706,34 +706,34 @@ char *oauth_post_file (const char *u, const char *fn, const size_t len, const ch
*/
char *oauth_post_data (const char *u, const char *data, size_t len, const char *customheader) {
#ifdef HAVE_CURL
- return oauth_curl_post_data (u, data, len, customheader);
+ return oauth_curl_post_data (u, data, len, customheader);
#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
+ fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
+ return NULL;
#else
- return (NULL);
+ return (NULL);
#endif
}
char *oauth_send_data (const char *u, const char *data, size_t len, const char *customheader, const char *httpMethod) {
#ifdef HAVE_CURL
- return oauth_curl_send_data (u, data, len, customheader, httpMethod);
+ return oauth_curl_send_data (u, data, len, customheader, httpMethod);
#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_send_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
+ fprintf(stderr, "\nliboauth: oauth_send_file requires libcurl. libcurl is not available.\n\n");
+ return NULL;
#else
- return (NULL);
+ return (NULL);
#endif
}
char *oauth_post_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data) {
#ifdef HAVE_CURL
- return oauth_curl_post_data_with_callback(u, data, len, customheader, callback, callback_data);
+ return oauth_curl_post_data_with_callback(u, data, len, customheader, callback, callback_data);
#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_data_with_callback requires libcurl.\n\n");
- return NULL;
+ fprintf(stderr, "\nliboauth: oauth_post_data_with_callback requires libcurl.\n\n");
+ return NULL;
#else
- return (NULL);
+ return (NULL);
#endif
}
-/* vi:set ts=8 sts=2 sw=2: */
+/* vi:set ts=2 sts=2 sw=2: */
diff --git a/src/sha1.c b/src/sha1.c
index 3dae158..bc9d213 100644
--- a/src/sha1.c
+++ b/src/sha1.c
@@ -216,29 +216,29 @@ uint8_t* sha1_resultHmac(sha1nfo *s) {
#include <stdio.h>
uint8_t hmacKey1[]={
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
- 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
};
uint8_t hmacKey2[]={
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
- 0x40,0x41,0x42,0x43
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
+ 0x40,0x41,0x42,0x43
};
uint8_t hmacKey3[]={
- 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
- 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
- 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
- 0xb0,0xb1,0xb2,0xb3
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+ 0xb0,0xb1,0xb2,0xb3
};
uint8_t hmacKey4[]={
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
- 0xa0
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xa0
};
void printHash(uint8_t* hash) {
diff --git a/src/xmalloc.c b/src/xmalloc.c
index bd2136f..d153297 100644
--- a/src/xmalloc.c
+++ b/src/xmalloc.c
@@ -28,33 +28,33 @@
#include <stdlib.h>
static void *xmalloc_fatal(size_t size) {
- if (size==0) return NULL;
- fprintf(stderr, "Out of memory.");
- exit(1);
+ if (size==0) return NULL;
+ fprintf(stderr, "Out of memory.");
+ exit(1);
}
void *xmalloc (size_t size) {
- void *ptr = malloc (size);
- if (ptr == NULL) return xmalloc_fatal(size);
- return ptr;
+ void *ptr = malloc (size);
+ if (ptr == NULL) return xmalloc_fatal(size);
+ return ptr;
}
void *xcalloc (size_t nmemb, size_t size) {
- void *ptr = calloc (nmemb, size);
- if (ptr == NULL) return xmalloc_fatal(nmemb*size);
- return ptr;
+ void *ptr = calloc (nmemb, size);
+ if (ptr == NULL) return xmalloc_fatal(nmemb*size);
+ return ptr;
}
void *xrealloc (void *ptr, size_t size) {
- void *p = realloc (ptr, size);
- if (p == NULL) return xmalloc_fatal(size);
- return p;
+ void *p = realloc (ptr, size);
+ if (p == NULL) return xmalloc_fatal(size);
+ return p;
}
char *xstrdup (const char *s) {
- void *ptr = xmalloc(strlen(s)+1);
- strcpy (ptr, s);
- return (char*) ptr;
+ void *ptr = xmalloc(strlen(s)+1);
+ strcpy (ptr, s);
+ return (char*) ptr;
}
void xfree(void *ptr) {
--
2.33.0