| 231 | } |
| 232 | |
| 233 | const char* md5_string(const char *s, const char *k, size_t klen, |
| 234 | char* buf, size_t size) |
| 235 | { |
| 236 | md5_ctx context; |
| 237 | unsigned char digest[16]; |
| 238 | char output1[34], *ptr; |
| 239 | unsigned int len = (unsigned int) strlen(s); |
| 240 | size_t i, n; |
| 241 | |
| 242 | md5_init(&context); |
| 243 | if (k != NULL && klen > 0) |
| 244 | md5_update(&context, (const unsigned char *) k, (unsigned int) klen); |
| 245 | md5_update(&context, (const unsigned char*) s, len); |
| 246 | md5_final(digest, &context); |
| 247 | |
| 248 | for (i = 0; i < 16; i++) { |
| 249 | sprintf(&(output1[2 * i]), "%02x", (unsigned char) digest[i]); |
| 250 | sprintf(&(output1[2 * i + 1]), "%02x", |
| 251 | (unsigned char) (digest[i] << 4)); |
| 252 | } |
| 253 | |
| 254 | ptr = buf; |
| 255 | size--; /* left one byte for '\0' */ |
| 256 | n = size > 32 ? 32 : size; |
| 257 | |
| 258 | for(i = 0; i < n; i++) |
| 259 | *ptr++ = output1[i]; |
| 260 | *ptr = '\0'; |
| 261 | |
| 262 | return (buf); |
| 263 | } |
| 264 | |
| 265 | const char* md5_key2string(const unsigned char *s, size_t s_len, |
| 266 | char* buf, size_t size) |
no test coverage detected
searching dependent graphs…