Giter VIP home page Giter VIP logo

erode-backend's Introduction

ERØDƎ - Express Api

Description

This project uses the Express Api framework.
The link of the server: http://localhost:5000.

Documentation:
Express Framework Documentation: https://expressjs.com/fr/4x/api.html

Installation

Please, make sure that you are in the erode-backend directory before making the npm installation.

$ npm install

Running the app

Open a file explorer, then get in the /src directory and modify the .env.test file to .env (check details in Notes).
Now open a terminal in the same path and enter this command to start the server:

# Start the server
$ node app.js

Notes

* /!\ IMPORTANT /!\ *

Please do not share the .env file because it contains all the tokens and secrets words.
Use instead the .env.test file and don't forget to remove the .test extension before running the server.

erode-backend's People

Contributors

pierrickdelrieu avatar jeremygrelaud avatar

Watchers

 avatar

erode-backend's Issues

fix at line 69

"""
Cryptographic system of ERODE
Author : Nausicaä & Jérémy Grelaud

"""
import sys

def pow_mod(x, y, modulo):
"""
Small function to calculate x^y [modulo]
"""

if y == 0:
    return 1
elif y == 1:
    return x % modulo
else:
    root = pow_mod(x, y // 2, modulo)
    if y % 2 == 0:
        return (root * root) % modulo
    else:
        return (root * root * x) % modulo

def invert_a_number_in_a_ring(number, n, s=1, t=0, N=0):
"""
recursive function to invert a number in Z/nZ
"""
return (n < 2 and t % N or invert_a_number_in_a_ring(n, number % n, t, s-number//n*t, N or n), -1)[n < 1]

def convert_number_from_base10_to_baseX(number, base):
"""
Convert "number" from the base 10 to the base "base"
return a list with the unit in the base in a list
"""

numberInBase = []
quotient = 1
while(quotient != 0):
    numberInBase.append(number % base)
    quotient = number // base
    number = quotient

# we invert the number of the the list to have the right order
return numberInBase[::-1]

def convert_number_from_base10_to_base16(number):

numberInBase = []
quotient = 1
while(quotient != 0):
    numberInBase.append(number % 16)
    if((number % 16) == 10):
        numberInBase.append(0)
    quotient = number // 16
    number = quotient

# we invert the number of the the list to have the right order
return numberInBase[::-1]

def convert_number_from_baseX_to_base10(number, base):
"""
Convert "number" from the base "base to the base 10
return a number
"""

result = 0
power = len(number)-1
for x in number:
    result += (x*(base**power))
    power -= 1

return result

def one_complement(binary):
"""
do the one complement in binary
for [1,0,0,1,1], we get [0,1,1,0,0]
"""

new_binary = []
for i in binary:
    if(i == 0):
        new_binary.append(1)
    else:
        new_binary.append(0)

return new_binary

def project_Fatalis(message, tag_code):
Tab = [65,97,69,101,73,105,79,111,85,117,89,121]

x = [int(a) for a in str(tag_code)]

fatalis = (x[1]*x[3]+x[0]-x[2])%6
if(fatalis == 0):
    fatalis = 4

newmessage = ""
for i in message:
    if(ord(i) in Tab):
        newmessage += chr(Tab[(Tab.index(ord(i))+(fatalis*2))%len(Tab)])
    else:
        newmessage += i
        
return newmessage

def project_Stark(message, tag_code):
Tab = [121,89,117,85,111,79,105,73,101,69,97,65]

x = [int(a) for a in str(tag_code)]
stark = (x[1]*x[3]+x[0]-x[2])%6
if(stark == 0):
    stark = 4

newmessage = ""
for i in message:
    if(ord(i) in Tab):
        newmessage += chr(Tab[(Tab.index(ord(i))+(stark*2))%len(Tab)])
    else:
        newmessage += i

return newmessage

def Babylonia(message, tag_code):
Tab = [66,98,67,99,68,100,70,102,71,103,72,104,74,106,75,107,76,108,77,109,78,110,80,112,81,113,82,114,83,115,84,116,86,118,87,119,88,120,90,122]

x = [int(a) for a in str(tag_code)]

babylonia = (x[0]*x[3]+x[2]-x[1])%20
if(babylonia == 0):
    babylonia = 13

newmessage = ""
for i in message:
    if(ord(i) in Tab):
        newmessage += chr(Tab[(Tab.index(ord(i))+(babylonia*2))%len(Tab)])
    else:
        newmessage += i

return newmessage

def Lutèce(message,tag_code):
Tab = [66,98,67,99,68,100,70,102,71,103,72,104,74,106,75,107,76,108,77,109,78,110,80,112,81,113,82,114,83,115,84,116,86,118,87,119,88,120,90,122]

x = [int(a) for a in str(tag_code)]

Lutece = (x[0]*x[3]+x[2]-x[1])%20
if(Lutece == 0):
    Lutece = 13

newmessage = ""
for i in message:
    if(ord(i) in Tab):
        newmessage += chr(Tab[(Tab.index(ord(i))-(Lutece*2))%len(Tab)])
    else:
        newmessage += i

return newmessage

def possibility_of_encryption(message):
for i in message:
if(ord(i)>=256):
return False

return True

def encryption_junior(message, tag_code):
"""
cipher a group of 10 digits with the tag code
[6,8,6,5,7,9,2,1,0,0] become 48144275502093940871982071991190135 (after base change and one complement)
return the number and a flag
"""

flag = 0
hexa_array = []  # we will get an array of array

message = Babylonia(message, tag_code)
message = project_Fatalis(message, tag_code)

for i in message:
    hexa_array.append(convert_number_from_base10_to_base16(ord(i)))
#print(hexa_array)
# fusion of the array
newArray = []
for i in range(len(hexa_array)):
    for j in range(len(hexa_array[i])):
        newArray.append(hexa_array[i][j])
#print(newArray)

# completion to a certain size
while(len(newArray) < 10):
    newArray.append(0)
# print(newArray)

group10 = convert_number_from_baseX_to_base10(newArray, tag_code)
# print(group10)

group10Binaire = convert_number_from_base10_to_baseX(group10, 2)
# print(group10Binaire)

group10BinaireComp = one_complement(group10Binaire)
# print(group10BinaireComp)
# if first element is 0 we need to mark it
i = 0
while(group10BinaireComp[i] == 0 and i < len(group10BinaireComp)):
    flag += 1
    i += 1

conversionEnChiffre = convert_number_from_baseX_to_base10(
    group10BinaireComp, 2)
# print(conversionEnChiffre)

return conversionEnChiffre, flag

def encryption_senior(full_message, tag_code):
"""

"""

# we're gonna encrypt multiple blocks
allblocks = []
substring = ""
counter = 0
for i in range(len(full_message)):
    if(counter == 5):
        allblocks.append(substring)
        substring = full_message[i]
        counter = 1
    else:
        counter = counter+1
        substring += full_message[i]

allblocks.append(substring)

#print(allblocks)
# we have blocks of 5 char or less

StoreCipheredNumbers = []
FlagNumbers = []

for i in allblocks:
    result = encryption_junior(i, tag_code)
    StoreCipheredNumbers.append(result[0])
    FlagNumbers.append(result[1])

# print(StoreCipheredNumbers)
Storage = StoreCipheredNumbers, FlagNumbers
message = ""
for i in range(len(Storage[0])):
    if(i==(len(Storage[0])-1)):
        message += str(Storage[0][i])+"!"+str(Storage[1][i])
    else:
        message += str(Storage[0][i])+"!"+str(Storage[1][i])+"!"

return message

#decipher a group of 10 digits
def decipher_junior(ciphered, tag_code, flag):
"""

"""

# first goes from base 10 to binary
binary = convert_number_from_base10_to_baseX(ciphered, 2)
# print(binary)

# then one complement
if(flag != 0):
    for i in range(flag):
        binary.insert(0, 0)

binaryComp = one_complement(binary)
# print(binaryComp)

# goes back to base 10
base10 = convert_number_from_baseX_to_base10(binaryComp, 2)
# print(base10)

# convert back to base tag_code
FusedArray = convert_number_from_base10_to_baseX(base10, tag_code)
# print(FusedArray)

#we compare last digits if a group of 2 are both = 0 we delete this

newtable = []

#print(FusedArray)
for i in range(0, len(FusedArray), 2):
    if (FusedArray[i] == 0) and (FusedArray[i+1] == 0):
        a = 1
    else:
        newtable.append(FusedArray[i])
        newtable.append(FusedArray[i+1])

#print(newtable)

# then we split in groups of 2 numbers to then convert back in hexa to ascii
str = ""
for i in range(0, len(newtable), 2):
    str += chr(convert_number_from_baseX_to_base10(
        [newtable[i], newtable[i+1]], 16))

str = Lutèce(str, tag_code)
str = project_Stark(str, tag_code)
# print(str)
return str

def decipher_senior(AllCipheredBlocks, tag_code):
"""

"""

Storage = AllCipheredBlocks.split("!")
blocks = []
Flags = []
for i in range(len(Storage)):
    if(i%2==0):
        blocks.append(int(Storage[i]))
    else:
        Flags.append(int(Storage[i]))


Ragnarock = ""

for i in range(len(blocks)):
    Ragnarock += decipher_junior(blocks[i], tag_code, Flags[i])

return Ragnarock

if name == "main":

message = str(sys.argv[1])
#open text file in read mode
#text_file = open("key.txt", "r")

#read whole file to a string
#data = text_file.read()

#close file
#text_file.close()

#print(data)
#message = data
tag_code = int(sys.argv[2])
#tag_code = 9999

if(possibility_of_encryption(message)):

    Storage = encryption_senior(message,tag_code)
    print(Storage)
else:
    print("Il y a un problème")

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.