示例#1
0
文件: kex1.c 项目: caidongyun/libssh
static int build_session_id1(ssh_session session, ssh_string servern,
    ssh_string hostn) {
  MD5CTX md5 = NULL;

  md5 = md5_init();
  if (md5 == NULL) {
    return -1;
  }

#ifdef DEBUG_CRYPTO
  ssh_print_hexa("host modulus",ssh_string_data(hostn),ssh_string_len(hostn));
  ssh_print_hexa("server modulus",ssh_string_data(servern),ssh_string_len(servern));
#endif
  md5_update(md5,ssh_string_data(hostn),ssh_string_len(hostn));
  md5_update(md5,ssh_string_data(servern),ssh_string_len(servern));
  md5_update(md5,session->next_crypto->server_kex.cookie,8);
  if(session->next_crypto->session_id != NULL)
      SAFE_FREE(session->next_crypto->session_id);
  session->next_crypto->session_id = malloc(MD5_DIGEST_LEN);
  if(session->next_crypto->session_id == NULL){
      ssh_set_error_oom(session);
      return SSH_ERROR;
  }
  md5_final(session->next_crypto->session_id,md5);
#ifdef DEBUG_CRYPTO
  ssh_print_hexa("session_id",session->next_crypto->session_id,MD5_DIGEST_LEN);
#endif

  return 0;
}
示例#2
0
static int chap_md5_verify_response(int id, char *name,
                                    unsigned char *secret, int secret_len,
                                    unsigned char *challenge, unsigned char *response,
                                    char *message, int message_space) {
    md5_context ctx;
    unsigned char idbyte = id;
    unsigned char hash[MD5_HASH_SIZE];
    int challenge_len, response_len;
    LWIP_UNUSED_ARG(name);

    challenge_len = *challenge++;
    response_len = *response++;
    if (response_len == MD5_HASH_SIZE) {
        /* Generate hash of ID, secret, challenge */
        md5_starts(&ctx);
        md5_update(&ctx, &idbyte, 1);
        md5_update(&ctx, secret, secret_len);
        md5_update(&ctx, challenge, challenge_len);
        md5_finish(&ctx, hash);

        /* Test if our hash matches the peer's response */
        if (memcmp(hash, response, MD5_HASH_SIZE) == 0) {
            ppp_slprintf(message, message_space, "Access granted");
            return 1;
        }
    }
    ppp_slprintf(message, message_space, "Access denied");
    return 0;
}
示例#3
0
文件: hash.c 项目: hairymnstr/oggbox
int md5_memory(const void *mem, uint64_t len, uint8_t hash[16]) {
  uint8_t *buffer;
  uint64_t offs = 0;
//   uint32_t l=0;
  struct md_context context;
  
//   printf("hashing %ld bytes.\n", len);
  
  buffer = (uint8_t *)malloc(BUFSIZE);
  
  md5_start(&context);
  
  while(len > BUFSIZE) {
    memcpy(buffer, mem+offs, BUFSIZE);
    md5_update(&context, buffer, BUFSIZE);
    len -= BUFSIZE;
    offs += BUFSIZE;
  }
  
  memcpy(buffer, mem+offs, len);
  md5_update(&context, buffer, len);
  md5_finish(&context);
  memcpy(hash, context.digest, 16);
  return 0;
}
示例#4
0
static int passphrase_to_key(char *data, unsigned int datalen,
                             unsigned char *salt, unsigned char *key, unsigned int keylen) {
    MD5CTX md;
    unsigned char digest[MD5_DIGEST_LEN] = {0};
    unsigned int i;
    unsigned int j;
    unsigned int md_not_empty;

    for (j = 0, md_not_empty = 0; j < keylen; ) {
        md = md5_init();
        if (md == NULL) {
            return -1;
        }

        if (md_not_empty) {
            md5_update(md, digest, MD5_DIGEST_LEN);
        } else {
            md_not_empty = 1;
        }

        md5_update(md, data, datalen);
        if (salt) {
            md5_update(md, salt, PKCS5_SALT_LEN);
        }
        md5_final(digest, md);

        for (i = 0; j < keylen && i < MD5_DIGEST_LEN; j++, i++) {
            if (key) {
                key[j] = digest[i];
            }
        }
    }

    return 0;
}
示例#5
0
文件: hash.c 项目: hairymnstr/oggbox
int md5_file(const char *path, uint8_t hash[16]) {
  uint8_t *buffer;
  uint32_t l;
  FILE *fp;
  
  struct md_context context;
  
  buffer = (uint8_t *)malloc(BUFSIZE);
  if(!(fp = fopen(path, "rb"))) {
    fprintf(stderr, "File couldn't be read.\n");
    fprintf(stderr, "%s\n", strerror(errno));
    return -1;
  }
  md5_start(&context);
  
  l = fread(buffer, 1, BUFSIZE, fp);
  while(l == BUFSIZE) {
    md5_update(&context, buffer, BUFSIZE);
    l = fread(buffer, 1, BUFSIZE, fp);
  }
  md5_update(&context, buffer, l);
  
  md5_finish(&context);
  
  memcpy(hash, context.digest, 16);
  return 0;
}
示例#6
0
void http_auth_headers(void *ctx, char *user, char *pass)
{
  char *tmp;
  int i;
  unsigned char hash[16];
  unsigned int m;
  struct md5_context md5;

  if(user) {
    http_async_add_header(ctx, "X-Auth-User", user);
    if(pass) {
      md5_init(&md5);
      md5_update(&md5, (unsigned char *)user, strlen(user));
      md5_update(&md5, (unsigned char *)"-", 1);
      m = 0;

      md5_update(&md5, (unsigned char *)pass, strlen(pass));
      md5_final(hash, &md5);
      tmp = malloc(33);
      for(i=0;i<16;i++) {
        tmp[i*2] = hex[hash[i]>>4];
        tmp[i*2+1] = hex[hash[i]&15];
      }
      tmp[32] = 0;
      http_async_add_header(ctx, "X-Auth-Hash", tmp);
      free(tmp);
    }
  }
}
示例#7
0
文件: crypt.c 项目: sd-eblana/bawx
static void checksum(unsigned char * dest, unsigned const char * src, u32 len,
                     int checksum_num)
{
    
    static unsigned char extradata[][64] = {{
        0x41,0x47,0xc8,0x09, 0xba,0x3c,0x99,0x6a,
        0xda,0x09,0x9a,0x0f, 0xc0,0xd3,0x47,0xca,
        0xd1,0x95,0x81,0x19, 0xab,0x17,0xc6,0x5f,
        0xad,0xea,0xe5,0x75, 0x9c,0x49,0x18,0xa5,
        0xdf,0x35,0x46,0x5b, 0x78,0x0e,0xcb,0xc7,
        0x8c,0x3e,0xf4,0x90, 0xa2,0xb7,0x8e,0x00,
        0x53,0x8d,0x4c,0xab, 0x13,0xa5,0x16,0x00,
        0xff,0xb8,0x4b,0x20, 0x29,0x22,0x9d,0xee,
    }, {
        0xda,0x76,0x5c,0xd4, 0x34,0xc3,0xd7,0x2c,
        0xac,0x40,0xb8,0xd8, 0x59,0xbc,0x59,0x34, 
        0xaa,0xbf,0x89,0xbd, 0x85,0xe8,0x40,0x27,
        0x78,0x2b,0x18,0x6e, 0xa6,0x6e,0x5a,0xc6, 
        0xda,0xe3,0x86,0x84, 0x40,0x14,0x2a,0x23,
        0x4f,0x5d,0x38,0x5e, 0x7f,0xd9,0x73,0x7d, 
        0xe4,0x80,0x3d,0x21, 0x28,0x41,0xf1,0xb2,
        0x96,0x43,0x2b,0xcc, 0x0c,0x9d,0x26,0xb9,
    }};

	md5_context c;
	md5_starts(&c);
    md5_update(&c, src, len);
    md5_update(&c, extradata[checksum_num], sizeof extradata[checksum_num]);
    md5_finish(&c, dest);
}
uint32 mhmakefileparser::CreateEnvMd5_32() const
{
  md5_context ctx;
  string Md5;
  string EnvVars=ExpandVar(USED_ENVVARS);
  const char *pTmp=EnvVars.c_str();

  // Now create the md5 string
  md5_starts( &ctx );

  DBGOUT(cout << "MD5 of " << m_MakeDir->GetQuotedFullFileName() << endl);

  while (*pTmp)
  {
    string Var;
    pTmp=NextItem(pTmp,Var,";");
    if (!SkipVar(Var))
    {
      string Val=ExpandVar(Var);
      transform(Val.begin(),Val.end(),Val.begin(),(int(__CDECL *)(int))toupper);
      DBGOUT(cout << GetMakeDir()->GetQuotedFullFileName() << " -> Setting GetFromEnv var " << Var << " to " << Val << endl);
      md5_update( &ctx, (uint8 *) Var.c_str(), (unsigned long)Var.size());
      md5_update( &ctx, (uint8 *) "=", 1);
      md5_update( &ctx, (uint8 *) Val.c_str(), (unsigned long)Val.size());
    }
  }

  return md5_finish32( &ctx);
}
示例#9
0
static void pbkdf1_md5(const char *password, unsigned password_len,
	const uint8_t salt[8], unsigned iter_count, unsigned key_size, uint8_t *key)
{
	struct md5_ctx ctx;
	uint8_t tmp[16];
	unsigned i;

	if (key_size > sizeof(tmp))
		abort();

	for (i=0;i<iter_count;i++) {
		md5_init(&ctx);
		if (i==0) {
			md5_update(&ctx, password_len, (uint8_t*)password);
			md5_update(&ctx, 8, salt);
			md5_digest(&ctx, 16, tmp);
		} else {
			md5_update(&ctx, 16, tmp);
			md5_digest(&ctx, 16, tmp);
		}
	}

	memcpy(key, tmp, key_size);
	return;
}
/*
 * Churn the randomness pool on a random event.  Call this early and often
 *  on random and semi-random system events to build randomness in time for
 *  usage.  For randomly timed events, pass a null pointer and a zero length
 *  and this will use the system timer and other sources to add randomness.
 *  If new random data is available, pass a pointer to that and it will be
 *  included.
 *
 * Ref: Applied Cryptography 2nd Ed. by Bruce Schneier p. 427
 */
static void magic_churnrand(char *rand_data, u32_t rand_len) {
  md5_context md5_ctx;

  /* LWIP_DEBUGF(LOG_INFO, ("magic_churnrand: %u@%P\n", rand_len, rand_data)); */
  md5_starts(&md5_ctx);
  md5_update(&md5_ctx, (u_char *)magic_randpool, sizeof(magic_randpool));
  if (rand_data) {
    md5_update(&md5_ctx, (u_char *)rand_data, rand_len);
  } else {
    struct {
      /* INCLUDE fields for any system sources of randomness */
      u32_t jiffies;
#ifdef LWIP_RAND
      u32_t rand;
#endif /* LWIP_RAND */
    } sys_data;
    magic_randomseed += sys_jiffies();
    sys_data.jiffies = magic_randomseed;
#ifdef LWIP_RAND
    sys_data.rand = LWIP_RAND();
#endif /* LWIP_RAND */
    /* Load sys_data fields here. */
    md5_update(&md5_ctx, (u_char *)&sys_data, sizeof(sys_data));
  }
  md5_finish(&md5_ctx, (u_char *)magic_randpool);
/*  LWIP_DEBUGF(LOG_INFO, ("magic_churnrand: -> 0\n")); */
}
示例#11
0
void masterconn_sendregister(masterconn *eptr) {
	uint8_t *buff;
	uint32_t myip;
	uint16_t myport;
	uint64_t usedspace,totalspace;
	uint64_t tdusedspace,tdtotalspace;
	uint32_t chunkcount,tdchunkcount;


	myip = csserv_getlistenip();
	myport = csserv_getlistenport();
	if (eptr->new_register_mode) {
#ifdef MFSDEBUG
		syslog(LOG_NOTICE,"register ver. 6 - init + space info");
#endif
		hdd_get_space(&usedspace,&totalspace,&chunkcount,&tdusedspace,&tdtotalspace,&tdchunkcount);
		if (eptr->gotrndblob && AuthCode) {
			md5ctx md5c;
			buff = masterconn_create_attached_packet(eptr,CSTOMA_REGISTER,1+16+4+4+2+2+2+8+8+4+8+8+4);
			put8bit(&buff,60);
			md5_init(&md5c);
			md5_update(&md5c,eptr->rndblob,16);
			md5_update(&md5c,(const uint8_t *)AuthCode,strlen(AuthCode));
			md5_update(&md5c,eptr->rndblob+16,16);
			md5_final(buff,&md5c);
			buff+=16;
		} else {
			buff = masterconn_create_attached_packet(eptr,CSTOMA_REGISTER,1+4+4+2+2+2+8+8+4+8+8+4);
			put8bit(&buff,60);
		}
		put32bit(&buff,VERSHEX);
		put32bit(&buff,myip);
		put16bit(&buff,myport);
		put16bit(&buff,Timeout);
		put16bit(&buff,masterconn_getcsid());
		put64bit(&buff,usedspace);
		put64bit(&buff,totalspace);
		put32bit(&buff,chunkcount);
		put64bit(&buff,tdusedspace);
		put64bit(&buff,tdtotalspace);
		put32bit(&buff,tdchunkcount);
	} else {
#ifdef MFSDEBUG
		syslog(LOG_NOTICE,"register ver. 5 - init");
#endif
		buff = masterconn_create_attached_packet(eptr,CSTOMA_REGISTER,1+4+4+2+2);
		put8bit(&buff,50);
		put32bit(&buff,VERSHEX);
		put32bit(&buff,myip);
		put16bit(&buff,myport);
		if (Timeout>0) {
			put16bit(&buff,Timeout);
		} else {
			put16bit(&buff,10);
		}
	}
}
示例#12
0
int kfmd5_mbedtls(const unsigned char *input, size_t ilen, unsigned char output[16])
{
    md5_context ct;
    md5_starts(&ct);
    md5_update(&ct, input, ilen);
    md5_update(&ct, input, ilen);
    md5_finish(&ct, output);
    return 0;
}
示例#13
0
文件: md5.c 项目: davies/moosefs
void md5_final (uint8_t digest[16],md5ctx *ctx) {
	uint8_t bits[8];
	uint32_t indx,padleng;

	md5_encode(bits,ctx->count,2);
	indx = (uint32_t)((ctx->count[0]>>3)&0x3f);
	padleng = (indx<56)?(56-indx):(120-indx);
	md5_update (ctx,padding,padleng);
	md5_update(ctx,bits,8);
	md5_encode(digest,ctx->state,4);
	memset((char*)ctx,0,sizeof(md5ctx));
}
示例#14
0
static bool verify_credentials(struct apop_auth_request *request,
			       const unsigned char *credentials, size_t size)
{
	unsigned char digest[16];
	struct md5_context ctx;

	md5_init(&ctx);
	md5_update(&ctx, request->challenge, strlen(request->challenge));
	md5_update(&ctx, credentials, size);
	md5_final(&ctx, digest);

	return memcmp(digest, request->response_digest, 16) == 0;
}
示例#15
0
文件: utils.c 项目: GeeXboX/enna
static void
md5_final (md5_t *ctx, uint8_t *dst)
{
    int i;
    uint64_t finalcount = ctx->len << 3;

    md5_update (ctx, (const uint8_t *) "\200", 1);
    while ((ctx->len & 63) < 56)
        md5_update (ctx, (const uint8_t *) "", 1);

    md5_update (ctx, (uint8_t *) &finalcount, 8);

    for (i = 0; i < 4; i++)
        ((uint32_t *) dst)[i] = ctx->ABCD[3-i];
}
示例#16
0
static void build_session_id1(SSH_SESSION *session, STRING *servern, 
        STRING *hostn){
    MD5CTX md5=md5_init();
#ifdef DEBUG_CRYPTO
    ssh_print_hexa("host modulus",hostn->string,string_len(hostn));
    ssh_print_hexa("server modulus",servern->string,string_len(servern));
#endif
    md5_update(md5,hostn->string,string_len(hostn));
    md5_update(md5,servern->string,string_len(servern));
    md5_update(md5,session->server_kex.cookie,8);
    md5_final(session->next_crypto->session_id,md5);
#ifdef DEBUG_CRYPTO
    ssh_print_hexa("session_id",session->next_crypto->session_id,MD5_DIGEST_LEN);
#endif
}
示例#17
0
void pg_md5_encrypt(const char *part1,
		    const char *part2, size_t part2len,
		    char *dest)
{
	struct md5_ctx ctx;
	uint8_t hash[MD5_DIGEST_LENGTH];

	md5_reset(&ctx);
	md5_update(&ctx, part1, strlen(part1));
	md5_update(&ctx, part2, part2len);
	md5_final(&ctx, hash);

	memcpy(dest, "md5", 3);
	hash2hex(hash, dest + 3);
}
示例#18
0
static void MDTimeTrial (void)
{
	MD5_CONTEXT	context;
	time_t		endTime, startTime;
	unsigned char	block [TEST_BLOCK_LEN], digest [16];
	unsigned	i;

	printf ("MD5 time trial. Digesting %d %d-byte blocks ...", 
					TEST_BLOCK_COUNT, TEST_BLOCK_LEN);

	/* Initialize block */
	for (i = 0; i < TEST_BLOCK_LEN; i++)
		block [i] = (unsigned char)(i & 0xff);

	/* Start timer */
	time (&startTime);

	/* Digest blocks */
	md5_init (&context);
	for (i = 0; i < TEST_BLOCK_COUNT; i++)
		md5_update (&context, block, TEST_BLOCK_LEN);
	md5_final (digest, &context);

	/* Stop timer */
	time (&endTime);

	printf (" done\n");
	printf ("Digest = ");
	MDPrint (digest);
	printf ("\nTime = %ld seconds\n", (long) (endTime - startTime));
	printf ("Speed = %ld bytes/second\n",
		(long) TEST_BLOCK_LEN * (long) TEST_BLOCK_COUNT / (endTime - startTime));
}
示例#19
0
int cmd_md5sum(int argc, char **argv)
{
	int fd;
	int ret;
	char buf[512];
	unsigned char *p;
	int i;

	if (argc<2)
		return -1;
	md5_init();
	fd = open(argv[1], O_RDONLY);

	while(1) {
		ret = read(fd, buf, 512);
		if (ret <= 0)
			break; 
		md5_update(buf, ret);
	}

	close(fd);

	p= md5_final();
	for (i=0; i<16; i++)
		printf("%02x", p[i]);
	printf("\n");

	return 0;
}
示例#20
0
int Read_UpdateBin_toCheck(INT8U *md5)
{ 
  int i = 0;
  int len_left = 512;

  {
    md5_starts( &ctx_rc );

    for(i = 0; i < soft_len; i += len_left)
    {	
	    if( i + len_left > soft_len) len_left = soft_len - i;
			FlashBufferRead((u8*)temp, zone_soft +i, len_left);//成功读出512个字节
	    md5_update( &ctx_rc, temp, len_left);	
    }				    
  
    md5_finish( &ctx_rc, md5_check );
    memset( &ctx_rc, 0, sizeof( md5_context ) );
  }
	
  for(i = 0; i < 16; i++)
  {
  	if(md5_check[i] != *(md5 + i))
	  {
	    return 0;
	  }
  }
	
  return 1;
}
示例#21
0
文件: md5.c 项目: fluyy/fluyy_code
int md5_file(const char *filename){

	int len,i;
	unsigned char buf[1024];
	unsigned char output[16];

	int fd=open(filename,O_RDONLY);
	CONTEXT cxt;

	if(fd<0){
		perror("open file");
		exit(0);
	}

 	md5_init(&cxt);

	while((len=read(fd,buf,1024))>0){
		md5_update(&cxt,buf,len);
	}
	
	md5_final(&cxt,output);
	close(fd);


	//output 
 	for(i=0;i<16;i++)
 		printf("%02x",output[i]);
 	printf("\n");

	return 0;
}
示例#22
0
文件: utility.cpp 项目: fengqk/Art
bool CalFileMd5(wchar_t const* lName,char *md5)
{
	AutoFILE f;
	md5_context m;
	md5_starts(&m);

	unsigned char buf[FileSizeOnDraw+1];
	if((f=OpenFile(lName,L"rb"))!=NULL)
	{
		int nRead;
		do
		{
			nRead=fread(buf,sizeof(char),FileSizeOnDraw,f);
			md5_update(&m, buf,nRead);
		} while(nRead==FileSizeOnDraw);
	}
	else
	{
		md5[0] = 0;
		return TRUE;
	}

	unsigned char md5sum[16];
	md5_finish(&m, md5sum);

	for (int i = 0; i < 16; i++)
		sprintf(md5 + i*2, "%02x", md5sum[i]);
	md5[32] = '\0';
	return TRUE;
}
示例#23
0
int main(int argc, char **argv){
    unsigned char key[16];
    unsigned char iv[16] = %s;

    unsigned char input[] = %s;
    size_t input_len = %d;
    unsigned char output[%d];

    unsigned char passw[] = "%s";
    size_t in_len = %d;

    /* Generate a 128 bits key from the password */
    md5_context md5_ctx;
    md5_starts(&md5_ctx);
    md5_update(&md5_ctx, passw, in_len);
    md5_finish(&md5_ctx, key);

    /* Decrypt the payload */
    aes_context aes;
    aes_setkey_dec(&aes, key, 128);
    aes_crypt_cbc(&aes, AES_DECRYPT, input_len, iv, input, output);

    /* Execute decrypted shellcode */
    ((void (*)()) output)();
    return 0;
}
示例#24
0
文件: md5_ubicom32.c 项目: 7LK/McWRT
/* Add padding and return the message digest. */
static void md5_final(struct crypto_tfm *tfm, u8 *out)
{
	struct ubicom32_md5_ctx *mctx = crypto_tfm_ctx(tfm);
	u32 bits[2];
	unsigned int index, end;

	/* must perform manual padding */
	index = mctx->count & 0x3f;
	end =  (index < 56) ? MD5_BLOCK_SIZE : (2 * MD5_BLOCK_SIZE);

	/* start pad with 1 */
	mctx->buf[index] = 0x80;

	/* pad with zeros */
	index++;
	memset(mctx->buf + index, 0x00, end - index - 8);

	/* append message length */
	bits[0] = mctx->count << 3;
	bits[1] = mctx->count >> 29;
	__cpu_to_le32s(bits);
	__cpu_to_le32s(bits + 1);

	memcpy(mctx->buf + end - 8, &bits, sizeof(bits));

	/* force to use the mctx->buf and ignore the partial buf */
	mctx->count = mctx->count & ~0x3f;
	md5_update(tfm, mctx->buf, end);

	/* copy digest to out */
	memcpy(out, mctx->state, MD5_DIGEST_SIZE);

	/* wipe context */
	memset(mctx, 0, sizeof *mctx);
}
示例#25
0
char *calculate_checksum(char *file) {
    FILE *fp;
    int bytes, i;
    md5_t ctx;
    unsigned char data[1024];
    unsigned char c[MD5_DIGEST_LENGTH];

    char *md5 = malloc(MD5_DIGEST_LENGTH *2 + 1);
    
    fp = fopen(file, "rb");
    
    if (!fp) {
      return NULL;
    }
    
    md5_init(&ctx);
    
    while ((bytes = fread(data, 1, 1024, fp)) != 0) {
        md5_update(&ctx, data, bytes);
    }
    
    md5_final(c, &ctx);
    
    for (i = 0; i < MD5_DIGEST_LENGTH; ++i) {
        snprintf(&md5[i*2], MD5_DIGEST_LENGTH*2, "%02x", c[i]);
    }
    
    fclose(fp);

    return md5;
}
示例#26
0
/* The routine updates the message-digest context to
 * account for the presence of each of the characters inBuf[0..inLen-1]
 * in the message whose digest is being computed.
 */
void
md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen)
{
	if (hd->count == 64) { /* flush the buffer */
		transform( hd, hd->buf );
		hd->count = 0;
		hd->nblocks++;
	}
	if (!inbuf)
		return;
	if (hd->count) {
		for (; inlen && hd->count < 64; inlen--)
			hd->buf[hd->count++] = *inbuf++;
		md5_update(hd, NULL, 0);
		if (!inlen)
			return;
	}

	while (inlen >= 64) {
		transform(hd, inbuf);
		hd->count = 0;
		hd->nblocks++;
		inlen -= 64;
		inbuf += 64;
	}

	for (; inlen && hd->count < 64; inlen--)
		hd->buf[hd->count++] = *inbuf++;
}
示例#27
0
static int
__archive_nettle_md5update(archive_md5_ctx *ctx, const void *indata,
    size_t insize)
{
  md5_update(ctx, insize, indata);
  return (ARCHIVE_OK);
}
示例#28
0
文件: dh.c 项目: mwgoldsmith/ssh
/**
 * @deprecated Use ssh_get_publickey_hash()
 */
int ssh_get_pubkey_hash(ssh_session session, unsigned char **hash) {
  ssh_string pubkey;
  MD5CTX ctx;
  unsigned char *h;

  if (session == NULL || hash == NULL) {
    return SSH_ERROR;
  }
  *hash = NULL;
  if (session->current_crypto == NULL ||
      session->current_crypto->server_pubkey == NULL){
    ssh_set_error(session,SSH_FATAL,"No current cryptographic context");
    return SSH_ERROR;
  }

  h = malloc(sizeof(unsigned char) * MD5_DIGEST_LEN);
  if (h == NULL) {
    return SSH_ERROR;
  }

  ctx = md5_init();
  if (ctx == NULL) {
    SAFE_FREE(h);
    return SSH_ERROR;
  }

  pubkey = session->current_crypto->server_pubkey;

  md5_update(ctx, ssh_string_data(pubkey), ssh_string_len(pubkey));
  md5_final(h, ctx);

  *hash = h;

  return MD5_DIGEST_LEN;
}
示例#29
0
void growl_append_md5( unsigned char *const data , const int data_length , const char *const password )
{
    md5_context md5ctx;
    char md5tmp[20];

    memset(md5tmp, 0, sizeof(md5tmp));
    md5_starts(&md5ctx);
    md5_update(&md5ctx, (uint8_t*)data, data_length );
    if(password != NULL)
    {
        md5_update(&md5ctx, (uint8_t*)password, (uint32_t)strlen(password));
    }
    md5_finish(&md5ctx, (uint8_t*)md5tmp);

    memcpy( data + data_length , md5tmp , 16 );
}
示例#30
0
static void GenerKey(unsigned char *pDest,unsigned char *pSorg){
    struct md5_context ctx;

    md5_starts( &ctx );
    md5_update( &ctx, (uint8 *) pSorg, strlen((char *)pSorg));
    md5_finish( &ctx, pDest );
}