63 lines
		
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								#include <string.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "sha2.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BUF_SIZE	16384
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int main(int argc, char *argv[])
							 | 
						||
| 
								 | 
							
								{	FILE			*inf;
							 | 
						||
| 
								 | 
							
									sha256_ctx		ctx[1];
							 | 
						||
| 
								 | 
							
									unsigned char	buf[BUF_SIZE], hval[SHA256_DIGEST_SIZE];
							 | 
						||
| 
								 | 
							
									int				i, len, is_console;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if(argc != 2)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										printf("\nusage: shasum filename\n");
							 | 
						||
| 
								 | 
							
										exit(0);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if(is_console = (!strcmp(argv[1], "con") || !strcmp(argv[1], "CON")))
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if(!(inf = fopen(argv[1], "r")))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											printf("\n%s not found\n", argv[1]);
							 | 
						||
| 
								 | 
							
											exit(0);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else if(!(inf = fopen(argv[1], "rb")))
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										printf("\n%s not found\n", argv[1]);
							 | 
						||
| 
								 | 
							
										exit(0);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									sha256_begin(ctx);
							 | 
						||
| 
								 | 
							
									do
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										len = (int)fread(buf, 1, BUF_SIZE, inf);
							 | 
						||
| 
								 | 
							
										i = len;
							 | 
						||
| 
								 | 
							
										if(is_console)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											i = 0;
							 | 
						||
| 
								 | 
							
											while(i < len && buf[i] != '\x1a')
							 | 
						||
| 
								 | 
							
												++i;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										if(i)
							 | 
						||
| 
								 | 
							
											sha256_hash(buf, i, ctx);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									while
							 | 
						||
| 
								 | 
							
										(len && i == len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fclose(inf);
							 | 
						||
| 
								 | 
							
									sha256_end(hval, ctx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									printf("\n");
							 | 
						||
| 
								 | 
							
									for(i = 0; i < SHA256_DIGEST_SIZE; ++i)
							 | 
						||
| 
								 | 
							
										printf("%02x", hval[i]);
							 | 
						||
| 
								 | 
							
									printf("\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return 0;
							 | 
						||
| 
								 | 
							
								}
							 |