mirror of
https://github.com/autistic-symposium/sec-pentesting-toolkit.git
synced 2025-04-27 11:09:09 -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