関数 | |
| void | hmac_md5_init_rfc2104 (const unsigned char *key, int key_len, HMACMD5Context *ctx) |
| void | hmac_md5_init_limK_to_64 (const unsigned char *key, int key_len, HMACMD5Context *ctx) |
| void | hmac_md5_update (const unsigned char *text, int text_len, HMACMD5Context *ctx) |
| void | hmac_md5_final (unsigned char *digest, HMACMD5Context *ctx) |
| void | hmac_md5 (unsigned char key[16], unsigned char *data, int data_len, unsigned char *digest) |
| void hmac_md5_init_rfc2104 | ( | const unsigned char * | key, | |
| int | key_len, | |||
| HMACMD5Context * | ctx | |||
| ) |
参照先 ctx・MD5Final()・MD5Init()・MD5Update().
参照元 creds_init_128().
00033 { 00034 int i; 00035 unsigned char tk[16]; 00036 00037 /* if key is longer than 64 bytes reset it to key=MD5(key) */ 00038 if (key_len > 64) { 00039 struct MD5Context tctx; 00040 00041 MD5Init(&tctx); 00042 MD5Update(&tctx, key, key_len); 00043 MD5Final(tk, &tctx); 00044 00045 key = tk; 00046 key_len = 16; 00047 } 00048 00049 /* start out by storing key in pads */ 00050 ZERO_STRUCT(ctx->k_ipad); 00051 ZERO_STRUCT(ctx->k_opad); 00052 memcpy( ctx->k_ipad, key, key_len); 00053 memcpy( ctx->k_opad, key, key_len); 00054 00055 /* XOR key with ipad and opad values */ 00056 for (i=0; i<64; i++) { 00057 ctx->k_ipad[i] ^= 0x36; 00058 ctx->k_opad[i] ^= 0x5c; 00059 } 00060 00061 MD5Init(&ctx->ctx); 00062 MD5Update(&ctx->ctx, ctx->k_ipad, 64); 00063 }
| void hmac_md5_init_limK_to_64 | ( | const unsigned char * | key, | |
| int | key_len, | |||
| HMACMD5Context * | ctx | |||
| ) |
参照先 ctx・MD5Init()・MD5Update().
参照元 hmac_md5()・ntlmssp_make_packet_signature()・ntv2_owf_gen()・SMBOWFencrypt_ntv2()・SMBsesskeygen_ntv2().
00071 { 00072 int i; 00073 00074 /* if key is longer than 64 bytes truncate it */ 00075 if (key_len > 64) { 00076 key_len = 64; 00077 } 00078 00079 /* start out by storing key in pads */ 00080 ZERO_STRUCT(ctx->k_ipad); 00081 ZERO_STRUCT(ctx->k_opad); 00082 memcpy( ctx->k_ipad, key, key_len); 00083 memcpy( ctx->k_opad, key, key_len); 00084 00085 /* XOR key with ipad and opad values */ 00086 for (i=0; i<64; i++) { 00087 ctx->k_ipad[i] ^= 0x36; 00088 ctx->k_opad[i] ^= 0x5c; 00089 } 00090 00091 MD5Init(&ctx->ctx); 00092 MD5Update(&ctx->ctx, ctx->k_ipad, 64); 00093 }
| void hmac_md5_update | ( | const unsigned char * | text, | |
| int | text_len, | |||
| HMACMD5Context * | ctx | |||
| ) |
| void hmac_md5_final | ( | unsigned char * | digest, | |
| HMACMD5Context * | ctx | |||
| ) |
参照先 ctx・MD5Final()・MD5Init()・MD5Update().
参照元 creds_init_128()・hmac_md5()・ntlmssp_make_packet_signature()・ntv2_owf_gen()・SMBOWFencrypt_ntv2()・SMBsesskeygen_ntv2().
00109 { 00110 struct MD5Context ctx_o; 00111 00112 MD5Final(digest, &ctx->ctx); 00113 00114 MD5Init(&ctx_o); 00115 MD5Update(&ctx_o, ctx->k_opad, 64); 00116 MD5Update(&ctx_o, digest, 16); 00117 MD5Final(digest, &ctx_o); 00118 }
| void hmac_md5 | ( | unsigned char | key[16], | |
| unsigned char * | data, | |||
| int | data_len, | |||
| unsigned char * | digest | |||
| ) |
参照先 ctx・hmac_md5_final()・hmac_md5_init_limK_to_64()・hmac_md5_update().
参照元 ntlmssp_client_challenge()・ntlmssp_server_auth().
00126 { 00127 HMACMD5Context ctx; 00128 hmac_md5_init_limK_to_64(key, 16, &ctx); 00129 if (data_len != 0) 00130 { 00131 hmac_md5_update(data, data_len, &ctx); 00132 } 00133 hmac_md5_final(digest, &ctx); 00134 }
1.4.7