mirror of
https://github.com/autistic-symposium/sec-pentesting-toolkit.git
synced 2025-04-27 02:59:08 -04:00
some math scripts
This commit is contained in:
parent
9dc0d638a4
commit
ab54dc8e70
26
Cryptography/tools/finding_gcd.py
Executable file
26
Cryptography/tools/finding_gcd.py
Executable file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
|
||||
def finding_gcd(a, b):
|
||||
''' implements the greatest common divider algorithm '''
|
||||
while(b != 0):
|
||||
result = b
|
||||
a, b = b, a % b
|
||||
return result
|
||||
|
||||
|
||||
def test_finding_gcd():
|
||||
number1 = 21
|
||||
number2 = 12
|
||||
assert(finding_gcd(number1, number2) == 3)
|
||||
print('Tests passed!')
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_finding_gcd()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
57
Cryptography/tools/finding_if_prime.py
Executable file
57
Cryptography/tools/finding_if_prime.py
Executable file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import math
|
||||
import random
|
||||
|
||||
def finding_prime(number):
|
||||
''' find whether a number is prime in a simple way'''
|
||||
num = abs(number)
|
||||
if num < 4 : return True
|
||||
for x in range(2, num):
|
||||
if num % x == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def finding_prime_sqrt(number):
|
||||
''' find whether a number is prime as soon as it rejects all candidates up to sqrt(n) '''
|
||||
num = abs(number)
|
||||
if num < 4 : return True
|
||||
for x in range(2, int(math.sqrt(num)) + 1):
|
||||
if number % x == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def finding_prime_fermat(number):
|
||||
''' find whether a number is prime with Fermat's theorem, using probabilistic tests '''
|
||||
if number <= 102:
|
||||
for a in range(2, number):
|
||||
if pow(a, number- 1, number) != 1:
|
||||
return False
|
||||
return True
|
||||
else:
|
||||
for i in range(100):
|
||||
a = random.randint(2, number - 1)
|
||||
if pow(a, number - 1, number) != 1:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def test_finding_prime():
|
||||
number1 = 17
|
||||
number2 = 20
|
||||
assert(finding_prime(number1) == True)
|
||||
assert(finding_prime(number2) == False)
|
||||
assert(finding_prime_sqrt(number1) == True)
|
||||
assert(finding_prime_sqrt(number2) == False)
|
||||
assert(finding_prime_fermat(number1) == True)
|
||||
assert(finding_prime_fermat(number2) == False)
|
||||
print('Tests passed!')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_finding_prime()
|
||||
|
||||
|
33
Cryptography/tools/generate_prime.py
Executable file
33
Cryptography/tools/generate_prime.py
Executable file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import math
|
||||
import random
|
||||
import sys
|
||||
from finding_prime import finding_prime_sqrt
|
||||
|
||||
|
||||
def generate_prime(number=3):
|
||||
''' return a n-bit prime '''
|
||||
while 1:
|
||||
p = random.randint(pow(2, number-2), pow(2, number-1)-1)
|
||||
p = 2 * p + 1
|
||||
if finding_prime_sqrt(p):
|
||||
return p
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 2:
|
||||
print ("Usage: generate_prime.py number")
|
||||
sys.exit()
|
||||
else:
|
||||
number = int(sys.argv[1])
|
||||
print(generate_prime(number))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
35
Cryptography/tools/quick_select.py
Executable file
35
Cryptography/tools/quick_select.py
Executable file
@ -0,0 +1,35 @@
|
||||
def quickSelect(seq, k):
|
||||
# this part is the same as quick sort
|
||||
len_seq = len(seq)
|
||||
if len_seq < 2: return seq
|
||||
|
||||
ipivot = len_seq // 2
|
||||
pivot = seq[ipivot]
|
||||
|
||||
smallerList = [x for i,x in enumerate(seq) if x <= pivot and i != ipivot]
|
||||
largerList = [x for i,x in enumerate(seq) if x > pivot and i != ipivot]
|
||||
|
||||
# here starts the different part
|
||||
m = len(smallerList)
|
||||
if k == m:
|
||||
return pivot
|
||||
elif k < m:
|
||||
return quickSelect(smallerList, k)
|
||||
else:
|
||||
return quickSelect(largerList, k-m)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Checking the Answer
|
||||
seq = [10, 60, 100, 50, 60, 75, 31, 50, 30, 20, 120, 170, 200]
|
||||
|
||||
# we want the middle element
|
||||
k = len(seq) // 2
|
||||
|
||||
# Note that this only work for odd arrays, since median in
|
||||
# even arrays is the mean of the two middle elements
|
||||
print(quickSelect(seq, k))
|
||||
import numpy
|
||||
print numpy.median(seq)
|
Loading…
x
Reference in New Issue
Block a user