messagedigest.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 494 行 · 第 1/2 页
C
494 行
c.D = (unsigned long)0x10325476L; c.Nl= 0; c.Nh = 0; c.num = 0; for (i = 0; i < 16; i ++) { c.data[i] = 0; } /* Copy back the context for next use. */ KNI_SetRawArrayRegion(state, 0, 4, (jbyte*)&(c.A)); KNI_SetRawArrayRegion(state, 4, 4, (jbyte*)&(c.B)); KNI_SetRawArrayRegion(state, 8, 4, (jbyte*)&(c.C)); KNI_SetRawArrayRegion(state, 12, 4, (jbyte*)&(c.D)); KNI_SetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_SetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_SetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_SetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } KNI_EndHandles(); KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_midp_crypto_MD5_nativeUpdate() { unsigned long inlen = KNI_GetParameterAsInt(3); unsigned long inoff = KNI_GetParameterAsInt(2); int i, j; MD5_CTX c; KNI_StartHandles(5); KNI_DeclareHandle(data); KNI_DeclareHandle(count); KNI_DeclareHandle(num); KNI_DeclareHandle(state); KNI_DeclareHandle(inbuf); KNI_GetParameterAsObject(7, data); KNI_GetParameterAsObject(6, count); KNI_GetParameterAsObject(5, num); KNI_GetParameterAsObject(4, state); KNI_GetParameterAsObject(1, inbuf); /* Copy the context in */ KNI_GetRawArrayRegion(state, 0, 4, (jbyte*)&(c.A)); KNI_GetRawArrayRegion(state, 4, 4, (jbyte*)&(c.B)); KNI_GetRawArrayRegion(state, 8, 4, (jbyte*)&(c.C)); KNI_GetRawArrayRegion(state, 12, 4, (jbyte*)&(c.D)); KNI_GetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_GetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_GetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_GetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } /* Do MD5 Update */ SNI_BEGIN_RAW_POINTERS; MD5_Update(&c, (unsigned char*)&(JavaByteArray(inbuf)[inoff]), inlen); SNI_END_RAW_POINTERS; /* Copy back the context for next use. */ KNI_SetRawArrayRegion(state, 0, 4, (jbyte*)&(c.A)); KNI_SetRawArrayRegion(state, 4, 4, (jbyte*)&(c.B)); KNI_SetRawArrayRegion(state, 8, 4, (jbyte*)&(c.C)); KNI_SetRawArrayRegion(state, 12, 4, (jbyte*)&(c.D)); KNI_SetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_SetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_SetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_SetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } KNI_EndHandles(); KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_midp_crypto_SHA_nativeFinal() { unsigned long outoff = KNI_GetParameterAsInt(5); unsigned long inlen = KNI_GetParameterAsInt(3); unsigned long inoff = KNI_GetParameterAsInt(2); unsigned char md[20]; int i, j; SHA_CTX c; KNI_StartHandles(6); KNI_DeclareHandle(data); KNI_DeclareHandle(count); KNI_DeclareHandle(num); KNI_DeclareHandle(state); KNI_DeclareHandle(outbuf); KNI_DeclareHandle(inbuf); KNI_GetParameterAsObject(9, data); KNI_GetParameterAsObject(8, count); KNI_GetParameterAsObject(7, num); KNI_GetParameterAsObject(6, state); KNI_GetParameterAsObject(4, outbuf); KNI_GetParameterAsObject(1, inbuf); /* Copy the context in */ KNI_GetRawArrayRegion(state, 0, 4, (jbyte*)&(c.h0)); KNI_GetRawArrayRegion(state, 4, 4, (jbyte*)&(c.h1)); KNI_GetRawArrayRegion(state, 8, 4, (jbyte*)&(c.h2)); KNI_GetRawArrayRegion(state, 12, 4, (jbyte*)&(c.h3)); KNI_GetRawArrayRegion(state, 16, 4, (jbyte*)&(c.h4)); KNI_GetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_GetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_GetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_GetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } /* Perform SHA update if necessary */ if (inlen != 0) { /* Do SHA Update */ SNI_BEGIN_RAW_POINTERS; SHA1_Update(&c, (unsigned char*)&(JavaByteArray(inbuf)[inoff]), inlen); SNI_END_RAW_POINTERS; } /* Create and initialize the mesage digest buffer */ for (i=0; i < 20; i++) { md[i] = 0; } /* Do SHA */ SHA1_Final(md, &c); /* Copy message digest into output buffer at offset outoff */ for (i = 0; i < 20; i++) { KNI_SetRawArrayRegion(outbuf, i+outoff, 1, (jbyte*)&(md[i])); } /* Reset the context */ c.h0 = (unsigned long)0x67452301L; c.h1 = (unsigned long)0xefcdab89L; c.h2 = (unsigned long)0x98badcfeL; c.h3 = (unsigned long)0x10325476L; c.h4 = (unsigned long)0xc3d2e1f0L; c.Nl = 0; c.Nh = 0; c.num = 0; /* Copy back the context for next use. */ KNI_SetRawArrayRegion(state, 0, 4, (jbyte*)&(c.h0)); KNI_SetRawArrayRegion(state, 4, 4, (jbyte*)&(c.h1)); KNI_SetRawArrayRegion(state, 8, 4, (jbyte*)&(c.h2)); KNI_SetRawArrayRegion(state, 12, 4, (jbyte*)&(c.h3)); KNI_SetRawArrayRegion(state, 16, 4, (jbyte*)&(c.h4)); KNI_SetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_SetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_SetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_SetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } KNI_EndHandles(); KNI_ReturnVoid();}/** * Accumulates a hash of the input data. This method is useful when * the input data to be hashed is not available in one byte array. * @param inBuf input buffer of data to be hashed * @param inOff offset within inBuf where input data begins * @param inLen length (in bytes) of data to be hashed * @param state internal hash state * @param num internal hash state * @param count internal hash state * @param data internal hash state */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_midp_crypto_SHA_nativeUpdate() { unsigned long inlen = KNI_GetParameterAsInt(3); unsigned long inoff = KNI_GetParameterAsInt(2); int i, j; SHA_CTX c; KNI_StartHandles(5); KNI_DeclareHandle(data); KNI_DeclareHandle(count); KNI_DeclareHandle(num); KNI_DeclareHandle(state); KNI_DeclareHandle(inbuf); KNI_GetParameterAsObject(7, data); KNI_GetParameterAsObject(6, count); KNI_GetParameterAsObject(5, num); KNI_GetParameterAsObject(4, state); KNI_GetParameterAsObject(1, inbuf); /* Copy the context in */ KNI_GetRawArrayRegion(state, 0, 4, (jbyte*)&(c.h0)); KNI_GetRawArrayRegion(state, 4, 4, (jbyte*)&(c.h1)); KNI_GetRawArrayRegion(state, 8, 4, (jbyte*)&(c.h2)); KNI_GetRawArrayRegion(state, 12, 4, (jbyte*)&(c.h3)); KNI_GetRawArrayRegion(state, 16, 4, (jbyte*)&(c.h4)); KNI_GetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_GetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_GetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_GetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } /* Do SHA Update */ SNI_BEGIN_RAW_POINTERS; SHA1_Update(&c, (unsigned char*)&(JavaByteArray(inbuf)[inoff]), inlen); SNI_END_RAW_POINTERS; /* Copy Context back */ KNI_SetRawArrayRegion(state, 0, 4, (jbyte*)&(c.h0)); KNI_SetRawArrayRegion(state, 4, 4, (jbyte*)&(c.h1)); KNI_SetRawArrayRegion(state, 8, 4, (jbyte*)&(c.h2)); KNI_SetRawArrayRegion(state, 12, 4, (jbyte*)&(c.h3)); KNI_SetRawArrayRegion(state, 16, 4, (jbyte*)&(c.h4)); KNI_SetRawArrayRegion(count, 0, 4, (jbyte*)&(c.Nl)); KNI_SetRawArrayRegion(count, 4, 4, (jbyte*)&(c.Nh)); KNI_SetRawArrayRegion(num, 0, 4, (jbyte*)&(c.num)); for (i = 0, j = 0 ; i < 16; i ++) { KNI_SetRawArrayRegion(data, j, 4, (jbyte*)&(c.data[i])); j += 4; } KNI_EndHandles(); KNI_ReturnVoid();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?