Proving ownership of a Bitcoin (BTC) address is a crucial aspect in various scenarios. The post Proof of Ownership for BTC Addresses introduced the proof for non-multisig addresses. This guide explores how to prove ownership for different multisig BTC address types, including algorithm specifications and step-by-step methods. What is a Multisig Address? A Bitcoin multisig
Read more
Tag: Algorithm
Proof of Ownership for BTC Addresses: A Detailed Guide
Posted onProving ownership of a Bitcoin (BTC) address is a crucial aspect in various scenarios, such as verifying identity in a transaction or demonstrating holdings without revealing private keys. This guide explores how to prove ownership for different BTC address types, including algorithm specifications and step-by-step methods. BTC Address Types P2PKH (Pay-to-Public-Key-Hash) P2SH (Pay-to-Script-Hash) P2WPKH (Pay-to-Witness-Public-Key-Hash)
Read more
A Comprehensive Guide to PGP: Technical Deep Dive
Posted onPretty Good Privacy (PGP) is a robust encryption program that ensures privacy and authentication for data communication. Developed by Phil Zimmermann in 1991, it’s widely used for securing emails, files, and directories. This article explores the technical details of PGP, including its algorithms, key management, and detailed processes for encryption, decryption, and signing. Cryptographic Foundations
Read more
Understanding the Paxos Consensus Algorithm
Posted onThe Paxos consensus algorithm is a fundamental concept in distributed computing that ensures a group of distributed systems can agree on a single value, even in the presence of failures. Developed by Leslie Lamport, Paxos is widely used in systems where consistency and fault tolerance are critical, such as databases and distributed ledgers. Consensus Problem
Read more
Understanding the Raft Consensus Protocol
Posted onThe Raft consensus protocol is a distributed consensus algorithm designed to be more understandable than other consensus algorithms like Paxos. It ensures that a cluster of servers can agree on the state of a system even in the presence of failures. Key Concepts Raft divides the consensus problem into three relatively independent subproblems: Leader Election:
Read more
Byzantine Faults 101
Posted onDistributed systems are becoming increasingly important in various applications, such as cloud computing, , and peer-to-peer networks. One of the challenges in designing robust distributed systems is dealing with Byzantine faults, a type of fault that can be particularly difficult to detect and handle. Byzantine faults, named after the Byzantine Generals’ Problem, involve components of
Read more
Consensus Algorithm 101
Posted onConsensus algorithms play a crucial role in the functioning of decentralized networks, such as blockchain-based systems. They help maintain the integrity, security, and reliability of these networks by ensuring that all participants agree on the state of the system. In this post, we will explore the concept of consensus algorithms, their importance, and some of
Read more
Double-Spending 101
Posted onDouble-spending is a critical issue that any digital currency must address to ensure its viability and security. In this post, we’ll explore the concept of double-spending, the problems it poses, and how blockchain technology overcomes these challenges. What is Double-Spending? Double-spending occurs when a user spends the same digital currency unit more than once. In
Read more
51% Attack 101
Posted onOne of the most significant threats to public blockchain networks is a 51% attack, where a single entity gains control over the majority of the network’s mining power. In this blog post, we will discuss the concept of a 51% attack, its potential consequences, and measures to prevent it. What is a 51% Attack? A
Read more
Proof of Work (PoW) 101
Posted onBlockchain technology is based on the idea of decentralization, transparency, and security. One of the key challenges in blockchain technology is reaching consensus on the state of the ledger. Consensus mechanisms ensure that all nodes in the network agree on the current state of the blockchain. Proof of Work (PoW) is a consensus mechanism that
Read more
Proof of Stake (PoS) 101
Posted onBlockchain technology is based on the idea of decentralization, transparency, and security. One of the key challenges in blockchain technology is reaching consensus on the state of the ledger. Consensus mechanisms ensure that all nodes in the network agree on the current state of the blockchain. Proof of Stake (PoS) is a consensus mechanism that
Read more
Cryptographic Hash 101
Posted onA cryptographic hash function is a hash function that satisfies the properties of pre-image resistance, second pre-image resistance and collision resistance. Here, a hash function is a mathematical algorithm that maps data of an arbitrary size (or “message”) to a bit array of a fixed size (the “hash value”, “hash”, or “message digest”), that is,
Read more
Installing Zlib in Ubuntu 22.04
Posted onZlib is a popular open-source compression library used by many software applications to compress and decompress data. It provides fast and efficient compression and decompression algorithms that can be used to reduce the size of data, which can improve performance and reduce storage requirements. In this post, we will discuss how to install zlib in
Read more
Why std::vector is the Optimal Choice for Data Structures for Performance in C++
Posted onIn C++ programming, data structures are essential for organizing and manipulating data. When it comes to storing and manipulating data, one data structure stands out above the rest – the std::vector. Efficient Memory Allocation One of the primary benefits of std::vector is its efficient memory allocation. std::vector uses contiguous memory allocation, which means that the
Read more
Release Notes For Linux v0.01
Posted onThis is the notes for linux kernel release 0.01 (source code: linux-0.01.tar.gz) with format adjusted by removing/replacing tabs/spaces/new lines. This notes document can give us an understanding of whether the Linux kernel started with its very first release. The original ASCII formatted version is at the end of this post. Notes for linux release 0.01
Read more
Compress PNG Images on Linux
Posted onPNG images already use DEFLATE data compression algorithm involving a combination of LZ77 and Huffman coding. But the PNG images can be further compressed by removing non-important metadata or using lossy compression to save storage space and/or data transfer bandwidth. In this post, we introduce 2 compression ways with tools available on Linux. Lossless compression
Read more
A StoneWall Solution in C++
Posted onStoneWall is an interesting problem that requires some brain cycles yet not too complex. It is good software engineer interview question. Here is a C++ solution whose complexity is O(N). #include <stack> int solution(std::vector<int> &H) { int stones = 0; std::stack<int> heights; for (auto h: H) { while (!heights.empty() && h < heights.top()) { heights.pop();
Read more
Generating a Pair of RSA Private and Public Keys in Linux using OpenSSL
Posted onRSA (Rivest–Shamir–Adleman) is a widely used public-key cryptosystem that is used for secure communication over the internet. In this post, we will explore how to generate a pair of RSA private and public keys in Linux using the OpenSSL library. Generating a pair of RSA private and public keys in Linux using OpenSSL is a
Read more
How to not use concrete types in lambda function parameters in C++11?
Posted onC++11 requires that lambda function parameters be declared with concrete types. This is sometimes annoying. auto is really nice, especially when the type is complex like std::vector<std::string>::iterator is quite long to type. I know C++14 allows auto in lambda functions. But how to not use concrete types in lambda function parameters in C++11? In C++11,
Read more
How to make Vim indent C++11 lambdas correctly?
Posted onVim seems not indent C++11 lambas very well. How to make Vim indent C++11 lambdas correctly? For this following program, Vim indents it as #include <iostream> #include <string> #include <vector> #include <algorithm> int main () { std::vector<std::string> strs({“one”, “two”}); std::vector<std::string> newstrs; std::transform(strs.begin(), strs.end(), std::back_inserter(newstrs), [](const std::string& s) -> std::string { if (s == “one”) {
Read more