# Diffie Hellman: The Basic Asymmetric Cipher

The Diffie-Hellman Key exchange is one of the older (and consequently simpler) asymmetric key exchange protocols. There are few better ways to understand the basic principles of asymmetric key exchange. The Values Diffie Hellman is a technique which produces a shared symmetric key based on asymmetric values. That is, without access to both ends of the

# Weird Things in SQL

SQL, as we have already established, is built on collections of tables. These tables can be linked together by queries to form increasingly complex tables, which allows us to draw conclusions that would otherwise be extraordinarily difficult to obtain. There are some very powerful (yet weird) things we can do to create more useful queries. Aliases By

# How to Use Big-O Notation

As we design functions, we have to consider how they will work in the real world. There are two common considerations as we compare solutions: Time complexity - The amount of time it will take for our solution to complete Space complexity - The amount of memory that our solution will consume Unfortunately, because we can't afford

# Pointer Arithmetic Matters

What's the first thing you think when I say the word: Pointer. Generally, you either think of a particular register (unlikely) or a hexadecimal number representing a location in memory (likely). Personally, I'm in the latter category, which is why this problem arose. I was in the middle of programming, and I decided to allocate

# Linux + C – Some other Facts about Pointers

Pointer Math Pointers are numbers, which means we can use math to change where they point. For example, in an array we store the pointer for index 0, then add to it in order to find the later indexes. For example, if we store a uint32_t (32-bit integer) array at the address location 0x8FFFFF00, the

# Linux + C – Doing the Math II

We've looked at the basics of performing basic math in C, but there are a few more things we should discuss before we write any code. Data Types We know that there are many different kinds of numbers. For example, we have signed numbers (which can be positive or negative) and unsigned numbers (which are assumed

# Linux + C – Doing the Math I

If we're being honest, we don't start programming because we want to print out clever one-liners to a terminal. We want to calculate something complicated or massive, and we want to do it quickly. Variables, functions, and symbols We all know what a number is, right? We may behind many countries in mathematics and science, but

# CS 101 – Floating Point Binary

This section should wrap us up on binary for now. Floating Point Numbers Up until this point, we have dealt exclusively with integer representation binary. Everything we have done has been a whole value, with no fractions. Floating point numbers are those fractions. More accurately, it is a number whose values can be between one and zero.

# CS 101 – Integer Representation

Apologies for the title, but I can't think of a better way to put it. Unsigned The simplest way to handle integers in binary is to treat every number as a positive number. This is called the unsigned integer representation. With the exception of subtraction, studied earlier, we have always used the unsigned integer representation before. Sign-Magnitude Naturally,

# CS 101 – Binary Mathematics

In my last post, we discovered binary as a form of numeric representation. Like decimal, we can perform basic arithmetic operations with binary (and, consequently, hex). Addition We all know that 1 + 1 = 2, right? In binary, 1 + 1 = 10, as 10 is the binary representation of 2. By the same token,