int main() { DSA *key; FILE *fp1, *fp2; unsigned char digest[8] = "1234567"; int siglen; unsigned char signature[1000]; int retcode; key = DSA_generate_parameters(1024, NULL, 0, NULL, NULL, NULL, NULL); if (key == NULL) { printf("\nFailed to generate parameters\n"); exit(1); } fp1 = fopen("params.dat", "w"); DSAparams_print_fp(fp1, key); fclose(fp1); DSA_generate_key(key); if (key == NULL) { printf("\nFailed to generate key\n"); exit(1); } fp2 = fopen("key.dat", "w"); DSA_print_fp(fp2, key, 0); fclose(fp2); retcode = DSA_sign(0, digest, 8, signature, &siglen, key); if (retcode == 0) { printf("\n *** Error in signing ***\n\n"); exit(1); } printf("\n%s\n",signature); retcode = DSA_verify(0, digest, 8, signature, siglen, key); if (retcode == 1) printf("\n *** Valid signature ***\n\n"); if (retcode == 0) printf("\n *** Incorrect signature ***\n\n"); if (retcode == -1) printf("\n *** Error in verifying ***\n\n"); DSA_free(key); return 0; }
int main(int argc, char **argv) { DSA *dsa; unsigned char* input_string; unsigned char* sign_string; unsigned int sig_len; unsigned int i; if ( argc != 2 ) { fprintf(stderr, "%s <plain text>\n", argv[0]); exit(-1); } input_string = (unsigned char*)calloc(strlen(argv[1]) + 1, sizeof(unsigned char)); if ( input_string == NULL ) { fprintf(stderr, "Unable to allocate memory for input_string\n"); exit(-1); } strncpy((char *)input_string, argv[1], strlen(argv[1])); dsa = DSA_generate_parameters(1024, NULL, 0, NULL, NULL, NULL, NULL); DSA_generate_key(dsa); sign_string = (unsigned char *)calloc(DSA_size(dsa), sizeof(unsigned char)); if ( sign_string == NULL ) { fprintf(stderr, "Unable to allocate memory for sign_string\n"); exit(-1); } if ( DSA_sign(0, input_string, strlen((char *)input_string), sign_string, &sig_len, dsa) == 0 ) { fprintf(stderr, "Sign error\n"); exit(-1); } int is_valid_signature = DSA_verify(0, input_string, strlen((char*)input_string), sign_string, sig_len, dsa); DSAparams_print_fp(stdout, dsa); printf("input_string = %s\n", input_string); printf("signed string = "); for ( i = 0; i < sig_len; i++ ) printf("%x%x", (sign_string[i] >> 4) & 0xf, sign_string[i] & 0xf); printf("\n"); printf("is_valid_signature? = %d\n", is_valid_signature); return 0; }
int main() { FILE *fp; int len, i; MD5_CTX ctx; unsigned char buf[1000]; unsigned char md5sum[16]; MD5_Init(&ctx); if(!( fp = fopen("input.dat", "rb"))) { printf("\nFailed to open file\n"); return (1); } while((len = fread( buf, 1, sizeof(buf), fp ) ) > 0 ) { MD5_Update(&ctx, buf, len); } MD5_Final(md5sum, &ctx); printf("MD5(input.dat) = "); for( i = 0; i < 16; i++ ) { printf("%02x", md5sum[i]); } printf("\n"); DSA *key; FILE *fp1, *fp2; /*unsigned char digest[8] = "1234567";*/ int siglen; unsigned char signature[1000]; int retcode; key = DSA_generate_parameters(1024, NULL, 0, NULL, NULL, NULL, NULL); if (key == NULL) { printf("\nFailed to generate parameters\n"); exit(1); } fp1 = fopen("params.dat", "w"); DSAparams_print_fp(fp1, key); fclose(fp1); DSA_generate_key(key); if (key == NULL) { printf("\nFailed to generate key\n"); exit(1); } fp2 = fopen("key.dat", "w"); DSA_print_fp(fp2, key, 0); fclose(fp2); retcode = DSA_sign(0, md5sum, 8, signature, &siglen, key); if (retcode == 0) { printf("\n *** Error in signing ***\n\n"); exit(1); } FILE *fp3; fp3 = fopen("signature.dat", "w"); fputs(signature, fp3); fclose(fp3); printf("\nSignature of the hash = "); printf("%s\n",signature); retcode = DSA_verify(0, md5sum, 8, signature, siglen, key); if (retcode == 1) printf("\n *** Valid signature ***\n\n"); if (retcode == 0) printf("\n *** Incorrect signature ***\n\n"); if (retcode == -1) printf("\n *** Error in verifying ***\n\n"); DSA_free(key); return 0; }
inline void dsa_key::print_parameters(file _file) const { error::throw_error_if_not(DSAparams_print_fp(_file.raw(), ptr().get()) != 0); }