// converts bytes to BASE64 representation void base64(Firebird::string& b64, const Firebird::UCharBuffer& bin) { b64.erase(); const unsigned char* f = bin.begin(); for (int i = bin.getCount(); i > 0; i -= 3, f += 3) { if (i >= 3) { const ULONG l = (ULONG(f[0]) << 16) | (ULONG(f[1]) << 8) | f[2]; b64 += conv_bin2ascii(l >> 18); b64 += conv_bin2ascii(l >> 12); b64 += conv_bin2ascii(l >> 6); b64 += conv_bin2ascii(l); } else { ULONG l = ULONG(f[0]) << 16; if (i == 2) l |= (ULONG(f[1]) << 8); b64 += conv_bin2ascii(l >> 18); b64 += conv_bin2ascii(l >> 12); b64 += (i == 1 ? '=' : conv_bin2ascii(l >> 6)); b64 += '='; } }
size_t EVP_EncodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) { uint32_t l; size_t remaining = src_len, ret = 0; while (remaining) { if (remaining >= 3) { l = (((uint32_t)src[0]) << 16L) | (((uint32_t)src[1]) << 8L) | src[2]; *(dst++) = conv_bin2ascii(l >> 18L); *(dst++) = conv_bin2ascii(l >> 12L); *(dst++) = conv_bin2ascii(l >> 6L); *(dst++) = conv_bin2ascii(l); remaining -= 3; } else {
int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen) { int i, ret = 0; unsigned long l; for (i = dlen; i > 0; i -= 3) { if (i >= 3) { l = (((unsigned long)f[0]) << 16L) | (((unsigned long)f[1]) << 8L) | f[2]; *(t++) = conv_bin2ascii(l >> 18L); *(t++) = conv_bin2ascii(l >> 12L); *(t++) = conv_bin2ascii(l >> 6L); *(t++) = conv_bin2ascii(l); } else {
static int evp_encodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t, const unsigned char *f, int dlen) { int i, ret = 0; unsigned long l; const unsigned char *table; if (ctx != NULL && (ctx->flags & EVP_ENCODE_CTX_USE_SRP_ALPHABET) != 0) table = srpdata_bin2ascii; else table = data_bin2ascii; for (i = dlen; i > 0; i -= 3) { if (i >= 3) { l = (((unsigned long)f[0]) << 16L) | (((unsigned long)f[1]) << 8L) | f[2]; *(t++) = conv_bin2ascii(l >> 18L, table); *(t++) = conv_bin2ascii(l >> 12L, table); *(t++) = conv_bin2ascii(l >> 6L, table); *(t++) = conv_bin2ascii(l, table); } else {