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
@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.
@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 / 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 / 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 / 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 / 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 / Factorization.cs
Last active May 22, 2022 17:51
Prime Factorization class.
using System.Numerics;
public static class Factorization
{
private static BigInteger _cacheCeiling;
private static List<BigInteger> _primeCache;
private static BigInteger _cacheLargestPrimeCurrently;
private static BigInteger[] _probablePrimeCheckBases;
static Factorization()
@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;
@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 / NumberTheory.Maths.cs
Last active June 19, 2022 02:38
Number Theory functions: Legendre Symbol, Eulers Criterion, Tonelli-Shanks, Chinese Remainder Theorem, Modular Multiplicative Inverse, Primitive Root, Multiplicative Order, Discrete Logarithm, Discrete Root, Eulers Totient Phi, Carmichael Lambda, Exponentiation by Squaring, Factorial, Complex Gamma Function, Nth Root, Prime Factorization, LCM, GCD.
using System;
using System.Linq;
using System.Numerics;
using System.Collections.Generic;
public static class Maths
{
/// <summary>
/// Legendre Symbol returns 1 for a (nonzero) quadratic residue mod p, -1 for a non-quadratic residue (non-residue), or 0 on zero.
/// </summary>