Fixed compatibility for HTTPClient Library. (HTTPClient by Donatien Garnier)

Dependents:   FlashAir_Twitter CyaSSL-Twitter-OAuth4Tw TweetTest NetworkThermometer ... more

Fork of OAuth4Tw by Masayoshi Takahashi

Committer:
ban4jp
Date:
Tue Jul 14 09:31:13 2015 +0000
Revision:
5:5146becb651f
Parent:
3:c28b796ef7ed
Fixed argument of post method.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ban4jp 3:c28b796ef7ed 1
ban4jp 3:c28b796ef7ed 2 #include <string.h>
takahashim 0:0048b264a3ad 3
takahashim 0:0048b264a3ad 4 #include "oauth.h" // base64 encode fn's.
takahashim 0:0048b264a3ad 5 #include "sha1.h"
takahashim 0:0048b264a3ad 6
takahashim 0:0048b264a3ad 7 void hmac_sha1(unsigned char const *key, size_t keylen, unsigned char const *in, size_t inlen, unsigned char *resbuf)
takahashim 0:0048b264a3ad 8 {
takahashim 0:0048b264a3ad 9 struct SHA1Context inner;
takahashim 0:0048b264a3ad 10 struct SHA1Context outer;
takahashim 0:0048b264a3ad 11 unsigned char tmpkey[20];
takahashim 0:0048b264a3ad 12 unsigned char digest[20];
takahashim 0:0048b264a3ad 13 unsigned char block[64];
takahashim 0:0048b264a3ad 14
takahashim 0:0048b264a3ad 15 const int IPAD = 0x36;
takahashim 0:0048b264a3ad 16 const int OPAD = 0x5c;
takahashim 0:0048b264a3ad 17
takahashim 0:0048b264a3ad 18 if (keylen > 64) {
takahashim 0:0048b264a3ad 19 struct SHA1Context keyhash;
takahashim 0:0048b264a3ad 20 SHA1Reset(&keyhash);
takahashim 0:0048b264a3ad 21 SHA1Input(&keyhash, key, keylen);
takahashim 0:0048b264a3ad 22 SHA1Result(&keyhash, tmpkey);
takahashim 0:0048b264a3ad 23 key = tmpkey;
takahashim 0:0048b264a3ad 24 keylen = 20;
takahashim 0:0048b264a3ad 25 }
takahashim 0:0048b264a3ad 26
takahashim 0:0048b264a3ad 27 for (size_t i = 0; i < sizeof(block); i++) {
takahashim 0:0048b264a3ad 28 block[i] = IPAD ^ (i < keylen ? key[i] : 0);
takahashim 0:0048b264a3ad 29 }
takahashim 0:0048b264a3ad 30 SHA1Reset(&inner);
takahashim 0:0048b264a3ad 31 SHA1Input(&inner, block, 64);
takahashim 0:0048b264a3ad 32 SHA1Input(&inner, in, inlen);
takahashim 0:0048b264a3ad 33 SHA1Result(&inner, digest);
takahashim 0:0048b264a3ad 34
takahashim 0:0048b264a3ad 35 for (size_t i = 0; i < sizeof(block); i++) {
takahashim 0:0048b264a3ad 36 block[i] = OPAD ^ (i < keylen ? key[i] : 0);
takahashim 0:0048b264a3ad 37 }
takahashim 0:0048b264a3ad 38 SHA1Reset(&outer);
takahashim 0:0048b264a3ad 39 SHA1Input(&outer, block, 64);
takahashim 0:0048b264a3ad 40 SHA1Input(&outer, digest, 20);
takahashim 0:0048b264a3ad 41 SHA1Result(&outer, resbuf);
takahashim 0:0048b264a3ad 42 }
takahashim 0:0048b264a3ad 43
takahashim 0:0048b264a3ad 44
takahashim 0:0048b264a3ad 45 std::string oauth_sign_hmac_sha1(const char *m, const char *k)
takahashim 0:0048b264a3ad 46 {
takahashim 0:0048b264a3ad 47 return oauth_sign_hmac_sha1_raw(m, strlen(m), k, strlen(k));
takahashim 0:0048b264a3ad 48 }
takahashim 0:0048b264a3ad 49
takahashim 0:0048b264a3ad 50 std::string oauth_sign_hmac_sha1_raw(const char *m, const size_t ml, const char *k, const size_t kl)
takahashim 0:0048b264a3ad 51 {
takahashim 0:0048b264a3ad 52 unsigned char result[20];
takahashim 0:0048b264a3ad 53 hmac_sha1((unsigned char const *)k, kl, (unsigned char const *)m, ml, result);
takahashim 0:0048b264a3ad 54 return oauth_encode_base64(result, 20);
takahashim 0:0048b264a3ad 55 }
takahashim 0:0048b264a3ad 56