3 Commits

Author SHA1 Message Date
mbusc
77879e6521 Fix rate limiting issue in example.cpp by adding delays between API calls 2025-08-28 21:49:34 +02:00
mbusc
3b4d591eff Fix type conversion warnings in base58.cpp and improve CMake syntax 2025-08-28 21:43:46 +02:00
mbusc
4add1edd11 Update CMakeLists.txt for cross-platform compatibility and improve build scripts
- Add cross-platform support for Windows (vcpkg) and Linux (system packages)
- Improve dependency handling for cryptopp and nlohmann-json
- Update build scripts for better release management
- Enhance CHANGELOG.md with latest version information
2025-08-28 21:29:16 +02:00
9 changed files with 36 additions and 13 deletions

View File

@@ -20,7 +20,7 @@
- **IMPROVED**: Enhanced build documentation with platform-specific instructions - **IMPROVED**: Enhanced build documentation with platform-specific instructions
- **IMPROVED**: Better project structure and organization - **IMPROVED**: Better project structure and organization
s## v0.1.1.3 (2025-08-28) ## v0.1.1.3 (2025-08-28)
### New Features ### New Features
- **File Upload Functionality**: New `upload_file()` function added - **File Upload Functionality**: New `upload_file()` function added

View File

@@ -112,12 +112,11 @@ if(ENABLE_LLVM_COVERAGE)
add_compile_options(-fprofile-instr-generate -fcoverage-mapping) add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
add_link_options(-fprofile-instr-generate) add_link_options(-fprofile-instr-generate)
# Helper variables for report tools (can be overridden from environment) # Helper variables for report tools
set(LLVM_PROFDATA "llvm-profdata" CACHE STRING "Path to llvm-profdata") set(LLVM_PROFDATA "llvm-profdata" CACHE STRING "Path to llvm-profdata")
set(LLVM_COV "llvm-cov" CACHE STRING "Path to llvm-cov") set(LLVM_COV "llvm-cov" CACHE STRING "Path to llvm-cov")
# Custom target to run tests and produce coverage report # Custom target to run tests and produce coverage report
# Usage: cmake --build build --target coverage_llvm --config Release
add_custom_target( add_custom_target(
coverage_llvm coverage_llvm
COMMAND ${CMAKE_COMMAND} -E env COMMAND ${CMAKE_COMMAND} -E env

View File

@@ -3,6 +3,14 @@
#include <cstring> #include <cstring>
#include <string> #include <string>
#include <cstdlib> #include <cstdlib>
#include <chrono>
#include <thread>
// Helper function to wait between API calls to avoid rate limiting
void wait_between_calls() {
std::cout << "[privatebinapi] Waiting 12 seconds to avoid rate limiting..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(12));
}
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
std::cout << "PrivateBin API C++ DLL Example" << std::endl; std::cout << "PrivateBin API C++ DLL Example" << std::endl;
@@ -129,6 +137,9 @@ int main(int argc, char* argv[]) {
std::cout << "✗ Plaintext paste failed. Error code: " << result << std::endl; std::cout << "✗ Plaintext paste failed. Error code: " << result << std::endl;
} }
// Wait between API calls to avoid rate limiting
wait_between_calls();
// Test 2: Syntax highlighting format // Test 2: Syntax highlighting format
std::cout << "\n2. Testing syntax highlighting format..." << std::endl; std::cout << "\n2. Testing syntax highlighting format..." << std::endl;
char* code_paste_url = nullptr; char* code_paste_url = nullptr;
@@ -167,6 +178,9 @@ int main() {
std::cout << "✗ Syntax highlighting paste failed. Error code: " << result << std::endl; std::cout << "✗ Syntax highlighting paste failed. Error code: " << result << std::endl;
} }
// Wait between API calls to avoid rate limiting
wait_between_calls();
// Test 3: Markdown format // Test 3: Markdown format
std::cout << "\n3. Testing markdown format..." << std::endl; std::cout << "\n3. Testing markdown format..." << std::endl;
char* markdown_paste_url = nullptr; char* markdown_paste_url = nullptr;
@@ -213,6 +227,9 @@ int result = create_paste(server_url, content, password, expiration, format,
std::cout << "✗ Markdown paste failed. Error code: " << result << std::endl; std::cout << "✗ Markdown paste failed. Error code: " << result << std::endl;
} }
// Wait between API calls to avoid rate limiting
wait_between_calls();
// Test 4: Interactive format selection // Test 4: Interactive format selection
std::cout << "\n4. Interactive format selection..." << std::endl; std::cout << "\n4. Interactive format selection..." << std::endl;
char* interactive_paste_url = nullptr; char* interactive_paste_url = nullptr;

View File

@@ -31,3 +31,4 @@ Get-ChildItem -LiteralPath $OutDir -File | Format-Table Name,Length -AutoSize

View File

@@ -36,3 +36,4 @@ Get-ChildItem -LiteralPath $BinDir -File | ForEach-Object {

View File

@@ -44,3 +44,4 @@ if ($resp.StatusCode -ge 200 -and $resp.StatusCode -lt 300) {

View File

@@ -46,3 +46,4 @@ foreach ($f in $files) {

View File

@@ -77,3 +77,4 @@ Write-Host 'Release notes updated with links.'

View File

@@ -16,18 +16,19 @@ std::string Base58::encode(const std::vector<unsigned char>& data) {
} }
// Convert to base58 // Convert to base58
std::vector<unsigned char> digits(static_cast<size_t>((data.size() - leading_zeros) * 138 / 100 + 1)); size_t digits_size = (data.size() - leading_zeros) * 138 / 100 + 1;
std::vector<unsigned char> digits(digits_size);
size_t digitslen = 1; size_t digitslen = 1;
for (size_t i = leading_zeros; i < data.size(); i++) { for (size_t i = leading_zeros; i < data.size(); i++) {
unsigned int carry = data[i]; size_t carry = static_cast<size_t>(data[i]);
for (size_t j = 0; j < digitslen; j++) { for (size_t j = 0; j < digitslen; j++) {
carry += (unsigned int)(digits[j]) << 8; carry += static_cast<size_t>(digits[j]) << 8;
digits[j] = carry % 58; digits[j] = static_cast<unsigned char>(carry % 58);
carry /= 58; carry /= 58;
} }
while (carry > 0) { while (carry > 0) {
digits[digitslen++] = carry % 58; digits[digitslen++] = static_cast<unsigned char>(carry % 58);
carry /= 58; carry /= 58;
} }
} }
@@ -56,22 +57,23 @@ std::vector<unsigned char> Base58::decode(const std::string& encoded) {
} }
// Convert from base58 // Convert from base58
std::vector<unsigned char> bytes((encoded.length() - leading_ones) * 733 / 1000 + 1); size_t bytes_size = (encoded.length() - leading_ones) * 733 / 1000 + 1;
std::vector<unsigned char> bytes(bytes_size);
size_t byteslen = 1; size_t byteslen = 1;
for (size_t i = leading_ones; i < encoded.length(); i++) { for (size_t i = leading_ones; i < encoded.length(); i++) {
unsigned int carry = ALPHABET.find(encoded[i]); size_t carry = static_cast<size_t>(ALPHABET.find(encoded[i]));
if (carry == std::string::npos) { if (carry == std::string::npos) {
throw std::invalid_argument("Invalid character in Base58 string"); throw std::invalid_argument("Invalid character in Base58 string");
} }
for (size_t j = 0; j < byteslen; j++) { for (size_t j = 0; j < byteslen; j++) {
carry += (unsigned int)(bytes[j]) * 58; carry += static_cast<size_t>(bytes[j]) * 58;
bytes[j] = carry & 0xff; bytes[j] = static_cast<unsigned char>(carry & 0xff);
carry >>= 8; carry >>= 8;
} }
while (carry > 0) { while (carry > 0) {
bytes[byteslen++] = carry & 0xff; bytes[byteslen++] = static_cast<unsigned char>(carry & 0xff);
carry >>= 8; carry >>= 8;
} }
} }