44 #else |
44 #else |
45 #include <termios.h> |
45 #include <termios.h> |
46 #define getpasswordchar() getchar() |
46 #define getpasswordchar() getchar() |
47 #endif |
47 #endif |
48 |
48 |
|
49 #include "webdav.h" |
|
50 #include "utils.h" |
|
51 #include "crypto.h" |
|
52 #include "session.h" |
|
53 |
|
54 /* |
49 #include <openssl/hmac.h> |
55 #include <openssl/hmac.h> |
50 #include <openssl/evp.h> |
56 #include <openssl/evp.h> |
51 #include <openssl/bio.h> |
57 #include <openssl/bio.h> |
52 #include <openssl/buffer.h> |
58 #include <openssl/buffer.h> |
53 #include <openssl/rand.h> |
59 #include <openssl/rand.h> |
54 |
60 */ |
55 #include "webdav.h" |
|
56 #include "utils.h" |
|
57 #include "crypto.h" |
|
58 #include "session.h" |
|
59 |
61 |
60 static size_t extractval(sstr_t str, char *result, char delim) { |
62 static size_t extractval(sstr_t str, char *result, char delim) { |
61 size_t n = 0; |
63 size_t n = 0; |
62 for(size_t i = 0; i < str.length ; i++) { |
64 for(size_t i = 0; i < str.length ; i++) { |
63 if(isdigit(str.ptr[i])) { |
65 if(isdigit(str.ptr[i])) { |
488 size_t inlen = strlen(in); |
490 size_t inlen = strlen(in); |
489 size_t bufsize = (inlen*3) / 4; |
491 size_t bufsize = (inlen*3) / 4; |
490 char *outbuf = malloc(bufsize+1); |
492 char *outbuf = malloc(bufsize+1); |
491 *outlen = -1; |
493 *outlen = -1; |
492 |
494 |
493 unsigned char *out = outbuf; |
495 unsigned char *out = (unsigned char*)outbuf; |
494 |
496 |
495 char *end = in + inlen; |
497 char *end = in + inlen; |
496 char iter = 0; |
498 char iter = 0; |
497 uint32_t buf = 0; |
499 uint32_t buf = 0; |
498 size_t len = 0; |
500 size_t len = 0; |
651 "01234567890" |
653 "01234567890" |
652 "abcdefghijklmnopqrstuvwxyz" |
654 "abcdefghijklmnopqrstuvwxyz" |
653 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); |
655 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); |
654 const unsigned char *table = (const unsigned char*)t.ptr; |
656 const unsigned char *table = (const unsigned char*)t.ptr; |
655 |
657 |
|
658 #ifdef DAV_USE_OPENSSL |
656 RAND_bytes(str, 24); |
659 RAND_bytes(str, 24); |
|
660 #else |
|
661 dav_rand_bytes(str, 24); |
|
662 #endif |
657 for(int i=0;i<24;i++) { |
663 for(int i=0;i<24;i++) { |
658 int c = str[i] % t.length; |
664 int c = str[i] % t.length; |
659 str[i] = table[c]; |
665 str[i] = table[c]; |
660 } |
666 } |
661 |
667 |