# RSA application

Tutorial for application with RSA. We are going to use openSSL, openSSH and pycryptodome for key generation, key extraction and some implementation with python

### Pycryptodome:

Pycryptodome is a python library about cryptography, see the documentation below: https://www.pycryptodome.org/en/latest/ There is an example of RSA key generation with pycryptodome:

`from Crypto.Util.number import getPrime, bytes_to_longâ€‹â€‹def generate_keys():    e = 0x10001    #public exponent e, we generally use this one by default    while True:        p = getPrime(512)        q = getPrime(512)        phi = (p - 1) * (q - 1)    #Euler's totient         d = pow(e, -1, phi)    #Private exponent d        if d != -1:            breakâ€‹    n = p * q    public_key = (n, e)    private_key = (n, d)    return public_key, private_keyâ€‹â€‹def encrypt(plaintext: int, public_key) -> int:    n, e = public_key    return pow(plaintext, e, n)    #plaintext ** e mod nâ€‹â€‹def decrypt(ciphertext: int, private_key) -> int:    n, d = private_key    return pow(ciphertext, d, n)   #ciphertext ** d mod nâ€‹â€‹message = bytes_to_long(b"super_secret_message")public_key, private_key = generate_keys()ciphertext = encrypt(message, public_key)plaintext = decrypt(ciphertext, private_key)`

### OpenSSL:

OpenSSL is a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library

â€‹