rsa_test: improve a bit
This commit is contained in:
		
							parent
							
								
									536a199203
								
							
						
					
					
						commit
						f86d36c676
					
				@ -100,6 +100,19 @@ static int rsa_compat_test(void)
 | 
			
		||||
   return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void _rsa_testPrint(const char* what, const unsigned char* p, const unsigned long l)
 | 
			
		||||
{
 | 
			
		||||
  unsigned long x;
 | 
			
		||||
  fprintf(stderr, "%s contents: \n", what);
 | 
			
		||||
  for (x = 0; x < l; ) {
 | 
			
		||||
      fprintf(stderr, "%02x ", p[x]);
 | 
			
		||||
      if (!(++x % 16)) {
 | 
			
		||||
         fprintf(stderr, "\n");
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
  fprintf(stderr, "\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int rsa_test(void)
 | 
			
		||||
{
 | 
			
		||||
   unsigned char in[1024], out[1024], tmp[1024];
 | 
			
		||||
@ -186,24 +199,9 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
      if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) {
 | 
			
		||||
         unsigned long x;
 | 
			
		||||
         fprintf(stderr, "\nrsa_decrypt_key mismatch, len %lu (second decrypt)\n", len2);
 | 
			
		||||
         fprintf(stderr, "Original contents: \n");
 | 
			
		||||
         for (x = 0; x < rsa_msgsize; ) {
 | 
			
		||||
             fprintf(stderr, "%02x ", in[x]);
 | 
			
		||||
             if (!(++x % 16)) {
 | 
			
		||||
                fprintf(stderr, "\n");
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
         fprintf(stderr, "\n");
 | 
			
		||||
         fprintf(stderr, "Output contents: \n");
 | 
			
		||||
         for (x = 0; x < rsa_msgsize; ) {
 | 
			
		||||
             fprintf(stderr, "%02x ", out[x]);
 | 
			
		||||
             if (!(++x % 16)) {
 | 
			
		||||
                fprintf(stderr, "\n");
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
         fprintf(stderr, "\n");
 | 
			
		||||
         _rsa_testPrint("Original", in, rsa_msgsize);
 | 
			
		||||
         _rsa_testPrint("Output", tmp, len2);
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@ -232,6 +230,8 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
      }
 | 
			
		||||
      if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) {
 | 
			
		||||
         fprintf(stderr, "rsa_decrypt_key mismatch len %lu", len2);
 | 
			
		||||
         _rsa_testPrint("Original", in, rsa_msgsize);
 | 
			
		||||
         _rsa_testPrint("Output", tmp, len2);
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
@ -250,10 +250,16 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
         fprintf(stderr, "rsa_decrypt_key_ex failed, %d, %d", stat, stat2);
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
      if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) {
 | 
			
		||||
      if (len2 != rsa_msgsize) {
 | 
			
		||||
         fprintf(stderr, "rsa_decrypt_key_ex mismatch len %lu", len2);
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
      if (memcmp(tmp, in, rsa_msgsize)) {
 | 
			
		||||
         fprintf(stderr, "rsa_decrypt_key_ex mismatch data");
 | 
			
		||||
         _rsa_testPrint("Original", in, rsa_msgsize);
 | 
			
		||||
         _rsa_testPrint("Output", tmp, rsa_msgsize);
 | 
			
		||||
         return 1;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   /* sign a message (unsalted, lower cholestorol and Atkins approved) now */
 | 
			
		||||
@ -354,10 +360,12 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
    * (4) Forge the structure of PKCS#1-EMSA encoded data
 | 
			
		||||
    * (4.1) Search for start and end of the padding string
 | 
			
		||||
    * (4.2) Move the signature to the front of the padding string
 | 
			
		||||
    * (4.3) Fill the message until the end with random data
 | 
			
		||||
    * (4.3) Zero the message until the end
 | 
			
		||||
    * (5) Encrypt the package again
 | 
			
		||||
    * (6) Profit :)
 | 
			
		||||
    *     Verification process should succeed, but result should not be valid
 | 
			
		||||
    *     For PS lengths < 8:  the verification process should fail
 | 
			
		||||
    *     For PS lengths >= 8: the verification process should succeed
 | 
			
		||||
    *     For all PS lengths:  the result should not be valid
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
   unsigned char* p = in;
 | 
			
		||||
@ -380,7 +388,7 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
     printf("\nBefore:");
 | 
			
		||||
     for (cnt = 0; cnt < len3; ++cnt) {
 | 
			
		||||
       if (cnt%32 == 0)
 | 
			
		||||
         printf("\n%3d:", cnt);
 | 
			
		||||
         printf("\n%3lu:", cnt);
 | 
			
		||||
       printf(" %02x", p3[cnt]);
 | 
			
		||||
     }
 | 
			
		||||
#endif
 | 
			
		||||
@ -397,15 +405,13 @@ for (cnt = 0; cnt < len; ) {
 | 
			
		||||
     memmove(&p3[cnt+i], &p3[cnt2], len3-cnt2);
 | 
			
		||||
     /* (4.3) */
 | 
			
		||||
     for (cnt = cnt + len3-cnt2+i; cnt < len; ++cnt) {
 | 
			
		||||
        do {
 | 
			
		||||
            p3[cnt] = (unsigned char)rand();
 | 
			
		||||
        } while (p3[cnt] == 0);
 | 
			
		||||
        p3[cnt] = 0;
 | 
			
		||||
     }
 | 
			
		||||
#if 0
 | 
			
		||||
     printf("\nAfter:");
 | 
			
		||||
     for (cnt = 0; cnt < len3; ++cnt) {
 | 
			
		||||
       if (cnt%32 == 0)
 | 
			
		||||
         printf("\n%3d:", cnt);
 | 
			
		||||
         printf("\n%3lu:", cnt);
 | 
			
		||||
       printf(" %02x", p3[cnt]);
 | 
			
		||||
     }
 | 
			
		||||
     printf("\n");
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user