| 
															
																@@ -100,10 +100,18 @@ int main(int argc, char **argv) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 { 
															 | 
															
															 | 
															
																 { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																   int opt; 
															 | 
															
															 | 
															
																   int opt; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																   RSA *rsa = RSA_new(); 
															 | 
															
															 | 
															
																   RSA *rsa = RSA_new(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  char *task; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																   rsa->n = rsa->e = rsa->p = rsa->q = NULL; 
															 | 
															
															 | 
															
																   rsa->n = rsa->e = rsa->p = rsa->q = NULL; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																   if (argc < 3) usage(EXIT_FAILURE); 
															 | 
															
															 | 
															
																   if (argc < 3) usage(EXIT_FAILURE); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  /* quick shortcut for testing factorization */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  if (argc == 3) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    task = "pub"; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    BN_dec2bn(&rsa->p, argv[1]); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    BN_dec2bn(&rsa->q, argv[2]); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    BN_dec2bn(&rsa->e, "65537"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  } else task = argv[1]; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																   while ((opt = getopt(argc-1, argv+1, "d:e:N:n:p:q:")) != -1)  { 
															 | 
															
															 | 
															
																   while ((opt = getopt(argc-1, argv+1, "d:e:N:n:p:q:")) != -1)  { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     switch (opt) { 
															 | 
															
															 | 
															
																     switch (opt) { 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -130,33 +138,10 @@ int main(int argc, char **argv) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																   SSL_library_init(); 
															 | 
															
															 | 
															
																   SSL_library_init(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  if (!strcmp(argv[1], "pub")) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  if (!strcmp(task, "pub")) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     return pubkey_generation(rsa); 
															 | 
															
															 | 
															
																     return pubkey_generation(rsa); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  else if (!strcmp(argv[1], "priv")) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+  else if (!strcmp(task, "priv")) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     return privkey_generation(rsa); 
															 | 
															
															 | 
															
																     return privkey_generation(rsa); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																   else 
															 | 
															
															 | 
															
																   else 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     usage(EXIT_FAILURE); 
															 | 
															
															 | 
															
																     usage(EXIT_FAILURE); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* creating public key */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  EVP_PKEY *pk; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  pk = EVP_PKEY_new(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  EVP_PKEY_set1_RSA(pk, rsa); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* creating dummy certificate */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  X509* crt; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  crt = X509_new(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  if (!X509_set_pubkey(crt, pk)) exit(EXIT_FAILURE); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* PEM_write_X509(stdout, crt); */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  /* 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  X509_free(crt); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  EVP_PKEY_free(pk); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  BN_free(q1); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  BN_free(p1); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  RSA_free(rsa); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  */ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-  return EXIT_SUCCESS; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 } 
															 | 
															
															 | 
															
																 } 
															 |