Changes

Jump to navigation Jump to search
265 bytes added ,  20:33, 15 August 2021
→‎Technical explanation: struct decrypted_signature for easier understanding of padding
Line 5: Line 5:  
<source lang=c>
 
<source lang=c>
 
#define SHA1_LENGTH 20
 
#define SHA1_LENGTH 20
 +
#define RSA_BLOCK_LENGTH 256
 +
#define PADDING_LENGTH RSA_BLOCK_LENGTH - SHA1_LENGTH
 +
 +
struct decrypted_signature {
 +
    u8 padding[PADDING_LENGTH]; // not verified
 +
    u8 sha1hash[SHA1_LENGTH];
 +
};
    
struct rsa_cert {
 
struct rsa_cert {
 
     u32 signature_type;
 
     u32 signature_type;
     char rsa_signature[256]; // 2048 bits
+
     char rsa_signature[RSA_BLOCK_LENGTH]; // 256 bytes, 2048 bits
 
     char unused[60];
 
     char unused[60];
 
};
 
};
Line 25: Line 32:     
int verify_tmd (struct tmd stmd) {
 
int verify_tmd (struct tmd stmd) {
   char decrypted_sig[256] = RSA_DecryptSig(CA_public_key, stmd.cert.rsa_signature);
+
   struct decrypted_signature decrypted_sig = (struct decrypted_signature) RSA_DecryptSig(CA_public_key, stmd.cert.rsa_signature);
   char sig_hash = decrypted_sig[256-SHA1_LENGTH:256];
+
   char sig_hash[SHA1_LENGTH] = decrypted_sig.sha1hash;
 
   char payload_hash[SHA1_LENGTH] = SHA1(stmd.view);
 
   char payload_hash[SHA1_LENGTH] = SHA1(stmd.view);
  
5,579

edits

Navigation menu