QString InttoBinary(const QString &in) //assumes valid integer entry! { QString out; std::string temp = in.toStdString(); BigUnsigned val = stringToBigUnsigned(temp); //need BigUnsigned for arbitrary //length integers BigUnsigned rem; while(val > 0) { rem = val % 2; if(rem == 0) out.prepend("0"); else out.prepend("1"); val /= 2; } while(out.size() % 8 != 0) out.prepend("0"); return out; }
SecureArray QCACryptoInterface::sharedDHKey(const QString &prime, const QString &base, const QString &secret) { BigUnsigned primeNumber = stringToBigUnsigned(prime.toStdString()); BigInteger baseNumber = stringToBigUnsigned(base.toStdString()); BigUnsigned secretNumber = stringToBigUnsigned(secret.toStdString()); BigUnsigned result = modexp(baseNumber, secretNumber, primeNumber); QByteArray key; BigUnsigned result2(result); while (result2 != 0) { char rest = (result2 % 256).toUnsignedShort(); key.prepend(rest); result2 = result2 / 256; } int size = key.size(); return key; }
BigInteger stringToBigInteger(const std::string &s) { // Recognize a sign followed by a BigUnsigned. return (s[0] == '-') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1)), BigInteger::negative) : (s[0] == '+') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1))) : BigInteger(stringToBigUnsigned(s)); }