本文整理汇总了C++中MD5Update函数的典型用法代码示例。如果您正苦于以下问题:C++ MD5Update函数的具体用法?C++ MD5Update怎么用?C++ MD5Update使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MD5Update函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HPAK_Validate_f
//.........这里部分代码省略.........
COM_DefaultExtension(name, HASHPAK_EXTENSION);
Con_Printf("Validating %s.\n", name);
fp = FS_Open(name, "rb");
if (!fp)
{
Con_Printf("ERROR: couldn't open %s.\n", name);
return;
}
FS_Read(&header, sizeof(hash_pack_header_t), 1, fp);
if (Q_strncmp(header.szFileStamp, "HPAK", sizeof(header.szFileStamp)))
{
Con_Printf("%s is not an HPAK file\n", name);
FS_Close(fp);
return;
}
if (header.version != HASHPAK_VERSION)
{
Con_Printf("hpkval: version mismatch\n");
FS_Close(fp);
return;
}
FS_Seek(fp, header.nDirectoryOffset, FILESYSTEM_SEEK_HEAD);
FS_Read(&directory.nEntries, 4, 1, fp);
if (directory.nEntries < 1 || (unsigned int)directory.nEntries > MAX_FILE_ENTRIES)
{
Con_Printf("ERROR: HPAK had bogus # of directory entries: %i\n", directory.nEntries);
FS_Close(fp);
return;
}
Con_Printf("# of Entries: %i\n", directory.nEntries);
Con_Printf("# Type Size FileName : MD5 Hash\n");
directory.p_rgEntries = (hash_pack_entry_t *)Mem_Malloc(sizeof(hash_pack_entry_t) * directory.nEntries);
FS_Read(directory.p_rgEntries, sizeof(hash_pack_entry_t) * directory.nEntries, 1, fp);
for (int nCurrent = 0; nCurrent < directory.nEntries; nCurrent++)
{
entry = &directory.p_rgEntries[nCurrent];
COM_FileBase(entry->resource.szFileName, szFileName);
switch (entry->resource.type)
{
case t_sound:
Q_strcpy(type, "sound");
break;
case t_skin:
Q_strcpy(type, "skin");
break;
case t_model:
Q_strcpy(type, "model");
break;
case t_decal:
Q_strcpy(type, "decal");
break;
case t_generic:
Q_strcpy(type, "generic");
break;
case t_eventscript:
Q_strcpy(type, "event");
break;
default:
Q_strcpy(type, "?");
break;
}
Con_Printf("%i: %10s %.2fK %s: ", nCurrent + 1, type, entry->resource.nDownloadSize / 1024.0f, szFileName);
nDataSize = entry->nFileLength;
if (nDataSize < 1 || (unsigned int)nDataSize >= MAX_FILE_SIZE)
Con_Printf("Unable to MD5 hash data, size invalid: %i\n", nDataSize);
else
{
pData = (byte *)Mem_Malloc(nDataSize + 1);
Q_memset(pData, 0, nDataSize);
FS_Seek(fp, entry->nOffset, FILESYSTEM_SEEK_HEAD);
FS_Read(pData, nDataSize, 1, fp);
Q_memset(&ctx, 0, sizeof(MD5Context_t));
MD5Init(&ctx);
MD5Update(&ctx, pData, nDataSize);
MD5Final(md5, &ctx);
if (Q_memcmp(entry->resource.rgucMD5_hash, md5, sizeof(md5)) == 0)
Con_Printf(" OK\n");
else
{
Con_Printf(" MISMATCHED\n");
Con_Printf("--------------------\n");
Con_Printf(" File : %s\n", MD5_Print(entry->resource.rgucMD5_hash));
Con_Printf(" Actual: %s\n", MD5_Print(md5));
Con_Printf("--------------------\n");
}
if (pData)
Mem_Free(pData);
}
}
FS_Close(fp);
Mem_Free(directory.p_rgEntries);
}
示例2: CheckIsFileHashSecure
/**
* 先检测黑名单,如果在黑名单内,直接拒,否则放行。
如果不在黑名单,则检查白名单,在白名单内,无操作。
如果不在白名单内,则将文件全路径及hash值传递到上层
* @param filename 文件全路径。
* return 如果文件安全则返回true,否则返回false。
*/
bool CheckIsFileHashSecure(const PUNICODE_STRING filename)
{
/////////////////////////////////////////////比较已经过滤的文件名
if(IsInBlackCache(filename) == true)
return false;
if( MODULE_FILTERED == GetModuleFilter((ULONG)PsGetCurrentProcessId(),filename) )
return true;
///////////////////////////////////////
HANDLE hFile;
OBJECT_ATTRIBUTES oaFile;
InitializeObjectAttributes(&oaFile, filename, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
// 读权限打开文件,如果失败则认为文件不安全,返回false。
IO_STATUS_BLOCK ioStatus;
NTSTATUS status = ZwOpenFile(&hFile, GENERIC_READ, &oaFile, &ioStatus, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);
if(!NT_SUCCESS(status))
{
KdPrint(("VerifyModule: ZwOpenFile: %ws %08x\n", filename->Buffer, status));
return false;
}
unsigned char* fileBuf = (unsigned char*)ExAllocatePoolWithTag(PagedPool, FILE_BUFFER_SIZE, 'knab');
if(fileBuf == NULL)
{
ZwClose(hFile);
return false;
}
// 获取文件hash。
MD5_CTX md5;
MD5Init(&md5);
ULONG sizeAll=0;
FILE_STANDARD_INFORMATION fsi;
ZwQueryInformationFile(hFile,&ioStatus,&fsi,sizeof(FILE_STANDARD_INFORMATION),FileStandardInformation);
while(1)
{
NTSTATUS status = ZwReadFile(hFile, NULL, NULL, NULL, &ioStatus, fileBuf,
FILE_BUFFER_SIZE, NULL, NULL);
if(!NT_SUCCESS(status))
break;
if(ioStatus.Information == 0)
break;
sizeAll += ioStatus.Information;
MD5Update(&md5, fileBuf, ioStatus.Information);
}
ExFreePoolWithTag(fileBuf, 'knab');
unsigned char final[16];
MD5Final(final, &md5);
ZwClose(hFile);
//黑白名单校验
// bool bOK = IsHashBlack(final);
//
// if( bOK )
// {
// if(!IsInBlackCache(filename))
// {
// WriteSysLog(LOG_TYPE_DEBUG,L" Fileter Module :%s", filename->Buffer);
// AddBlackCache(filename);
// }
// return false;
// }
// else if( !IsHashSecure(final) )//传递到上层
// {
// if( setData(filename->Buffer,filename->Length,final,16) )
// setSigned();
// }
bool bOK = IsHashBlack(final);
bool bReturn = true;
if( bOK )
{
if(!IsInBlackCache(filename))
{
WriteSysLog(LOG_TYPE_INFO,L" Fileter Module :%s", filename->Buffer);
AddBlackCache(filename);
}
bReturn = false;
}
else if( !IsHashSecure(final) )//传递到上层
{
if( !IsInstall() )
{
if( setData(filename->Buffer,filename->Length,final,16) )
setSigned();
//.........这里部分代码省略.........
示例3: read_file
int read_file(char* file_name)
{
puts("--------------------read file");
int i;
int fname_len = 0;
int fdata_len = 0;
int cur_len = 0;
int tmp_len = 0;
char rec_buf[1024] = {0};
char tmp_buf[4096] = {0};
char file_md5[32] = {0};
int send_len = 0;
char send_buf[4096] = {0};
MD5_CTX mdContext;
MD5Init (&mdContext);
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
{
printf("File:\t%s Can Not Open To Write!\n", file_name);
return -1;
}
printf("%s\n", file_name);
while ((tmp_len = fread(rec_buf, sizeof(char), BUFFER_SIZE, fp)) > 0)
{
printf("tmplen:%d\n", tmp_len);
strncpy(tmp_buf+cur_len, rec_buf, tmp_len);
//printf("==================================\n");
//printf("tmpbuf in clrcle is:\n");
//printf("%s\n", tmp_buf);
//printf("==================================\n");
cur_len = cur_len + tmp_len;
//bzero(rec_buf, sizeof(rec_buf));
}
fname_len = strlen(file_name);
fdata_len = strlen(tmp_buf);
printf("fdata_len is:%d\n", fdata_len);
MD5Update (&mdContext, tmp_buf, fdata_len);
MD5Final (&mdContext);
send_len = sizeof(send_len) + sizeof(fname_len) + fname_len + sizeof(fdata_len) + fdata_len + 32;
memcpy(send_buf , &send_len, sizeof(int));
memcpy(send_buf + sizeof(int), &fname_len, sizeof(int));
memcpy(send_buf + 2*sizeof(int), file_name, fname_len);
memcpy(send_buf + 2*sizeof(int) + fname_len, &fdata_len, sizeof(int));
memcpy(send_buf + 3*sizeof(int) + fname_len, tmp_buf, fdata_len);
for(i=0; i<16; i++)
{
sprintf(&file_md5[i*2], "%02x", mdContext.digest[i]);
}
printf("send md5 is:%s\n", file_md5);
memcpy(send_buf + 3*sizeof(int) + fname_len + fdata_len, file_md5, 32);
printf("==================================\n");
printf("disbuf:\n");
t_disbuf(send_buf, send_len + 4);
printf("==================================\n");
if (send_data(send_buf, send_len) < 0)
{
printf("senddata failed\n");
return -1;
}
fclose(fp);
}
示例4: chap_BuildAnswer_old
static char *
chap_BuildAnswer_old(char *name, char *key, u_char id, char *challenge, u_char type
#ifdef HAVE_DES
, int lanman
#endif
)
{
char *result;
#ifndef __GNU__
char *digest;
#endif /* __GNU__ */
size_t nlen, klen;
nlen = strlen(name);
klen = strlen(key);
#ifdef HAVE_DES
if (type == 0x80) {
char expkey[AUTHLEN << 2];
MD4_CTX MD4context;
int f;
if ((result = malloc(1 + nlen + MS_CHAP_RESPONSE_LEN)) == NULL)
return result;
digest = result; /* the response */
*digest++ = MS_CHAP_RESPONSE_LEN; /* 49 */
memcpy(digest + MS_CHAP_RESPONSE_LEN, name, nlen);
if (lanman) {
memset(digest + 24, '\0', 25);
mschap_LANMan(digest, challenge + 1, key); /* LANMan response */
} else {
memset(digest, '\0', 25);
digest += 24;
for (f = 0; f < klen; f++) {
expkey[2*f] = key[f];
expkey[2*f+1] = '\0';
}
/*
* -----------
* expkey = | k\0e\0y\0 |
* -----------
*/
MD4Init(&MD4context);
MD4Update(&MD4context, expkey, klen << 1);
MD4Final(digest, &MD4context);
/*
* ---- -------- ---------------- ------- ------
* result = | 49 | LANMan | 16 byte digest | 9 * ? | name |
* ---- -------- ---------------- ------- ------
*/
mschap_NT(digest, challenge + 1);
}
/*
* ---- -------- ------------- ----- ------
* | | struct MS_ChapResponse24 | |
* result = | 49 | LANMan | NT digest | 0/1 | name |
* ---- -------- ------------- ----- ------
* where only one of LANMan & NT digest are set.
*/
} else
#endif
if ((result = malloc(nlen + 17)) != NULL) {
/* Normal MD5 stuff */
#ifdef __GNU__
_exit (240); /* Critical */
#else
MD5_CTX MD5context;
digest = result;
*digest++ = 16; /* value size */
MD5Init(&MD5context);
MD5Update(&MD5context, &id, 1);
MD5Update(&MD5context, key, klen);
MD5Update(&MD5context, challenge + 1, *challenge);
MD5Final(digest, &MD5context);
memcpy(digest + 16, name, nlen);
/*
* ---- -------- ------
* result = | 16 | digest | name |
* ---- -------- ------
*/
#endif
}
return result;
}
开发者ID:fly2436732935,项目名称:android_kernel_honor7_PLK-AL10_PLK-TL01H_PLK-UL00_PLK-CL00_PLK-TL00,代码行数:91,代码来源:chap.c
示例5: saversakey
/*
* Save an RSA key file. Return nonzero on success.
*/
int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase)
{
unsigned char buf[16384];
unsigned char keybuf[16];
struct MD5Context md5c;
unsigned char *p, *estart;
FILE *fp;
/*
* Write the initial signature.
*/
p = buf;
memcpy(p, rsa_signature, sizeof(rsa_signature));
p += sizeof(rsa_signature);
/*
* One byte giving encryption type, and one reserved (zero)
* uint32.
*/
*p++ = (passphrase ? SSH_CIPHER_3DES : 0);
PUT_32BIT(p, 0);
p += 4;
/*
* An ordinary SSH-1 public key consists of: a uint32
* containing the bit count, then two bignums containing the
* modulus and exponent respectively.
*/
PUT_32BIT(p, bignum_bitcount(key->modulus));
p += 4;
p += ssh1_write_bignum(p, key->modulus);
p += ssh1_write_bignum(p, key->exponent);
/*
* A string containing the comment field.
*/
if (key->comment) {
PUT_32BIT(p, strlen(key->comment));
p += 4;
memcpy(p, key->comment, strlen(key->comment));
p += strlen(key->comment);
} else {
PUT_32BIT(p, 0);
p += 4;
}
/*
* The encrypted portion starts here.
*/
estart = p;
/*
* Two bytes, then the same two bytes repeated.
*/
*p++ = random_byte();
*p++ = random_byte();
p[0] = p[-2];
p[1] = p[-1];
p += 2;
/*
* Four more bignums: the decryption exponent, then iqmp, then
* q, then p.
*/
p += ssh1_write_bignum(p, key->private_exponent);
p += ssh1_write_bignum(p, key->iqmp);
p += ssh1_write_bignum(p, key->q);
p += ssh1_write_bignum(p, key->p);
/*
* Now write zeros until the encrypted portion is a multiple of
* 8 bytes.
*/
while ((p - estart) % 8)
*p++ = '\0';
/*
* Now encrypt the encrypted portion.
*/
if (passphrase) {
MD5Init(&md5c);
MD5Update(&md5c, (unsigned char *)passphrase, strlen(passphrase));
MD5Final(keybuf, &md5c);
des3_encrypt_pubkey(keybuf, estart, p - estart);
smemclr(keybuf, sizeof(keybuf)); /* burn the evidence */
}
/*
* Done. Write the result to the file.
*/
fp = f_open(filename, "wb", TRUE);
if (fp) {
int ret = (fwrite(buf, 1, p - buf, fp) == (size_t) (p - buf));
if (fclose(fp))
ret = 0;
return ret;
} else
//.........这里部分代码省略.........
示例6: g_mbr_modify
/*
* XXX: Add gctl_req arg and give good error msgs.
* XXX: Check that length argument does not bring boot code inside any slice.
*/
static int
g_mbr_modify(struct g_geom *gp, struct g_mbr_softc *ms, u_char *sec0, int len __unused)
{
int i, error;
off_t l[NDOSPART];
struct dos_partition ndp[NDOSPART], *dp;
MD5_CTX md5sum;
g_topology_assert();
if (sec0[0x1fe] != 0x55 && sec0[0x1ff] != 0xaa)
return (EBUSY);
dp = ndp;
for (i = 0; i < NDOSPART; i++) {
dos_partition_dec(
sec0 + DOSPARTOFF + i * sizeof(struct dos_partition),
dp + i);
}
if ((!bcmp(dp, historical_bogus_partition_table,
sizeof historical_bogus_partition_table)) ||
(!bcmp(dp, historical_bogus_partition_table_fixed,
sizeof historical_bogus_partition_table_fixed))) {
/*
* We will not allow people to write these from "the inside",
* Since properly selfdestructing takes too much code. If
* people really want to do this, they cannot have any
* providers of this geom open, and in that case they can just
* as easily overwrite the MBR in the parent device.
*/
return(EBUSY);
}
for (i = 0; i < NDOSPART; i++) {
/*
* A Protective MBR (PMBR) has a single partition of
* type 0xEE spanning the whole disk. Such a MBR
* protects a GPT on the disk from MBR tools that
* don't know anything about GPT. We're interpreting
* it a bit more loosely: any partition of type 0xEE
* is to be skipped as it doesn't contain any data
* that we should care about. We still allow other
* partitions to be present in the MBR. A PMBR will
* be handled correctly anyway.
*/
if (dp[i].dp_typ == DOSPTYP_PMBR)
l[i] = 0;
else if (dp[i].dp_flag != 0 && dp[i].dp_flag != 0x80)
l[i] = 0;
else if (dp[i].dp_typ == 0)
l[i] = 0;
else
l[i] = (off_t)dp[i].dp_size * ms->sectorsize;
error = g_slice_config(gp, i, G_SLICE_CONFIG_CHECK,
(off_t)dp[i].dp_start * ms->sectorsize, l[i],
ms->sectorsize, "%ss%d", gp->name, 1 + i);
if (error)
return (error);
}
for (i = 0; i < NDOSPART; i++) {
ms->type[i] = dp[i].dp_typ;
g_slice_config(gp, i, G_SLICE_CONFIG_SET,
(off_t)dp[i].dp_start * ms->sectorsize, l[i],
ms->sectorsize, "%ss%d", gp->name, 1 + i);
}
bcopy(sec0, ms->sec0, 512);
/*
* Calculate MD5 from the first sector and use it for avoiding
* recursive slices creation.
*/
MD5Init(&md5sum);
MD5Update(&md5sum, ms->sec0, sizeof(ms->sec0));
MD5Final(ms->slicesum, &md5sum);
return (0);
}
示例7: main
//.........这里部分代码省略.........
else current=argv[i];
if (current[0]==0) continue;
if (current[0]=='-' && !input_from_file) continue;
if (setjmp(jerr.setjmp_buffer)) {
jpeg_abort_decompress(&cinfo);
fclose(infile);
if (list_mode && quiet_mode < 2) printf(" %s",current);
if (quiet_mode < 2) printf(" [ERROR]\n");
if (delete_mode) delete_file(current,verbose_mode,quiet_mode);
continue;
}
if ((infile=fopen(current,"r"))==NULL) {
if (!quiet_mode) fprintf(stderr, "jpeginfo: can't open '%s'\n", current);
continue;
}
if (is_dir(infile)) {
fclose(infile);
if (verbose_mode) printf("directory: %s skipped\n",current);
continue;
}
fs=filesize(infile);
if (md5_mode) {
md5buf=malloc(fs);
if (!md5buf) no_memory();
fread(md5buf,1,fs,infile);
rewind(infile);
MD5Init(MD5);
MD5Update(MD5,md5buf,fs);
MD5Final(digest,MD5);
md2str(digest,digest_text);
free(md5buf);
}
if (!list_mode && quiet_mode < 2) printf("%s ",current);
global_error_counter=0;
err_count=jerr.pub.num_warnings;
if (com_mode) jpeg_save_markers(&cinfo, JPEG_COM, 0xffff);
jpeg_save_markers(&cinfo, EXIF_JPEG_MARKER, 0xffff);
jpeg_stdio_src(&cinfo, infile);
jpeg_read_header(&cinfo, TRUE);
/* check for Exif marker */
exif_marker=NULL;
cmarker=cinfo.marker_list;
while (cmarker) {
if (cmarker->marker == EXIF_JPEG_MARKER) {
if (!memcmp(cmarker->data,EXIF_IDENT_STRING,6)) exif_marker=cmarker;
}
cmarker=cmarker->next;
}
if (quiet_mode < 2) {
printf("%4d x %-4d %2dbit ",(int)cinfo.image_width,
(int)cinfo.image_height,(int)cinfo.num_components*8);
if (exif_marker) printf("Exif ");
else if (cinfo.saw_JFIF_marker) printf("JFIF ");
else if (cinfo.saw_Adobe_marker) printf("Adobe ");
示例8: main
int main (int argc, char *argv[])
{
unsigned int i;
unsigned int n = 0;
unsigned int size = 0;
struct MD5Context md5c;
unsigned char digest[16];
uint32_t bit32sum = 0;
uint32_t * pointer_to_buf = (uint32_t *)buf;
if (parse_args (argc, argv))
if (!opt_quiet)
usage();
/* Initialize MD5 module: */
MD5Init(&md5c);
/* Open input and output files: ******************************/
if (opt_stdin)
infile = stdin;
else
infile = fopen (opt_filename, "r");
if (infile == NULL) {
fprintf (stderr, "FATAL: could not open %s\n", opt_filename);
exit(1);
}
if (!opt_quiet) {
fprintf (stderr, "uCimage file: \"%s\"\n",
opt_filename);
}
/* Read various header data: ***************************/
/* Read header and image file to output, compute MD5: ******/
/* read header: */
fread (&header, sizeof(header), 1, infile);
/* Check magic in header */
for (i=0;i<sizeof(header.magic);i++) {
if (header.magic[i] != UCHEADER_MAGIC[i]) {
fprintf (stderr, "Header magic not: \"%s\" instead: \"%s\"\n",
UCHEADER_MAGIC, header.magic);
/* optionally abort? */
break;
}
}
/**** to do: largely respond to header version in the interpretation! ***/
/* read header size */
DBG ("header_size reported as: %10d\n", header.header_size);
/* image size: */
fprintf (stdout, "data_size reported as: %10d\n", header.data_size);
/* image size: */
fprintf (stdout, "partition reported as: %c\n", header.partition);
/* header date code */
fprintf (stdout, "date code reported as: \"%s\"\n", header.datecode);
/* header name */
fprintf (stdout, "name reported as: \"%s\"\n", header.name);
/* MD5: */
fprintf (stdout, "MD5 digest reported as: ");
for (i=0;i<16;i++)
fprintf (stdout, "%02x", header.md5sum[i]);
fprintf (stdout, "\n");
/* 32Bit checksum: */
fprintf (stdout, "32 bit checksum reported as:0x%8x\n", header.bit32sum);
/* read image and do MD5: */
while (!feof(infile)) {
n = fread (buf, 1, BUFFERSIZE, infile);
size += n;
MD5Update (&md5c, buf, n);
/* 32 bit checksum */
pointer_to_buf = (uint32_t *)buf;
while ( (char *)pointer_to_buf - buf < n ) {
bit32sum += htonl(*pointer_to_buf);
pointer_to_buf++;
}
}
/* save MD5: */
MD5Final (digest, &md5c);
if (!opt_stdin)
fclose (infile);
/* Verify: */
for (i=0;i<16;i++) {
if (header.md5sum[i] != digest[i]) {
fprintf (stdout, "ERROR: MD5 digest mismatch\n");
fprintf (stdout, "MD5 digest calculated as: ");
//.........这里部分代码省略.........
示例9: main_loop
//.........这里部分代码省略.........
if (!display_width || !display_height) {
int display_size[2];
if (vpx_codec_control(&decoder, VP9D_GET_DISPLAY_SIZE,
display_size)) {
// As last resort use size of first frame as display size.
display_width = img->d_w;
display_height = img->d_h;
} else {
display_width = display_size[0];
display_height = display_size[1];
}
}
scaled_img = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, display_width,
display_height, 16);
}
if (img->d_w != scaled_img->d_w || img->d_h != scaled_img->d_h) {
vpx_image_scale(img, scaled_img, kFilterBox);
img = scaled_img;
}
}
if (single_file) {
if (use_y4m) {
char buf[Y4M_BUFFER_SIZE] = {0};
size_t len = 0;
if (frame_out == 1) {
// Y4M file header
len = y4m_write_file_header(buf, sizeof(buf),
vpx_input_ctx.width,
vpx_input_ctx.height,
&vpx_input_ctx.framerate, img->fmt);
if (do_md5) {
MD5Update(&md5_ctx, (md5byte *)buf, (unsigned int)len);
} else {
fputs(buf, outfile);
}
}
// Y4M frame header
len = y4m_write_frame_header(buf, sizeof(buf));
if (do_md5) {
MD5Update(&md5_ctx, (md5byte *)buf, (unsigned int)len);
} else {
fputs(buf, outfile);
}
}
if (do_md5) {
update_image_md5(img, planes, &md5_ctx);
} else {
write_image_file(img, planes, outfile);
}
} else {
generate_filename(outfile_pattern, outfile_name, PATH_MAX,
img->d_w, img->d_h, frame_in);
if (do_md5) {
MD5Init(&md5_ctx);
update_image_md5(img, planes, &md5_ctx);
MD5Final(md5_digest, &md5_ctx);
print_md5(md5_digest, outfile_name);
} else {
outfile = open_outfile(outfile_name);
write_image_file(img, planes, outfile);
fclose(outfile);
}
示例10: cfg_auth_login
bool cfg_auth_login(struct cfg_state *cmd, char *args)
{
unsigned char secret[20] = "TheTalamasca", c, challenge[16];
unsigned int i,r;
struct MD5Context md5;
int fields = countfields(args);
/* Require a username */
if (fields != 1 ||
!copyfield(args, 1, cmd->user, sizeof(cmd->user)))
{
sock_printf(cmd->sock, "400 The command is: login <username>\n");
return false;
}
/*
* Check that the username is in lower case
* and contains only ascii
*/
for (i=0; i < strlen(cmd->user); i++)
{
if ( cmd->user[i] < 'a' ||
cmd->user[i] > 'z')
{
sock_printf(cmd->sock, "400 Username contains unacceptable characters\n");
return false;
}
}
/* Clear out the secret */
memset(secret, 0, sizeof(secret));
/* Randomize the string */
for (i=0; i < (sizeof(secret)-1); i++)
{
/* Pick random number between 1 and 62 */
r = (random() % 63) + 1;
/* [ 1,10] => [0,9] */
if (r < 11) c = (r+48-1);
/* [11,36] => [A,Z] */
else if (r < 37) c = (r+65-10);
/* [37,62] => [a,z] */
else c = (r+97-36);
/* Randomize */
secret[i] = c;
}
/* Generate a MD5 */
MD5Init(&md5);
MD5Update(&md5, (const unsigned char *)&secret, (unsigned int)strlen((const char *)&secret));
MD5Final(challenge, &md5);
memset(&cmd->challenge, 0, sizeof(cmd->challenge));
/* Generate the Digest */
for (i = 0; i < sizeof(challenge); i++)
{
snprintf(&cmd->challenge[i*2], 3, "%02x", challenge[i]);
}
/* Return the challenge to the client */
sock_printf(cmd->sock, "200 %s\n", cmd->challenge);
/* Upgrade the level */
cmd->level = LEVEL_LOGIN;
return true;
}
示例11: eap_sm_parseEapReq
static void eap_sm_parseEapReq(struct eap_sm *sm, u8 *req, size_t len)
{
struct eap_hdr *hdr;
size_t plen;
MD5_CTX context;
sm->rxReq = sm->rxSuccess = sm->rxFailure = FALSE;
sm->reqId = 0;
sm->reqMethod = EAP_TYPE_NONE;
if (req == NULL || len < sizeof(*hdr))
return;
hdr = (struct eap_hdr *) req;
plen = be_to_host16(hdr->length);
if (plen > len) {
wpa_printf(MSG_DEBUG, "EAP: Ignored truncated EAP-Packet "
"(len=%lu plen=%lu)",
(unsigned long) len, (unsigned long) plen);
return;
}
sm->reqId = hdr->identifier;
if (sm->workaround) {
MD5Init(&context);
MD5Update(&context, req, len);
MD5Final(sm->req_md5, &context);
}
switch (hdr->code) {
case EAP_CODE_REQUEST:
sm->rxReq = TRUE;
if (plen > sizeof(*hdr))
sm->reqMethod = *((u8 *) (hdr + 1));
wpa_printf(MSG_DEBUG, "EAP: Received EAP-Request method=%d "
"id=%d", sm->reqMethod, sm->reqId);
break;
case EAP_CODE_RESPONSE:
if (sm->selectedMethod == EAP_TYPE_LEAP) {
sm->rxResp = TRUE;
if (plen > sizeof(*hdr))
sm->reqMethod = *((u8 *) (hdr + 1));
wpa_printf(MSG_DEBUG, "EAP: Received EAP-Response for "
"LEAP method=%d id=%d",
sm->reqMethod, sm->reqId);
break;
}
wpa_printf(MSG_DEBUG, "EAP: Ignored EAP-Response");
break;
case EAP_CODE_SUCCESS:
wpa_printf(MSG_DEBUG, "EAP: Received EAP-Success");
sm->rxSuccess = TRUE;
break;
case EAP_CODE_FAILURE:
wpa_printf(MSG_DEBUG, "EAP: Received EAP-Failure");
sm->rxFailure = TRUE;
break;
default:
wpa_printf(MSG_DEBUG, "EAP: Ignored EAP-Packet with unknown "
"code %d", hdr->code);
break;
}
}
示例12: profile_setup
/*******************************************************************
open the profiling shared memory area
******************************************************************/
bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
{
unsigned char tmp[16] = {};
MD5_CTX md5;
char *db_name;
if (smbprofile_state.internal.db != NULL) {
return true;
}
db_name = cache_path("smbprofile.tdb");
if (db_name == NULL) {
return false;
}
smbprofile_state.internal.db = tdb_wrap_open(
NULL, db_name, 0,
rdonly ? 0 : TDB_CLEAR_IF_FIRST|TDB_MUTEX_LOCKING,
O_CREAT | (rdonly ? O_RDONLY : O_RDWR), 0644);
if (smbprofile_state.internal.db == NULL) {
return false;
}
if (msg_ctx != NULL) {
messaging_register(msg_ctx, NULL, MSG_PROFILE,
profile_message);
messaging_register(msg_ctx, NULL, MSG_REQ_PROFILELEVEL,
reqprofile_message);
}
MD5Init(&md5);
MD5Update(&md5,
(const uint8_t *)&smbprofile_state.stats.global,
sizeof(smbprofile_state.stats.global));
#define __UPDATE(str) do { \
MD5Update(&md5, (const uint8_t *)str, strlen(str)); \
} while(0)
#define SMBPROFILE_STATS_START
#define SMBPROFILE_STATS_SECTION_START(name, display) do { \
__UPDATE(#name "+" #display); \
} while(0);
#define SMBPROFILE_STATS_COUNT(name) do { \
__UPDATE(#name "+count"); \
} while(0);
#define SMBPROFILE_STATS_TIME(name) do { \
__UPDATE(#name "+time"); \
} while(0);
#define SMBPROFILE_STATS_BASIC(name) do { \
__UPDATE(#name "+count"); \
__UPDATE(#name "+time"); \
} while(0);
#define SMBPROFILE_STATS_BYTES(name) do { \
__UPDATE(#name "+count"); \
__UPDATE(#name "+time"); \
__UPDATE(#name "+idle"); \
__UPDATE(#name "+bytes"); \
} while(0);
#define SMBPROFILE_STATS_IOBYTES(name) do { \
__UPDATE(#name "+count"); \
__UPDATE(#name "+time"); \
__UPDATE(#name "+idle"); \
__UPDATE(#name "+inbytes"); \
__UPDATE(#name "+outbytes"); \
} while(0);
#define SMBPROFILE_STATS_SECTION_END
#define SMBPROFILE_STATS_END
SMBPROFILE_STATS_ALL_SECTIONS
#undef __UPDATE
#undef SMBPROFILE_STATS_START
#undef SMBPROFILE_STATS_SECTION_START
#undef SMBPROFILE_STATS_COUNT
#undef SMBPROFILE_STATS_TIME
#undef SMBPROFILE_STATS_BASIC
#undef SMBPROFILE_STATS_BYTES
#undef SMBPROFILE_STATS_IOBYTES
#undef SMBPROFILE_STATS_SECTION_END
#undef SMBPROFILE_STATS_END
MD5Final(tmp, &md5);
profile_p = &smbprofile_state.stats.global;
profile_p->magic = BVAL(tmp, 0);
if (profile_p->magic == 0) {
profile_p->magic = BVAL(tmp, 8);
}
return True;
}
示例13: hmac_md5_update
/***********************************************************************
update hmac_md5 "inner" buffer
***********************************************************************/
_PUBLIC_ void hmac_md5_update(const uint8_t *text, int text_len, HMACMD5Context *ctx)
{
MD5Update(&ctx->ctx, text, text_len); /* then text of datagram */
}
示例14: Radius_msg_verify
int Radius_msg_verify(struct radius_msg *msg, u8 *secret, size_t secret_len, struct radius_msg *sent_msg)
{
u8 auth[MD5_MAC_LEN], orig[MD5_MAC_LEN];
u8 orig_authenticator[16];
struct radius_attr_hdr *attr = NULL;
int i;
MD5_CTX context;
u8 hash[MD5_MAC_LEN];
if (sent_msg == NULL)
{
DBGPRINT(RT_DEBUG_ERROR,"No matching Access-Request message found\n");
return 1;
}
for (i = 0; i < msg->attr_used; i++)
{
if (msg->attrs[i]->type == RADIUS_ATTR_MESSAGE_AUTHENTICATOR)
{
if (attr != 0)
{
DBGPRINT(RT_DEBUG_ERROR,"Multiple Message-Authenticator attributes in RADIUS message\n");
return 1;
}
attr = msg->attrs[i];
}
}
if (attr == NULL)
{
DBGPRINT(RT_DEBUG_ERROR,"No Message-Authenticator attribute found\n");
return 1;
}
memcpy(orig, attr + 1, MD5_MAC_LEN);
memset(attr + 1, 0, MD5_MAC_LEN);
memcpy(orig_authenticator, msg->hdr->authenticator, sizeof(orig_authenticator));
memcpy(msg->hdr->authenticator, sent_msg->hdr->authenticator, sizeof(msg->hdr->authenticator));
hmac_md5(secret, secret_len, msg->buf, msg->buf_used, auth);
memcpy(attr + 1, orig, MD5_MAC_LEN);
memcpy(msg->hdr->authenticator, orig_authenticator, sizeof(orig_authenticator));
if (memcmp(orig, auth, MD5_MAC_LEN) != 0)
{
DBGPRINT(RT_DEBUG_ERROR,"Invalid Message-Authenticator!\n");
return 1;
}
/* ResponseAuth = MD5(Code+ID+Length+RequestAuth+Attributes+Secret) */
MD5Init(&context);
MD5Update(&context, (u8 *) msg->hdr, 1 + 1 + 2);
MD5Update(&context, sent_msg->hdr->authenticator, MD5_MAC_LEN);
MD5Update(&context, (u8 *) (msg->hdr + 1), msg->buf_used - sizeof(*msg->hdr));
MD5Update(&context, secret, secret_len);
MD5Final(hash, &context);
if (memcmp(hash, msg->hdr->authenticator, MD5_MAC_LEN) != 0)
{
DBGPRINT(RT_DEBUG_ERROR,"Response Authenticator invalid!\n");
return 1;
}
return 0;
}
示例15: ssh_protocol
static void ssh_protocol(unsigned char *in, int inlen, int ispkt) {
int i, j, len;
unsigned char session_id[16];
unsigned char *rsabuf, *keystr1, *keystr2;
unsigned char cookie[8];
struct RSAKey servkey, hostkey;
struct MD5Context md5c;
unsigned long supported_ciphers_mask;
int cipher_type;
extern struct ssh_cipher ssh_3des;
extern struct ssh_cipher ssh_blowfish;
crBegin;
random_init();
while (!ispkt)
crReturnV;
if (pktin.type != 2)
fatalbox("Public key packet not received");
memcpy(cookie, pktin.body, 8);
MD5Init(&md5c);
i = makekey(pktin.body+8, &servkey, &keystr1);
j = makekey(pktin.body+8+i, &hostkey, &keystr2);
supported_ciphers_mask = (pktin.body[12+i+j] << 24) |
(pktin.body[13+i+j] << 16) |
(pktin.body[14+i+j] << 8) |
(pktin.body[15+i+j]);
MD5Update(&md5c, keystr2, hostkey.bytes);
MD5Update(&md5c, keystr1, servkey.bytes);
MD5Update(&md5c, pktin.body, 8);
MD5Final(session_id, &md5c);
for (i=0; i<32; i++)
session_key[i] = random_byte();
len = (hostkey.bytes > servkey.bytes ? hostkey.bytes : servkey.bytes);
rsabuf = malloc(len);
if (!rsabuf)
fatalbox("Out of memory");
verify_ssh_host_key(savedhost, &hostkey);
for (i=0; i<32; i++) {
rsabuf[i] = session_key[i];
if (i < 16)
rsabuf[i] ^= session_id[i];
}
if (hostkey.bytes > servkey.bytes) {
rsaencrypt(rsabuf, 32, &servkey);
rsaencrypt(rsabuf, servkey.bytes, &hostkey);
} else {
rsaencrypt(rsabuf, 32, &hostkey);
rsaencrypt(rsabuf, hostkey.bytes, &servkey);
}
cipher_type = cfg.cipher == CIPHER_BLOWFISH ? SSH_CIPHER_BLOWFISH :
SSH_CIPHER_3DES;
if ((supported_ciphers_mask & (1 << cipher_type)) == 0) {
c_write("Selected cipher not supported, falling back to 3DES\r\n", 53);
cipher_type = SSH_CIPHER_3DES;
}
s_wrpkt_start(3, len+15);
pktout.body[0] = cipher_type;
memcpy(pktout.body+1, cookie, 8);
pktout.body[9] = (len*8) >> 8;
pktout.body[10] = (len*8) & 0xFF;
memcpy(pktout.body+11, rsabuf, len);
pktout.body[len+11] = pktout.body[len+12] = 0; /* protocol flags */
pktout.body[len+13] = pktout.body[len+14] = 0;
s_wrpkt();
free(rsabuf);
cipher = cipher_type == SSH_CIPHER_BLOWFISH ? &ssh_blowfish :
&ssh_3des;
cipher->sesskey(session_key);
do { crReturnV; } while (!ispkt);
if (pktin.type != 14)
fatalbox("Encryption not successfully enabled");
fflush(stdout);
{
static char username[100];
static int pos = 0;
static char c;
//.........这里部分代码省略.........