Skip to content

Instantly share code, notes, and snippets.

View AdamWhiteHat's full-sized avatar
🏠
Working from home

Adam White AdamWhiteHat

🏠
Working from home
View GitHub Profile
@tuxxy
tuxxy / homomorphic_rsa_demo.py
Last active October 31, 2019 03:16
This is a demo of the multiplicative homomorphic qualities of unpadded RSA encryption.
#!/usr/bin/env python3
from Cryptodome.PublicKey import RSA
# A proof of concept demo showing the multiplicative limited
# homomorphic qualities of unpadded RSA
# (Unpadded RSA is not secure by modern standards)
def gen_key(size):
key = RSA.generate(size)
@AdamWhiteHat
AdamWhiteHat / prime-sieve.svg
Created December 22, 2016 21:21
Javascript in SVG example (prime circles)
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@AdamWhiteHat
AdamWhiteHat / Eratosthenes.cs
Last active December 22, 2020 10:28
Sieve of Eratosthenes.
public static class Eratosthenes
{
public static IEnumerable<BigInteger> Sieve(Int64 maxValue)
{
if (maxValue < 10)
{
if (maxValue == 9 || maxValue == 8 || maxValue == 7)
{
return new List<BigInteger>() { 2, 3, 5, 7 };
}
@AdamWhiteHat
AdamWhiteHat / HashCodeHelper.cs
Last active December 22, 2020 10:28
Combine two hashcodes
public static class HashCodeHelper
{
public static int Combine(int h1, int h2)
{
uint num = (uint)((h1 << 5) | (int)((uint)h1 >> 27));
return ((int)num + h1) ^ h2;
}
}
@AdamWhiteHat
AdamWhiteHat / PrimeFactory.cs
Last active December 22, 2020 10:29
PrimeFactory class (with caching). Required by Factorization class.
public static class PrimeFactory
{
private static BigInteger _cacheLargestPrimeCurrently;
private static BigInteger _cacheCeiling;
internal static BigInteger[] _primeCache;
static PrimeFactory()
{
_cacheCeiling = BigInteger.Pow(11, 7);
_primeCache = new BigInteger[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 };
@AdamWhiteHat
AdamWhiteHat / CryptoRandomSingleton.cs
Last active December 22, 2020 12:42
Cryptographically secure random number generator. Safe, secure, & correct implementation. Numbers are evenly distributed across entire range; avoids modulo bias. Internal buffers always cleared after every value returned--leaves nothing in memory. Singleton intended to be instantiated only once. Remember to call Dispose.
/// <summary>
/// Cryptographically secure random number generator. Features a safe, secure, and correct implementation.
/// Numbers are evenly distributed across the whole range; avoids modulo bias.
/// Internal buffers always cleared after every value returned--leaves nothing in memory.
/// Singleton intended to be instantiated only once for the lifetime of the application.
/// Remember to call Dispose when no longer needed.
/// </summary>
public static class CryptoRandomSingleton
{
@AdamWhiteHat
AdamWhiteHat / FastFactorial.cs
Created December 22, 2020 12:48
A fast factorial implementation using the divide and conquer method.
public static class FastFactorial
{
public static BigInteger Factorial(BigInteger n)
{
return MultiplyRange(2, n);
}
private static BigInteger MultiplyRange(BigInteger from, BigInteger to)
{
var diff = to - from;
@AdamWhiteHat
AdamWhiteHat / BigIntegerExtensionMethods.cs
Last active April 27, 2022 13:03
BigInteger ExtensionMethods
public static class BigIntegerExtensionMethods
{
public static BigInteger Sum(this IEnumerable<BigInteger> source)
{
return source.Aggregate((accumulator, current) => accumulator + current);
}
public static BigInteger Product(this IEnumerable<BigInteger> source)
{
return source.Aggregate((accumulator, current) => accumulator * current);
@AdamWhiteHat
AdamWhiteHat / PasswordHashing.cs
Created December 22, 2020 13:17
Don't use SHA256 to hash your passwords! Hash passwords the correct way, using BCrypt.
/// <summary>
/// Requires the BCrypt nuget package. Available here: https://www.nuget.org/packages/BCrypt.Net-Next
/// </summary>
public static class PasswordHashing
{
public static string HashPassword(string password, int workFactor)
{
return BCrypt.Net.BCrypt.HashPassword(password, workFactor);
}
@AdamWhiteHat
AdamWhiteHat / ANS1PrivateKey.cs
Created December 22, 2020 10:44
ANS1 parser for a RSA PrivateKey. Can also create a private key from just a P and Q by calculating the D, DP, DQ, and InverseQ. Create real private keys from small primes for CTFs, factoring challenges or the lulz.
public class ANS1PrivateKey : IDisposable
{
public BigInteger Modulus = BigInteger.MinusOne;
public BigInteger Exponent = BigInteger.MinusOne;
public BigInteger P = BigInteger.MinusOne;
public BigInteger Q = BigInteger.MinusOne;
public BigInteger D = BigInteger.MinusOne;
public BigInteger DP = BigInteger.MinusOne;
public BigInteger DQ = BigInteger.MinusOne;
public BigInteger InverseQ = BigInteger.MinusOne;