void do_fp(TINYCLR_SSL_FILE *f) { SHA_CTX c; unsigned char md[SHA_DIGEST_LENGTH]; int fd; int i; unsigned char buf[BUFSIZE]; fd=TINYCLR_SSL_FILENO(f); SHA_Init(&c); for (;;) { i=read(fd,buf,BUFSIZE); if (i <= 0) break; SHA_Update(&c,buf,(unsigned long)i); } SHA_Final(&(md[0]),&c); pt(md); }
int main(int argc, char *argv[]) { TINYCLR_SSL_FILE *in=NULL,*out=NULL; char *infile=NULL,*outfile=NULL,*keystr=NULL; RC4_KEY key; char buf[BUFSIZ]; int badops=0,i; char **pp; unsigned char md[MD5_DIGEST_LENGTH]; argc--; argv++; while (argc >= 1) { if (TINYCLR_SSL_STRCMP(*argv,"-in") == 0) { if (--argc < 1) goto bad; infile= *(++argv); } else if (TINYCLR_SSL_STRCMP(*argv,"-out") == 0) { if (--argc < 1) goto bad; outfile= *(++argv); } else if (TINYCLR_SSL_STRCMP(*argv,"-key") == 0) { if (--argc < 1) goto bad; keystr= *(++argv); } else { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"unknown option %s\n",*argv); badops=1; break; } argc--; argv++; } if (badops) { bad: for (pp=usage; (*pp != NULL); pp++) TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s",*pp); TINYCLR_SSL_EXIT(1); } if (infile == NULL) in=OPENSSL_TYPE__FILE_STDIN; else { in=TINYCLR_SSL_FOPEN(infile,"r"); if (in == NULL) { TINYCLR_SSL_PERROR("open"); TINYCLR_SSL_EXIT(1); } } if (outfile == NULL) out=OPENSSL_TYPE__FILE_STDOUT; else { out=TINYCLR_SSL_FOPEN(outfile,"w"); if (out == NULL) { TINYCLR_SSL_PERROR("open"); TINYCLR_SSL_EXIT(1); } } #ifdef OPENSSL_SYS_MSDOS /* This should set the file to binary mode. */ { #include <fcntl.h> setmode(TINYCLR_SSL_FILENO(in),O_BINARY); setmode(TINYCLR_SSL_FILENO(out),O_BINARY); } #endif if (keystr == NULL) { /* get key */ i=EVP_read_pw_string(buf,BUFSIZ,"Enter RC4 password:"******"bad password read\n"); TINYCLR_SSL_EXIT(1); } keystr=buf; } EVP_Digest((unsigned char *)keystr,TINYCLR_SSL_STRLEN(keystr),md,NULL,EVP_md5(),NULL); OPENSSL_cleanse(keystr,TINYCLR_SSL_STRLEN(keystr)); RC4_set_key(&key,MD5_DIGEST_LENGTH,md); for(;;) { i=TINYCLR_SSL_FREAD(buf,1,BUFSIZ,in); if (i == 0) break; if (i < 0) { TINYCLR_SSL_PERROR("read"); TINYCLR_SSL_EXIT(1); } RC4(&key,(unsigned int)i,(unsigned char *)buf, (unsigned char *)buf); i=TINYCLR_SSL_FWRITE(buf,(unsigned int)i,1,out); if (i != 1) { TINYCLR_SSL_PERROR("write"); TINYCLR_SSL_EXIT(1); } } TINYCLR_SSL_FCLOSE(out); TINYCLR_SSL_FCLOSE(in); TINYCLR_SSL_EXIT(0); return(1); }
int main(int argc,char **argv) { int c,i; int verbose=0; int errors=0; int open_mode = O_RDONLY; gost_subst_block *b= &GostR3411_94_CryptoProParamSet; TINYCLR_SSL_FILE *check_file = NULL; gost_hash_ctx ctx; while( (c=getopt(argc,argv,"bc::tv"))!=-1) { switch (c) { case 'v': verbose=1; break; case 't': b= &GostR3411_94_TestParamSet; break; case 'b': open_mode |= O_BINARY; break; case 'c': if (optarg) { check_file = TINYCLR_SSL_FOPEN(optarg,"r"); if (!check_file) { TINYCLR_SSL_PERROR(optarg); TINYCLR_SSL_EXIT(2); } } else { check_file= OPENSSL_TYPE__FILE_STDIN; } break; default: TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"invalid option %c",optopt); help(); } } init_gost_hash_ctx(&ctx,b); if (check_file) { char inhash[65],calcsum[65],filename[PATH_MAX]; int failcount=0,count=0;; if (check_file==OPENSSL_TYPE__FILE_STDIN && optind<argc) { check_file=TINYCLR_SSL_FOPEN(argv[optind],"r"); if (!check_file) { TINYCLR_SSL_PERROR(argv[optind]); TINYCLR_SSL_EXIT(2); } } while (get_line(check_file,inhash,filename)) { if (!hash_file(&ctx,filename,calcsum,open_mode)) { TINYCLR_SSL_EXIT (2); } count++; if (!TINYCLR_SSL_STRNCMP(calcsum,inhash,65)) { if (verbose) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s\tOK\n",filename); } } else { if (verbose) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s\tFAILED\n",filename); } else { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s: GOST hash sum check failed for '%s'\n", argv[0],filename); } failcount++; } } if (verbose && failcount) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s: %d of %d file(f) failed GOST hash sum check\n", argv[0],failcount,count); } TINYCLR_SSL_EXIT (failcount?1:0); } if (optind==argc) { char sum[65]; if (!hash_stream(&ctx,TINYCLR_SSL_FILENO(OPENSSL_TYPE__FILE_STDIN),sum)) { TINYCLR_SSL_PERROR("OPENSSL_TYPE__FILE_STDIN"); TINYCLR_SSL_EXIT(1); } TINYCLR_SSL_PRINTF("%s -\n",sum); TINYCLR_SSL_EXIT(0); } for (i=optind;i<argc;i++) { char sum[65]; if (!hash_file(&ctx,argv[i],sum,open_mode)) { errors++; } else { TINYCLR_SSL_PRINTF("%s %s\n",sum,argv[i]); } } TINYCLR_SSL_EXIT(errors?1:0); }