Skip to content

Commit 470ef9c

Browse files
authored
Merge pull request #3 from kuixiao/bug_fix_sha1
bug fix: invalid signature when private key is beyong 64 bytes.
2 parents 63a901b + 9e8d7bd commit 470ef9c

File tree

5 files changed

+22
-15
lines changed

5 files changed

+22
-15
lines changed

examples/file.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
#include "helper.h"
99
#define fourMegabyte 1 << 22 //4M
1010

11+
const char region[20] = "cn-sh2";
12+
1113
int main(int argc, char *argv[]){
1214
// 读取配置初始化SDK
1315
struct ufile_config cfg;
1416
cfg.public_key = getenv("UFILE_PUBLIC_KEY");
1517
cfg.private_key = getenv("UFILE_PRIVATE_KEY");
16-
cfg.bucket_host = "api.ucloud.cn";
17-
cfg.file_host = "www.internal-vn-sng.ufileos.com";
18+
cfg.bucket_host = getenv("UFILE_BUCKET_HOST");
19+
cfg.file_host = getenv("UFILE_FILE_HOST");
1820
struct ufile_error error;
1921
error = ufile_sdk_initialize(cfg, 0);
2022
if(UFILE_HAS_ERROR(error.code)){
@@ -28,7 +30,7 @@ int main(int argc, char *argv[]){
2830
struct timeval start;
2931
gettimeofday( &start, NULL );
3032
sprintf(bucket_name,"%d",start.tv_sec);
31-
error = ufile_bucket_create(bucket_name, "vn-sng", "private");
33+
error = ufile_bucket_create(bucket_name, region, "private");
3234
if(UFILE_HAS_ERROR(error.code)){
3335
printf("创建 bucket 失败,错误信息为:%s\n", error.message);
3436
}else{
@@ -88,4 +90,4 @@ int main(int argc, char *argv[]){
8890

8991
ufile_sdk_cleanup();
9092
return 0;
91-
}
93+
}

examples/file_mput.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ int main(int argc, char *argv[]){
1212
char* bucket_name = argv[1];
1313
char* key_name = argv[2];
1414
char* file_path = argv[3];
15-
char* mime_type = NULL;
15+
char* mime_type = "";
1616
if (argc > 4) {
1717
mime_type = argv[4];
1818
}

examples/file_put_buf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ int main(int argc, char *argv[]){
2727
char* bucket_name = argv[1];
2828
char* key_name = argv[2];
2929
char* contents = argv[3];
30-
char* mime_type = NULL;
30+
char* mime_type = "";
3131
if (argc > 4) {
3232
mime_type = argv[4];
3333
}

examples/file_put_file.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main(int argc, char *argv[]){
1313
char* bucket_name = argv[1];
1414
char* key_name = argv[2];
1515
char* file_path = argv[3];
16-
char* mime_type = NULL;
16+
char* mime_type = "";
1717
if (argc > 4) {
1818
mime_type = argv[4];
1919
}
@@ -51,4 +51,4 @@ int main(int argc, char *argv[]){
5151
fclose(fp);
5252
ufile_sdk_cleanup();
5353
return 0;
54-
}
54+
}

lib/encoding.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -510,24 +510,29 @@ void HMAC_SHA1(unsigned char hmac[HMAC_LEN], const unsigned char *key, int key_l
510510
unsigned char kopad[64], kipad[64];
511511
int i;
512512

513+
// sha1 输出一个长度为 20 bytes 的摘要
514+
unsigned char digest[20];
515+
SHA1Context context;
516+
char sha1_key[key_len];
517+
strcpy(sha1_key, key);
513518
if (key_len > 64) {
514-
key_len = 64;
519+
SHA1_init(&context);
520+
SHA1_update(&context, sha1_key, key_len);
521+
SHA1_final(digest, &context);
522+
strcpy(sha1_key, digest);
523+
key_len = 20;
515524
}
516525

517526
for (i = 0; i < key_len; i++) {
518-
kopad[i] = key[i] ^ 0x5c;
519-
kipad[i] = key[i] ^ 0x36;
527+
kopad[i] = sha1_key[i] ^ 0x5c;
528+
kipad[i] = sha1_key[i] ^ 0x36;
520529
}
521530

522531
for ( ; i < 64; i++) {
523532
kopad[i] = 0 ^ 0x5c;
524533
kipad[i] = 0 ^ 0x36;
525534
}
526535

527-
unsigned char digest[20];
528-
529-
SHA1Context context;
530-
531536
SHA1_init(&context);
532537
SHA1_update(&context, kipad, 64);
533538
SHA1_update(&context, message, message_len);

0 commit comments

Comments
 (0)