*/ void Mold_Binary(REBVAL *value, REB_MOLD *mold) /* ***********************************************************************/ { REBCNT len = VAL_LEN(value); REBSER *out; switch (Get_System_Int(SYS_OPTIONS, OPTIONS_BINARY_BASE, 16)) { default: case 16: out = Encode_Base16(value, 0, len > 32); break; case 64: Append_Bytes(mold->series, "64"); out = Encode_Base64(value, 0, len > 64); break; case 2: Append_Byte(mold->series, '2'); out = Encode_Base2(value, 0, len > 8); break; } Emit(mold, "#{E}", out); }
static int authenticate_md5(Pop3 pc, struct connection_state *scs, const char *capabilities) { char buf[BUF_SIZE]; char buf2[BUF_SIZE]; unsigned char *md5; gcry_md_hd_t gmh; gcry_error_t rc; if (!strstr(capabilities, "AUTH=CRAM-MD5")) { /* server doesn't support cram-md5. */ return 0; } tlscomm_printf(scs, "a007 AUTHENTICATE CRAM-MD5\r\n"); if (tlscomm_expect(scs, "+ ", buf, BUF_SIZE) == 0) goto expect_failure; Decode_Base64(buf + 2, buf2); IMAP_DM(pc, DEBUG_INFO, "CRAM-MD5 challenge: %s\n", buf2); strcpy(buf, PCU.userName); strcat(buf, " "); ask_user_for_password(pc, 0); rc = gcry_md_open(&gmh, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC); if (rc != 0) { IMAP_DM(pc, DEBUG_INFO, "unable to initialize gcrypt md5\n"); return 0; } DEFROB(PCU.password); gcry_md_setkey(gmh, PCU.password, strlen(PCU.password)); ENFROB(PCU.password); gcry_md_write(gmh, (unsigned char *) buf2, strlen(buf2)); gcry_md_final(gmh); md5 = gcry_md_read(gmh, 0); Bin2Hex(md5, 16, buf2); gcry_md_close(gmh); strcat(buf, buf2); IMAP_DM(pc, DEBUG_INFO, "CRAM-MD5 response: %s\n", buf); Encode_Base64(buf, buf2); tlscomm_printf(scs, "%s\r\n", buf2); if (tlscomm_expect(scs, "a007 ", buf, BUF_SIZE) == 0) goto expect_failure; if (!strncmp(buf, "a007 OK", 7)) return 1; /* AUTH successful */ IMAP_DM(pc, DEBUG_ERROR, "CRAM-MD5 AUTH failed for user '%s@%s:%d'\n", PCU.userName, PCU.serverName, PCU.serverPort); IMAP_DM(pc, DEBUG_INFO, "It said %s", buf); return 0; expect_failure: IMAP_DM(pc, DEBUG_ERROR, "tlscomm_expect failed during cram-md5 auth: %s", buf); IMAP_DM(pc, DEBUG_ERROR, "failed to authenticate using cram-md5."); return 0; }