Can someone comment on why this fails on windows? I too observed that the decryption does not result in the original plain text on windows. -Sandeep
On Sun, Oct 18, 2009 at 5:58 AM, Lutz Jaenicke <jaeni...@openssl.org> wrote: > Forwarded to openssl-users for public discussion. > > Best regards, > Lutz > > ----- Forwarded message from User User <si.be.ar....@mail.ru> ----- > > From: User User <si.be.ar....@mail.ru> > To: r...@openssl.org > Subject: Build incorrect crypt/decrypt in Win32. x86. MSVC 2003. MinGW. > Date: Sun, 18 Oct 2009 07:46:40 +0400 > Reply-To: User User <si.be.ar....@mail.ru> > > Hello openssl Hackers. > I am beginner in openssl. Learn for wrote simple crypto_test.cpp program. > Test it under CentOS, FreeBSD and Win32. > Linux,BSD work fine, but windows builds uncorrect. > Build in MS VC .Net 2003 and MingGW, both not work in crypt/decrypt cycles > correctly. > Send code in attach, and openssl makefile and simple description in > README.TXT > I can't understand. is it a bug or my build problems. > Please, show right way. > Thank you. > Nick. > ------------------------ > RESULTS: > > --[ FreeBSD ]-- > ./crypto_test -e plaintext encypt.bsd 123 > ./crypto_test -d encypt.bsd plaintext.out.bsd 123 > ./openssl dgst -rmd160 plaintext encypt.bsd plaintext.out.bsd > > RIPEMD160(plaintext) = > d7ca608f0430c3248527572662af5e50d93e87ca > RIPEMD160(encypt.bsd) = 9a465d7a2304833f0d7a967ce5a04687b7350441 > RIPEMD160(plaintext.out.bsd) = > d7ca608f0430c3248527572662af5e50d93e87ca > > --[ WIN32 ]-- > crypto_test.exe -e plaintext encrypt.w32 123 > crypto_test.exe -d encrypt.w32 plaintext.out.w32 123 > openssl.exe dgst -rmd160 plaintext encrypt.w32 plaintext.out.w32 > > RIPEMD160(plaintext) = > d7ca608f0430c3248527572662af5e50d93e87ca > RIPEMD160(encrypt.w32) = e1ae968afaa4fa259a4f81012804769fe2d13dd6 > RIPEMD160(plaintext.out.w32) = > 753e049eb8c31e2116e575402db6f7dd7abdbfa1 > > > ------------------------] Code of crypto_test.cpp > #include <stdio.h> > #include <string.h> > > #include <openssl/err.h> > #include <openssl/bio.h> > #include <openssl/evp.h> > > #define BUF_SIZE 32767 > > int enc(char* fin, char* fout, unsigned char* key); > int dec(char* fin, char* fout, unsigned char* key); > > int main(int argc, char* argv[]) > { > ERR_load_crypto_strings(); > if(argc<5){ > printf("Need more args:\n\t1 - -e/-d\n\t2 - file_in\n\t3 - > file_out\n\t4 - pass\n\t"); > exit(0); > } > > int ret =0; > if(!strcmp(argv[1], "-e")){ > ret = enc(argv[2], argv[3], (unsigned char*)argv[4]); > }else if(!strcmp(argv[1], "-d")){ > ret = dec(argv[2], argv[3], (unsigned char*)argv[4]); > }else{ > printf("Unknown direction: %s\n",argv[1]); > exit(0); > } > > if(!ret) > printf("Completed\n"); > else > printf("Error:%d",ret); > > ERR_free_strings(); > > return ret; > } > > int enc(char* fin, char* fout, unsigned char* key){ > int ret = 0; > > printf("Mode ENCRYPT\n"); > > BIO *bin = BIO_new_file(fin, "r"); > > if(!bin){ > ret = ERR_get_error(); > printf("Decryption failed, > reason:%s\n",ERR_reason_error_string(ret)); > return ret; > } > > BIO *bout = BIO_new_file(fout, "w"); > > if(!bout) > return ERR_get_error(); > > BIO* cipher = BIO_new(BIO_f_cipher()); > > BIO_set_cipher(cipher, EVP_bf_ecb(), key, 0, 1); > BIO_push(cipher, bout); > > void* buff = malloc(BUF_SIZE+1); > int rlen = 0, written =0; > > do{ > memset(buff, 0, BUF_SIZE+1); > if(!(rlen=BIO_read(bin, buff, sizeof(buff))) ){ > break; > } > > if( (written = BIO_write(cipher, buff, > (int)strlen((char*)buff)) ) <=0 ){ > ret = ERR_get_error(); > printf("Encryption failed, > reason:%s\n",ERR_reason_error_string(ret)); > break; > } > > }while(1); > > free(buff); > BIO_flush(cipher); > BIO_free_all(cipher); > > return ret; > } > > int dec(char* fin, char* fout, unsigned char* key){ > int ret = 0; > > printf("Mode DECRYPT\n"); > BIO *bin = BIO_new_file(fin, "r"); > > if(!bin) > return ERR_get_error(); > > BIO *bout = BIO_new_file(fout, "w"); > > if(!bout) > return ERR_get_error(); > > BIO* cipher = BIO_new(BIO_f_cipher()); > > BIO_set_cipher(cipher, EVP_bf_ecb(), key, 0, 0); > BIO_push(cipher, bin); > > void* buff = malloc(BUF_SIZE+1); > int rlen = 0, written =0; > > do{ > memset(buff, 0, BUF_SIZE+1); > > if(!(rlen=BIO_read(cipher, buff, sizeof(buff))) ){ > break; > } > > if(!BIO_get_cipher_status(cipher)){ > ret = ERR_get_error(); > printf("Decryption failed, > reason:%s\n",ERR_reason_error_string(ret)); > break; > } > > if( (written = BIO_write(bout, buff, > (int)strlen((char*)buff)) ) <=0 ){ > ret = ERR_get_error(); > break; > } > > }while(1); > > free(buff); > BIO_flush(bout); > BIO_free_all(cipher); > > return ret; > } > > > > > ----- End forwarded message ----- > -- > Lutz Jaenicke jaeni...@openssl.org > OpenSSL Project http://www.openssl.org/~jaenicke/ > ______________________________________________________________________ > OpenSSL Project http://www.openssl.org > User Support Mailing List openssl-users@openssl.org > Automated List Manager majord...@openssl.org >