---
# System prepended metadata

title: Logbook for Lab 05

---

# Logbook for Lab 05

## Purpose

This labs purpose is to improve your understanding of the RSA algorithm by going through all the essential steps of the RSA algorithm in real numbers, applying the learned theories.

## Task 1: Deriving the Private Key

To calculate the private key, this program was created in C:

```c=
#include <stdio.h>
#include <openssl/bn.h>
#define NBITS 128


void printBN2(char *msg, BIGNUM *a, BIGNUM *b)
{
    char *number_str_a = BN_bn2hex(a);
    char *number_str_b = BN_bn2hex(b);
    printf("%s (%s,%s)\n", msg, number_str_a, number_str_b);
    OPENSSL_free(number_str_a);
    OPENSSL_free(number_str_b);
}

void printBN(char *msg, BIGNUM *a)
{
    char *number_str_a = BN_bn2hex(a);
    printf("%s %s\n", msg, number_str_a);
    OPENSSL_free(number_str_a);
}


int main(){

    // init
    BN_CTX *ctx = BN_CTX_new();
    BIGNUM *p = BN_new();
    BIGNUM *q = BN_new();
    BIGNUM *n = BN_new();
    BIGNUM *e = BN_new();
    BIGNUM *p_1 = BN_new();
    BIGNUM *q_1 = BN_new();
    BIGNUM *phi = BN_new();
    BIGNUM *prime = BN_new();
    BIGNUM *d = BN_new();

    // assign value
    BN_hex2bn(&p, "F7E75FDC469067FFDC4E847C51F452DF");
    BN_hex2bn(&q, "E85CED54AF57E53E092113E62F436F4F");
    BN_hex2bn(&e, "0D88C3");


    // Public key n = pq
    BN_mul(n, p, q, ctx);
    printBN2("Public Key is ", e, n);

    //  phi(n) = (p-1)(q-1)
    BN_sub(p_1, p, BN_value_one());
    BN_sub(q_1, q, BN_value_one());
    BN_mul(phi, p_1, q_1, ctx);

    // check if "e" and phi is relatively prime
    BN_gcd(prime, phi, e, ctx);

    if (!BN_is_one(prime))
    {
        printf("Error: e and phi(n) is not relatively prime! \n ");
        exit(0);
    }

    // Calculate Private key 
    BN_mod_inverse(d, e, phi, ctx);
    printBN("Private Key is ", d);

}
```

After running the created program, we managed to get the private key.

![](https://i.imgur.com/XODlEcl.png)


## Task 2: Encrypting a Message

We need to convert this ASCII string ("A top secret!") to a hex string, and then convert the hex string to a BIGNUM using the hex-to-bn API BN_hex2bn().

Converting the string to hexadecimal:

```
python -c 'print("A top secret!".encode("hex"))'
4120746f702073656372657421
```

To encrypt the message we created the following code:

```c=
#include <stdio.h>
#include <openssl/bn.h>

void printBN(char *msg, BIGNUM *a)
{
    char *number_str_a = BN_bn2hex(a);
    printf("%s %s\n", msg, number_str_a);
    OPENSSL_free(number_str_a);
}

int main()
{
    
    BN_CTX *ctx = BN_CTX_new();
    BIGNUM *n = BN_new();
    BIGNUM *e = BN_new();
    BIGNUM *M = BN_new();

    //encrypt variable
    BIGNUM *C = BN_new();

    // provided values
    BN_hex2bn(&n, "DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5");
    BN_dec2bn(&e, "65537"); //decimal

    // message "A top secret!"
    BN_hex2bn(&M, "4120746f702073656372657421"); 

    // encrypt message M: M^e mod n
    BN_mod_exp(C, M, e, n, ctx);
    printBN("Encryption message:", C);

    return 0;
}
```

By running the program we get the encrypted message:

![](https://i.imgur.com/CzFTniG.png)

## Task 3: Decrypting a Message

Using the same public and private keys as in task 2, let's now decrypt the ciphertext C, and convert it back to a plain ASCII string.

`C = 8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F`

To decrypt the ciphertext C and get the hexadecimal string, we create the following program:

```c=
#include <stdio.h>
#include <openssl/bn.h>

void printBN(char *msg, BIGNUM *a)
{
    char *number_str_a = BN_bn2hex(a);
    printf("%s %s\n", msg, number_str_a);
    OPENSSL_free(number_str_a);
}

int main()
{
    
    BN_CTX *ctx = BN_CTX_new();
    BIGNUM *n = BN_new();
    BIGNUM *M = BN_new();

    BIGNUM *d = BN_new();
    BIGNUM *C = BN_new();

    // provided values
    BN_hex2bn(&n, "DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5");
    BN_hex2bn(&d, "74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AACBC26AA381CD7D30D");

    // message crypt
    BN_hex2bn(&C, "8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F"); 

    // decrypt C: C^d mod n
    BN_mod_exp(M, C, d, n, ctx);
    printBN("Decryption message:", M);

    return 0;
}
```

Thus obtaining the hexadecimal string:

![](https://i.imgur.com/iAuDRxy.png)

Now converting the hexadecimal string back to a simple ASCII string.

![](https://i.imgur.com/zAYBLpr.png)

## Task 4: Signing a Message

In order to sign a message we first need to calculate the cipher with the algorithm used in the previous task.

We calculate the hexadecimal values for the messages using:
```
 python -c 'print("I owe you $2000".encode('utf-8').hex())'
 49206f776520796f75202432303030
```
The hexadecimal value for the message "I owe you $2000" is `49206f776520796f75202432303030`

And,

```
 python -c 'print("I owe you $3000".encode('utf-8').hex())'
 49206f776520796f75202433303030
```

The hexadecimal value for the message "I owe you $3000" is `49206f776520796f75202433303030`

With this values we calculate the signature for each message using this code

```c=
    BN_CTX *ctx = BN_CTX_new();
    BIGNUM *n  = BN_new();
    BIGNUM *e  = BN_new();
    BIGNUM *M = BN_new();
    BIGNUM *d  = BN_new();
    BIGNUM *c = BN_new();


    BN_hex2bn(&n, "DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5");
    BN_hex2bn(&e, "010001");
    BN_hex2bn(&M, "4120746f702073656372657421");
    BN_hex2bn(&d, "74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AACBC26AA381CD7D30D");

    BIGNUM *signature = BN_new();

    // I owe you $2000
    BN_hex2bn(&M, "49206f776520796f75202432303030");

    BN_mod_exp(signature, M ,d , n, ctx);

    printBN("Signature for $2000 = ", signature);
    printf("\n");
    
    //I owe you $3000
    BN_hex2bn(&M, "49206f776520796f75202433303030");

    BN_mod_exp(signature, M ,d , n, ctx);

    printBN("Signature for $3000 = ", signature);
    printf("\n");
```

Signatures:

![](https://i.imgur.com/N5q3XPd.png)

## Task 5: Verifying a Signature

To verify the signature of the message we use inverse operation of the method used in the previous task:

```c=
BIGNUM *S = BN_new();

/*  M = Launch a missile. Hex = 4c61756e63682061206d697373696c652e
    S = 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F
    e = 010001 (this hex value equals to decimal 65537)
    n = AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115
*/

BN_hex2bn(&n, "AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115");
BN_hex2bn(&e, "010001");
BN_hex2bn(&M, "4c61756e63682061206d697373696c652e");
BN_hex2bn(&S, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F");

BN_mod_exp(c, S, e, n, ctx);

printBN("M given = ", M);
printBN("M obtained =", c);
```

Using the code above we obtain a M equal to the one provided:

```
M given =  4C61756E63682061206D697373696C652E
M obtained = 4C61756E63682061206D697373696C652E
```

Simulating an error in the Signature by changing the last 2 bytes from `2F` to `3F`.

```c=
BN_hex2bn(&S, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F");
BN_mod_exp(c, S, e, n, ctx);

printBN("M given = ", M);
printBN("M obtained =", c);
```

```
M given =  4C61756E63682061206D697373696C652E
M obtained = 91471927C80DF1E42C154FB4638CE8BC726D3D66C83A4EB6B7BE0203B41AC294
```

Has we can see the M obtained is cleary different than the one provided. We can conclude that even a single byte change in a signature produces massive difference in the decrypted message obtained.


## Task 6: Manually Verifying an X.509 Certificate

### Step 1: Download a certificate from a real web server

For this step we downloaded a certificate from `www.santander.pt:443` using the following command:

```bash
openssl s_client -connect www.santander.pt:443 -showcerts > santander.txt
```

This gave us the following text:

```
CONNECTED(00000003)
---
Certificate chain
 0 s:C = ES, ST = Cantabria, L = Santander, jurisdictionC = ES, O = "Grupo Santander (Banco Santander, S.A.)", businessCategory = Private Organization, OU = TOTTA, serialNumber = A39000013, CN = www.santander.pt
   i:C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2014 Entrust, Inc. - for authorized use only", CN = Entrust Certification Authority - L1M
-----BEGIN CERTIFICATE-----
MIIHZjCCBk6gAwIBAgIQUPHwvnH98PnjkgjHvl+XRjANBgkqhkiG9w0BAQsFADCB
ujELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsT
H1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAy
MDE0IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEuMCwG
A1UEAxMlRW50cnVzdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEwxTTAeFw0y
MTA2MjQxMDM0MTlaFw0yMjA3MDExMDM0MTlaMIHaMQswCQYDVQQGEwJFUzESMBAG
A1UECBMJQ2FudGFicmlhMRIwEAYDVQQHEwlTYW50YW5kZXIxEzARBgsrBgEEAYI3
PAIBAxMCRVMxMDAuBgNVBAoTJ0dydXBvIFNhbnRhbmRlciAoQmFuY28gU2FudGFu
ZGVyLCBTLkEuKTEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24xDjAMBgNV
BAsTBVRPVFRBMRIwEAYDVQQFEwlBMzkwMDAwMTMxGTAXBgNVBAMTEHd3dy5zYW50
YW5kZXIucHQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqsm+Hgm/q
lMVkunZWZf8Jq5S23EgeOCt4kBZQj4IfebwD5Z+YdGuqNApKjpz6EYdReMX2HdxW
mXz6XlVhvNUYavnd+Juj1MdCw6kUqzxrsmRovtfU3CAJ1m1nnXFBF8dvnQgCCM4a
TwSsaMDak2Gl9AjZJNaJIxHZPO4mpVnozQnCkhEVCzx2FICUUGuLy5s1ysLp9rsR
55fiU7dnMekiokfS1ELEmZsJTJepHprJaN00a2AT9ihp14a42MQwH28inbobP3Rv
UmgIeWb7bU42l1NN3XH6Tq87yKhFZkNXBKi6upaj9AfPxNbbZgmhwFKo06AkxBNz
3sINLSDKztGpAgMBAAGjggNEMIIDQDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSY
HwAKRMi1q5cmbYKogOKKgkv66TAfBgNVHSMEGDAWgBTD99C1KjCtrw2RIXA5VN28
iXDHOjBoBggrBgEFBQcBAQRcMFowIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVu
dHJ1c3QubmV0MDMGCCsGAQUFBzAChidodHRwOi8vYWlhLmVudHJ1c3QubmV0L2wx
bS1jaGFpbjI1Ni5jZXIwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRy
dXN0Lm5ldC9sZXZlbDFtLmNybDBTBgNVHREETDBKghB3d3cuc2FudGFuZGVyLnB0
ggxzYW50YW5kZXIucHSCEXNhbnRhbmRlcnRvdHRhLnB0ghV3d3cuc2FudGFuZGVy
dG90dGEucHQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjBLBgNVHSAERDBCMDcGCmCGSAGG+mwKAQIwKTAnBggrBgEFBQcCARYb
aHR0cHM6Ly93d3cuZW50cnVzdC5uZXQvcnBhMAcGBWeBDAEBMIIBfgYKKwYBBAHW
eQIEAgSCAW4EggFqAWgAdgBWFAaaL9fC7NP14b1Esj7HRna5vJkRXMDvlJhV1onQ
3QAAAXo9lbo1AAAEAwBHMEUCIQDHp3pOWdBeV1+H1nO/RtQo1bLG6gChT2rwBHsG
DJZsDwIgZNQ48AAe7YH1LKaJZ/IT8c5UyYpNw0uZMs+KcelrikwAdgBVgdTCFpA2
AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAAAXo9lbo+AAAEAwBHMEUCIDUv2rrT
+4XxC4CflMn0pC47uTgC/78J4JnBUeYyZq6dAiEArbDqpQF2BCFDT/BTXy2FMqiR
2gHDa9WSLyGMCNc39LYAdgBGpVXrdfqRIDC1oolp9PN9ESxBdL79SbiFq/L8cP5t
RwAAAXo9lbpZAAAEAwBHMEUCIA3/knL8uiA/m2463bQReLD1S4gGQ1BGX5y1euYF
LeIvAiEAm+mhkp3yWgDapT3O/nXFYfaPCcvXh+WXjjchWAnUR6IwDQYJKoZIhvcN
AQELBQADggEBAGa0Hvo19kSGLCocd/sbItQq5nCbOWR0NsoS+6Xgtfq3uf1ac6ak
mO3tTXEkIuy626KbagsnpVTO6krhhlQWNKVFdRnCWIl7B02oNffhZR8qmpRaojc9
PN3L5UWxvtGUZ+jPpgQdRTgFzl1xl5LJBjVUjj+hlR8NpNqkvwTWyNn3hJeoStUo
H5/KtyZImUKwsyrm4Di/bMiOruffTKPg9V7hQTHbv2L6ckEshpJJlb8t0CPq77NT
VmLJnbm5hiT3Y5eokhCDZriBSrjsrDfWxtCBcRdGJ3804zn1PTzx6giHLA7yp6UI
SBjHfj6DcUOTscfduYPRzMCnL3ibBREIIEU=
-----END CERTIFICATE-----
 1 s:C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2014 Entrust, Inc. - for authorized use only", CN = Entrust Certification Authority - L1M
   i:C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2009 Entrust, Inc. - for authorized use only", CN = Entrust Root Certification Authority - G2
-----BEGIN CERTIFICATE-----
MIIFLTCCBBWgAwIBAgIMYaHn0gAAAABR02amMA0GCSqGSIb3DQEBCwUAMIG+MQsw
CQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2Vl
IHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkg
RW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQD
EylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0x
NDEyMTUxNTI1MDNaFw0zMDEwMTUxNTU1MDNaMIG6MQswCQYDVQQGEwJVUzEWMBQG
A1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5l
dC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMTQgRW50cnVzdCwgSW5jLiAt
IGZvciBhdXRob3JpemVkIHVzZSBvbmx5MS4wLAYDVQQDEyVFbnRydXN0IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5IC0gTDFNMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEA0IHBOSPCsdHs91fdVSQ2kSAiSPf8ylIKsKs/M7WwhAf23056sPuY
Ij0BrFb7cW2y7rmgD1J3q5iTvjOK64dex6qwymmPQwhqPyK/MzlG1ZTy4kwFItln
gJHxBEoOm3yiydJs/TwJhL39axSagR3nioPvYRZ1R5gTOw2QFpi/iuInMlOZmcP7
lhw192LtjL1JcdJDQ6Gh4yEqI3CodT2ybEYGYW8YZ+QpfrI8wcVfCR5uRE7sIZlY
FUj0VUgqtzS0BeN8SYwAWN46lsw53GEzVc4qLj/RmWLoquY0djGqr3kplnjLgRSv
adr7BLlZg0SqCU+01CwBnZuUMWstoc/B5QIDAQABo4IBKzCCAScwDgYDVR0PAQH/
BAQDAgEGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8E
CDAGAQH/AgEAMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29j
c3AuZW50cnVzdC5uZXQwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5lbnRy
dXN0Lm5ldC9nMmNhLmNybDA7BgNVHSAENDAyMDAGBFUdIAAwKDAmBggrBgEFBQcC
ARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwHQYDVR0OBBYEFMP30LUqMK2v
DZEhcDlU3byJcMc6MB8GA1UdIwQYMBaAFGpyJnrQHu995ztpUdRsjZ+QEmarMA0G
CSqGSIb3DQEBCwUAA4IBAQC0h8eEIhopwKR47PVPG7SEl2937tTPWa+oQ5YvHVje
pvMVWy7ZQ5xMQrkXFxGttLFBx2YMIoYFp7Qi+8VoaIqIMthx1hGOjlJ+Qgld2dnA
DizvRGsf2yS89byxqsGK5Wbb0CTz34mmi/5e0FC6m3UAyQhKS3Q/WFOv9rihbISY
Jnz8/DVRZZgeO2x28JkPxLkJ1YXYJKd/KsLak0tkuHB8VCnTglTVz6WUwzOeTTRn
4Dh2ZgCN0C/GqwmqcvrOLzWJ/MDtBgO334wlV/H77yiI2YIowAQPlIFpI+CRKMVe
1QzX1CA778n4wI+nQc1XRG5sZ2L+hN/nYNjvv9QiHg3n
-----END CERTIFICATE-----
---
Server certificate
subject=C = ES, ST = Cantabria, L = Santander, jurisdictionC = ES, O = "Grupo Santander (Banco Santander, S.A.)", businessCategory = Private Organization, OU = TOTTA, serialNumber = A39000013, CN = www.santander.pt

issuer=C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2014 Entrust, Inc. - for authorized use only", CN = Entrust Certification Authority - L1M

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3802 bytes and written 388 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 092E17B110E96A42C53877393631A6507B3E39253D6539F7D0A55C9F8DD1AF82
    Session-ID-ctx: 
    Resumption PSK: 8877BAFA943CE3FD7B28B7CA1A8046D360F87100EDB08D899F58037DE44597507B48EB26213A26A2DCE05611DB100B41
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 83100 (seconds)
    TLS session ticket:
    0000 - 00 00 68 4f 95 e5 49 b2-11 15 8b df a1 2a 11 ab   ..hO..I......*..
    0010 - 56 01 bc b2 6f 4d 45 b9-28 d8 20 a4 8a f5 b5 af   V...oME.(. .....
    0020 - fd 5d 9b cd ea 62 5d bc-aa af f6 3b b1 87 85 dd   .]...b]....;....
    0030 - 8b 8c a4 62 dc 53 07 41-16 54 9b 38 b6 58 ca 03   ...b.S.A.T.8.X..
    0040 - 00 d9 80 63 cb c8 32 c1-89 41 93 95 6a ec af 5b   ...c..2..A..j..[
    0050 - 3a b6 c1 f5 91 43 08 43-26 ca 58 33 5f bb b1 1b   :....C.C&.X3_...
    0060 - af bb 38 65 d4 11 c3 3d-b4 08 56 a4 8b de e7 3b   ..8e...=..V....;
    0070 - 06 de 96 c2 f1 92 47 98-9e 59 49 f9 b7 17 2b b3   ......G..YI...+.
    0080 - ed 21 a1 d0 77 9c 4d 70-7c 97 ca e1 fd f2 57 b7   .!..w.Mp|.....W.
    0090 - 77 15 a6 43 77 96 eb 67-8b ec 69 a7 7a 06 72 c8   w..Cw..g..i.z.r.
    00a0 - 61 8d ef 07 ba e1 23 5f-c7 b9 c2 64 b5 68 ea c1   a.....#_...d.h..
    00b0 - 53 6b 6f 96 cc 07 8d e5-d3 d2 9a 08 fc f4 35 3f   Sko...........5?
    00c0 - 35 ff 40 b1 3c 69 6d 90-ff db ec 40 54 65 43 19   5.@.<im....@TeC.
    00d0 - 79 22 44 9e f3 96 be 0b-a3 bc 2d 22 7f 11 05 16   y"D.......-"....

    Start Time: 1639075331
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 511907D531AF795530321434CFDC7DF2D8FBA18377DAA5E676953A34C3D0348E
    Session-ID-ctx: 
    Resumption PSK: D0008EF7720172350C64F9C398E5D2A331557AB86A50144AE10D5B62E1DD866EBCC0D2F0C88D6EEF192B655B7CCBFBDB
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 83100 (seconds)
    TLS session ticket:
    0000 - 00 00 68 4f 95 e5 49 b2-11 15 8b df a1 2a 11 ab   ..hO..I......*..
    0010 - ec ae 89 76 9a 0a f8 36-51 41 5c 81 c1 7a 60 b1   ...v...6QA\..z`.
    0020 - e6 29 f5 82 8b ee a6 d0-6e fc 64 9d c3 86 4b 5c   .)......n.d...K\
    0030 - 8d 00 15 6e b2 a7 29 af-27 fd 3e ac e7 51 f1 aa   ...n..).'.>..Q..
    0040 - af ed 5a 58 15 08 07 de-3d b7 da d5 ce 93 6b 3c   ..ZX....=.....k<
    0050 - 35 10 7c 79 79 57 21 28-8f c2 f9 61 91 e4 f0 1c   5.|yyW!(...a....
    0060 - 33 16 e5 ea e9 b3 66 19-15 05 1a 99 12 5d 8b 5b   3.....f......].[
    0070 - 78 21 d4 b6 4e 3a 11 2b-b1 2a 7a ee 39 57 d0 f7   x!..N:.+.*z.9W..
    0080 - 5a ad f4 e6 09 1a 52 71-7d 77 a0 03 e8 aa 3a 49   Z.....Rq}w....:I
    0090 - 73 4d 8c ed 69 32 87 fa-58 2f eb 4c f5 35 de 50   sM..i2..X/.L.5.P
    00a0 - 22 2c bc 1d a6 85 5b 4e-fd a4 e1 57 93 a3 66 67   ",....[N...W..fg
    00b0 - 97 2e 47 17 07 c1 de dc-e0 f2 45 4e 77 4d 47 6a   ..G.......ENwMGj
    00c0 - 2b 16 e8 c7 f1 be b3 b2-16 a2 56 03 68 22 93 bd   +.........V.h"..
    00d0 - 27 79 1b c2 48 fa 48 7a-3f 21 94 73 62 c6 85 6e   'y..H.Hz?!.sb..n

    Start Time: 1639075331
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
closed
```

With this we created 2 files with the certificate keys given: `c0.pem` and `c1.pem`

### Step 2: Extract the public key (e, n) from the issuer's certificate

We then find the `n` value of the public key using the following command:
``` 
openssl x509 -in c1.pem -noout -modulus
Modulus=D081C13923C2B1D1ECF757DD55243691202248F7FCCA520AB0AB3F33B5B08407F6DF4E7AB0FB98223D01AC56FB716DB2EEB9A00F5277AB9893BE338AEB875EC7AAB0CA698F43086A3F22BF333946D594F2E24C0522D9678091F1044A0E9B7CA2C9D26CFD3C0984BDFD6B149A811DE78A83EF6116754798133B0D901698BF8AE22732539999C3FB961C35F762ED8CBD4971D24343A1A1E3212A2370A8753DB26C4606616F1867E4297EB23CC1C55F091E6E444EEC2199581548F455482AB734B405E37C498C0058DE3A96CC39DC613355CE2A2E3FD19962E8AAE6347631AAAF79299678CB8114AF69DAFB04B9598344AA094FB4D42C019D9B94316B2DA1CFC1E5
```

To find the `e` value of the public key, we use the command:

```
openssl x509 -in c1.pem -text -noout > e.txt
```

This give us the following text file:

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            61:a1:e7:d2:00:00:00:00:51:d3:66:a6
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2009 Entrust, Inc. - for authorized use only", CN = Entrust Root Certification Authority - G2
        Validity
            Not Before: Dec 15 15:25:03 2014 GMT
            Not After : Oct 15 15:55:03 2030 GMT
        Subject: C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2014 Entrust, Inc. - for authorized use only", CN = Entrust Certification Authority - L1M
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:d0:81:c1:39:23:c2:b1:d1:ec:f7:57:dd:55:24:
                    36:91:20:22:48:f7:fc:ca:52:0a:b0:ab:3f:33:b5:
                    b0:84:07:f6:df:4e:7a:b0:fb:98:22:3d:01:ac:56:
                    fb:71:6d:b2:ee:b9:a0:0f:52:77:ab:98:93:be:33:
                    8a:eb:87:5e:c7:aa:b0:ca:69:8f:43:08:6a:3f:22:
                    bf:33:39:46:d5:94:f2:e2:4c:05:22:d9:67:80:91:
                    f1:04:4a:0e:9b:7c:a2:c9:d2:6c:fd:3c:09:84:bd:
                    fd:6b:14:9a:81:1d:e7:8a:83:ef:61:16:75:47:98:
                    13:3b:0d:90:16:98:bf:8a:e2:27:32:53:99:99:c3:
                    fb:96:1c:35:f7:62:ed:8c:bd:49:71:d2:43:43:a1:
                    a1:e3:21:2a:23:70:a8:75:3d:b2:6c:46:06:61:6f:
                    18:67:e4:29:7e:b2:3c:c1:c5:5f:09:1e:6e:44:4e:
                    ec:21:99:58:15:48:f4:55:48:2a:b7:34:b4:05:e3:
                    7c:49:8c:00:58:de:3a:96:cc:39:dc:61:33:55:ce:
                    2a:2e:3f:d1:99:62:e8:aa:e6:34:76:31:aa:af:79:
                    29:96:78:cb:81:14:af:69:da:fb:04:b9:59:83:44:
                    aa:09:4f:b4:d4:2c:01:9d:9b:94:31:6b:2d:a1:cf:
                    c1:e5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            Authority Information Access: 
                OCSP - URI:http://ocsp.entrust.net

            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://crl.entrust.net/g2ca.crl

            X509v3 Certificate Policies: 
                Policy: X509v3 Any Policy
                  CPS: http://www.entrust.net/rpa

            X509v3 Subject Key Identifier: 
                C3:F7:D0:B5:2A:30:AD:AF:0D:91:21:70:39:54:DD:BC:89:70:C7:3A
            X509v3 Authority Key Identifier: 
                keyid:6A:72:26:7A:D0:1E:EF:7D:E7:3B:69:51:D4:6C:8D:9F:90:12:66:AB

    Signature Algorithm: sha256WithRSAEncryption
         b4:87:c7:84:22:1a:29:c0:a4:78:ec:f5:4f:1b:b4:84:97:6f:
         77:ee:d4:cf:59:af:a8:43:96:2f:1d:58:de:a6:f3:15:5b:2e:
         d9:43:9c:4c:42:b9:17:17:11:ad:b4:b1:41:c7:66:0c:22:86:
         05:a7:b4:22:fb:c5:68:68:8a:88:32:d8:71:d6:11:8e:8e:52:
         7e:42:09:5d:d9:d9:c0:0e:2c:ef:44:6b:1f:db:24:bc:f5:bc:
         b1:aa:c1:8a:e5:66:db:d0:24:f3:df:89:a6:8b:fe:5e:d0:50:
         ba:9b:75:00:c9:08:4a:4b:74:3f:58:53:af:f6:b8:a1:6c:84:
         98:26:7c:fc:fc:35:51:65:98:1e:3b:6c:76:f0:99:0f:c4:b9:
         09:d5:85:d8:24:a7:7f:2a:c2:da:93:4b:64:b8:70:7c:54:29:
         d3:82:54:d5:cf:a5:94:c3:33:9e:4d:34:67:e0:38:76:66:00:
         8d:d0:2f:c6:ab:09:aa:72:fa:ce:2f:35:89:fc:c0:ed:06:03:
         b7:df:8c:25:57:f1:fb:ef:28:88:d9:82:28:c0:04:0f:94:81:
         69:23:e0:91:28:c5:5e:d5:0c:d7:d4:20:3b:ef:c9:f8:c0:8f:
         a7:41:cd:57:44:6e:6c:67:62:fe:84:df:e7:60:d8:ef:bf:d4:
         22:1e:0d:e7

```

In this file we can find the `Exponent` used in the certificate:
```
Exponent: 65537 (0x10001)
```

### Step 3: Extract the signature from the server's certificate

For this we use the following command:

```bash
openssl x509 -in c0.pem -text -noout
```

Obtaining the following signature:

```
Signature Algorithm: sha256WithRSAEncryption
     66:b4:1e:fa:35:f6:44:86:2c:2a:1c:77:fb:1b:22:d4:2a:e6:
     70:9b:39:64:74:36:ca:12:fb:a5:e0:b5:fa:b7:b9:fd:5a:73:
     a6:a4:98:ed:ed:4d:71:24:22:ec:ba:db:a2:9b:6a:0b:27:a5:
     54:ce:ea:4a:e1:86:54:16:34:a5:45:75:19:c2:58:89:7b:07:
     4d:a8:35:f7:e1:65:1f:2a:9a:94:5a:a2:37:3d:3c:dd:cb:e5:
     45:b1:be:d1:94:67:e8:cf:a6:04:1d:45:38:05:ce:5d:71:97:
     92:c9:06:35:54:8e:3f:a1:95:1f:0d:a4:da:a4:bf:04:d6:c8:
     d9:f7:84:97:a8:4a:d5:28:1f:9f:ca:b7:26:48:99:42:b0:b3:
     2a:e6:e0:38:bf:6c:c8:8e:ae:e7:df:4c:a3:e0:f5:5e:e1:41:
     31:db:bf:62:fa:72:41:2c:86:92:49:95:bf:2d:d0:23:ea:ef:
     b3:53:56:62:c9:9d:b9:b9:86:24:f7:63:97:a8:92:10:83:66:
     b8:81:4a:b8:ec:ac:37:d6:c6:d0:81:71:17:46:27:7f:34:e3:
     39:f5:3d:3c:f1:ea:08:87:2c:0e:f2:a7:a5:08:48:18:c7:7e:
     3e:83:71:43:93:b1:c7:dd:b9:83:d1:cc:c0:a7:2f:78:9b:05:
     11:08:20:45
```

Using the command `cat signature | tr -d '[:space:]:'` on the signature value we obtain the following key:

```
66b41efa35f644862c2a1c77fb1b22d42ae6
709b39647436ca12fba5e0b5fab7b9fd5a73
a6a498eded4d712422ecbadba29b6a0b27a5
54ceea4ae186541634a5457519c258897b07
4da835f7e1651f2a9a945aa2373d3cddcbe5
45b1bed19467e8cfa6041d453805ce5d7197
92c90635548e3fa1951f0da4daa4bf04d6c8
d9f78497a84ad5281f9fcab726489942b0b3
2ae6e038bf6cc88eaee7df4ca3e0f55ee141
31dbbf62fa72412c86924995bf2dd023eaef
b3535662c99db9b98624f76397a892108366
b8814ab8ecac37d6c6d081711746277f34e3
39f53d3cf1ea08872c0ef2a7a5084818c77e
3e83714393b1c7ddb983d1ccc0a72f789b05
11082045
```

### Step 4: Extract the body of the server's certificate

In order to view the information in the server's certificate we use the following command:

```bash
openssl asn1parse -i -in c0.pem
```

Executing the command we obtain this text:

```
    0:d=0  hl=4 l=1894 cons: SEQUENCE          
    4:d=1  hl=4 l=1614 cons:  SEQUENCE          
    8:d=2  hl=2 l=   3 cons:   cont [ 0 ]        
   10:d=3  hl=2 l=   1 prim:    INTEGER           :02
   13:d=2  hl=2 l=  16 prim:   INTEGER           :50F1F0BE71FDF0F9E39208C7BE5F9746
   31:d=2  hl=2 l=  13 cons:   SEQUENCE          
   33:d=3  hl=2 l=   9 prim:    OBJECT            :sha256WithRSAEncryption
   44:d=3  hl=2 l=   0 prim:    NULL              
   46:d=2  hl=3 l= 186 cons:   SEQUENCE          
   49:d=3  hl=2 l=  11 cons:    SET               
   51:d=4  hl=2 l=   9 cons:     SEQUENCE          
   53:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
   58:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :US
   62:d=3  hl=2 l=  22 cons:    SET               
   64:d=4  hl=2 l=  20 cons:     SEQUENCE          
   66:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
   71:d=5  hl=2 l=  13 prim:      PRINTABLESTRING   :Entrust, Inc.
   86:d=3  hl=2 l=  40 cons:    SET               
   88:d=4  hl=2 l=  38 cons:     SEQUENCE          
   90:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
   95:d=5  hl=2 l=  31 prim:      PRINTABLESTRING   :See www.entrust.net/legal-terms
  128:d=3  hl=2 l=  57 cons:    SET               
  130:d=4  hl=2 l=  55 cons:     SEQUENCE          
  132:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
  137:d=5  hl=2 l=  48 prim:      PRINTABLESTRING   :(c) 2014 Entrust, Inc. - for authorized use only
  187:d=3  hl=2 l=  46 cons:    SET               
  189:d=4  hl=2 l=  44 cons:     SEQUENCE          
  191:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
  196:d=5  hl=2 l=  37 prim:      PRINTABLESTRING   :Entrust Certification Authority - L1M
  235:d=2  hl=2 l=  30 cons:   SEQUENCE          
  237:d=3  hl=2 l=  13 prim:    UTCTIME           :210624103419Z
  252:d=3  hl=2 l=  13 prim:    UTCTIME           :220701103419Z
  267:d=2  hl=3 l= 218 cons:   SEQUENCE          
  270:d=3  hl=2 l=  11 cons:    SET               
  272:d=4  hl=2 l=   9 cons:     SEQUENCE          
  274:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
  279:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :ES
  283:d=3  hl=2 l=  18 cons:    SET               
  285:d=4  hl=2 l=  16 cons:     SEQUENCE          
  287:d=5  hl=2 l=   3 prim:      OBJECT            :stateOrProvinceName
  292:d=5  hl=2 l=   9 prim:      PRINTABLESTRING   :Cantabria
  303:d=3  hl=2 l=  18 cons:    SET               
  305:d=4  hl=2 l=  16 cons:     SEQUENCE          
  307:d=5  hl=2 l=   3 prim:      OBJECT            :localityName
  312:d=5  hl=2 l=   9 prim:      PRINTABLESTRING   :Santander
  323:d=3  hl=2 l=  19 cons:    SET               
  325:d=4  hl=2 l=  17 cons:     SEQUENCE          
  327:d=5  hl=2 l=  11 prim:      OBJECT            :jurisdictionCountryName
  340:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :ES
  344:d=3  hl=2 l=  48 cons:    SET               
  346:d=4  hl=2 l=  46 cons:     SEQUENCE          
  348:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
  353:d=5  hl=2 l=  39 prim:      PRINTABLESTRING   :Grupo Santander (Banco Santander, S.A.)
  394:d=3  hl=2 l=  29 cons:    SET               
  396:d=4  hl=2 l=  27 cons:     SEQUENCE          
  398:d=5  hl=2 l=   3 prim:      OBJECT            :businessCategory
  403:d=5  hl=2 l=  20 prim:      PRINTABLESTRING   :Private Organization
  425:d=3  hl=2 l=  14 cons:    SET               
  427:d=4  hl=2 l=  12 cons:     SEQUENCE          
  429:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
  434:d=5  hl=2 l=   5 prim:      PRINTABLESTRING   :TOTTA
  441:d=3  hl=2 l=  18 cons:    SET               
  443:d=4  hl=2 l=  16 cons:     SEQUENCE          
  445:d=5  hl=2 l=   3 prim:      OBJECT            :serialNumber
  450:d=5  hl=2 l=   9 prim:      PRINTABLESTRING   :A39000013
  461:d=3  hl=2 l=  25 cons:    SET               
  463:d=4  hl=2 l=  23 cons:     SEQUENCE          
  465:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
  470:d=5  hl=2 l=  16 prim:      PRINTABLESTRING   :www.santander.pt
  488:d=2  hl=4 l= 290 cons:   SEQUENCE          
  492:d=3  hl=2 l=  13 cons:    SEQUENCE          
  494:d=4  hl=2 l=   9 prim:     OBJECT            :rsaEncryption
  505:d=4  hl=2 l=   0 prim:     NULL              
  507:d=3  hl=4 l= 271 prim:    BIT STRING        
  782:d=2  hl=4 l= 836 cons:   cont [ 3 ]        
  786:d=3  hl=4 l= 832 cons:    SEQUENCE          
  790:d=4  hl=2 l=  12 cons:     SEQUENCE          
  792:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Basic Constraints
  797:d=5  hl=2 l=   1 prim:      BOOLEAN           :255
  800:d=5  hl=2 l=   2 prim:      OCTET STRING      [HEX DUMP]:3000
  804:d=4  hl=2 l=  29 cons:     SEQUENCE          
  806:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Subject Key Identifier
  811:d=5  hl=2 l=  22 prim:      OCTET STRING      [HEX DUMP]:0414981F000A44C8B5AB97266D82A880E28A824BFAE9
  835:d=4  hl=2 l=  31 cons:     SEQUENCE          
  837:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Authority Key Identifier
  842:d=5  hl=2 l=  24 prim:      OCTET STRING      [HEX DUMP]:30168014C3F7D0B52A30ADAF0D9121703954DDBC8970C73A
  868:d=4  hl=2 l= 104 cons:     SEQUENCE          
  870:d=5  hl=2 l=   8 prim:      OBJECT            :Authority Information Access
  880:d=5  hl=2 l=  92 prim:      OCTET STRING      [HEX DUMP]:305A302306082B060105050730018617687474703A2F2F6F6373702E656E74727573742E6E6574303306082B060105050730028627687474703A2F2F6169612E656E74727573742E6E65742F6C316D2D636861696E3235362E636572
  974:d=4  hl=2 l=  51 cons:     SEQUENCE          
  976:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 CRL Distribution Points
  981:d=5  hl=2 l=  44 prim:      OCTET STRING      [HEX DUMP]:302A3028A026A0248622687474703A2F2F63726C2E656E74727573742E6E65742F6C6576656C316D2E63726C
 1027:d=4  hl=2 l=  83 cons:     SEQUENCE          
 1029:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Subject Alternative Name
 1034:d=5  hl=2 l=  76 prim:      OCTET STRING      [HEX DUMP]:304A82107777772E73616E74616E6465722E7074820C73616E74616E6465722E7074821173616E74616E646572746F7474612E707482157777772E73616E74616E646572746F7474612E7074
 1112:d=4  hl=2 l=  14 cons:     SEQUENCE          
 1114:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Key Usage
 1119:d=5  hl=2 l=   1 prim:      BOOLEAN           :255
 1122:d=5  hl=2 l=   4 prim:      OCTET STRING      [HEX DUMP]:030205A0
 1128:d=4  hl=2 l=  29 cons:     SEQUENCE          
 1130:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Extended Key Usage
 1135:d=5  hl=2 l=  22 prim:      OCTET STRING      [HEX DUMP]:301406082B0601050507030106082B06010505070302
 1159:d=4  hl=2 l=  75 cons:     SEQUENCE          
 1161:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Certificate Policies
 1166:d=5  hl=2 l=  68 prim:      OCTET STRING      [HEX DUMP]:30423037060A6086480186FA6C0A01023029302706082B06010505070201161B68747470733A2F2F7777772E656E74727573742E6E65742F7270613007060567810C0101
 1236:d=4  hl=4 l= 382 cons:     SEQUENCE          
 1240:d=5  hl=2 l=  10 prim:      OBJECT            :CT Precertificate SCTs
 1252:d=5  hl=4 l= 366 prim:      OCTET STRING      [HEX DUMP]:0482016A01680076005614069A2FD7C2ECD3F5E1BD44B23EC74676B9BC99115CC0EF949855D689D0DD0000017A3D95BA350000040300473045022100C7A77A4E59D05E575F87D673BF46D428D5B2C6EA00A14F6AF0047B060C966C0F022064D438F0001EED81F52CA68967F213F1CE54C98A4DC34B9932CF8A71E96B8A4C0076005581D4C2169036014AEA0B9B573C53F0C0E43878702508172FA3AA1D0713D30C0000017A3D95BA3E00000403004730450220352FDABAD3FB85F10B809F94C9F4A42E3BB93802FFBF09E099C151E63266AE9D022100ADB0EAA501760421434FF0535F2D8532A891DA01C36BD5922F218C08D737F4B600760046A555EB75FA912030B5A28969F4F37D112C4174BEFD49B885ABF2FC70FE6D470000017A3D95BA59000004030047304502200DFF9272FCBA203F9B6E3ADDB41178B0F54B88064350465F9CB57AE6052DE22F0221009BE9A1929DF25A00DAA53DCEFE75C561F68F09CBD787E5978E37215809D447A2
 1622:d=1  hl=2 l=  13 cons:  SEQUENCE          
 1624:d=2  hl=2 l=   9 prim:   OBJECT            :sha256WithRSAEncryption
 1635:d=2  hl=2 l=   0 prim:   NULL              
 1637:d=1  hl=4 l= 257 prim:  BIT STRING        
```

From this text we can extract the body of the certificate using the command:

```bash
openssl anslparse -i -in c0.pem -strparse 4 -out c0_body.bin -nout
```

Running the command we obtain a bin file `c0_body.bin` with the body of the certificate.

After this we calculate the hash value of the body using the `sha256sum` algorithm:

```bash
sha256sum c0_body.bin
```

Output:
```
793ec98a8800cb7b6ab2354a15b1b911972ac036d2607936e00aae2ffe1a5e68  c0_body.bin
```

### Step 5: Verify the signature

To calculate the body of the server using the signature and the values of e and n, we just need to change the initial valeus of these variables in the code presented in task 5: 

```c=
BN_hex2bn(&n, "D081C13923C2B1D1ECF757DD55243691202248F7FCCA520AB0AB3F33B5B08407F6DF4E7AB0FB98223D01AC56FB716DB2EEB9A00F5277AB9893BE338AEB875EC7AAB0CA698F43086A3F22BF333946D594F2E24C0522D9678091F1044A0E9B7CA2C9D26CFD3C0984BDFD6B149A811DE78A83EF6116754798133B0D901698BF8AE22732539999C3FB961C35F762ED8CBD4971D24343A1A1E3212A2370A8753DB26C4606616F1867E4297EB23CC1C55F091E6E444EEC2199581548F455482AB734B405E37C498C0058DE3A96CC39DC613355CE2A2E3FD19962E8AAE6347631AAAF79299678CB8114AF69DAFB04B9598344AA094FB4D42C019D9B94316B2DA1CFC1E5");
BN_hex2bn(&e, "010001");
BN_hex2bn(&M, "793ec98a8800cb7b6ab2354a15b1b911972ac036d2607936e00aae2ffe1a5e68 ");
BN_hex2bn(&S, "66b41efa35f644862c2a1c77fb1b22d42ae6709b39647436ca12fba5e0b5fab7b9fd5a73a6a498eded4d712422ecbadba29b6a0b27a554ceea4ae186541634a5457519c258897b074da835f7e1651f2a9a945aa2373d3cddcbe545b1bed19467e8cfa6041d453805ce5d719792c90635548e3fa1951f0da4daa4bf04d6c8d9f78497a84ad5281f9fcab726489942b0b32ae6e038bf6cc88eaee7df4ca3e0f55ee14131dbbf62fa72412c86924995bf2dd023eaefb3535662c99db9b98624f76397a892108366b8814ab8ecac37d6c6d081711746277f34e339f53d3cf1ea08872c0ef2a7a5084818c77e3e83714393b1c7ddb983d1ccc0a72f789b0511082045");

BN_mod_exp(c, S, e, n, ctx);
printBN("M given = ", M);
printBN("M obtained =", c);

```

This gave us the following result:

```
M given =  793EC98A8800CB7B6AB2354A15B1B911972AC036D2607936E00AAE2FFE1A5E68
M obtained = 01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003031300D060960864801650304020105000420793EC98A8800CB7B6AB2354A15B1B911972AC036D2607936E00AAE2FFE1A5E68
```

At first it might seem that the value found is different than the body of the server's certificate, but with further inspection we can see that its same value only padded to meet the same number of bytes as the signature and n.

![](https://i.imgur.com/dscwxfj.png)
