// 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 += '='; } }
void BigInteger::random(int numBytes) { Firebird::UCharBuffer b; Firebird::GenerateRandomBytes(b.getBuffer(numBytes), numBytes); assign(numBytes, b.begin()); }
BigInteger::BigInteger(const Firebird::UCharBuffer& val) { CHECK_MP(mp_init(&t)); assign(val.getCount(), val.begin()); }