123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- using System;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace WechatPCMsgBakTool.Helpers
- {
- public class OpenSSLInterop
- {
- private const string Lib = "libcrypto-1_1";
- internal static unsafe int HMAC_Init(out HMAC_CTX ctx, byte[] key, int key_len, IntPtr md)
- {
- return HMAC_InitNative(out ctx, key, key_len, md);
- }
- internal static void HMAC_Init_ex(ref HMAC_CTX ctx, byte[] key, int key_len, IntPtr md, IntPtr zero)
- {
- HMAC_Init_exNative(ref ctx, key, key_len, md, zero);
- }
- internal static unsafe int HMAC_Update(ref HMAC_CTX ctx, byte* data, int len)
- {
- return HMAC_UpdateNative(ref ctx, data, len);
- }
- internal static unsafe int HMAC_Final(ref HMAC_CTX ctx, byte* md, ref uint len)
- {
- return HMAC_FinalNative(ref ctx, md, ref len);
- }
- [DllImport(Lib, CallingConvention = CallingConvention.Cdecl)]
- public extern static int PKCS5_PBKDF2_HMAC_SHA1(byte[] pass, int passlen, byte[] salt, int saltlen, int iter, int keylen, byte[] outBytes);
- [DllImport(Lib, EntryPoint = "HMAC_Init", ExactSpelling = true)]
- private extern static unsafe int HMAC_InitNative(out HMAC_CTX ctx, byte[] key, int key_len, IntPtr md);
- [DllImport(Lib, EntryPoint = "HMAC_Init_ex", ExactSpelling = true)]
- private extern static void HMAC_Init_exNative(ref HMAC_CTX ctx, byte[] key, int key_len, IntPtr md, IntPtr zero);
- [DllImport(Lib, EntryPoint = "HMAC_Update", ExactSpelling = true)]
- private extern static unsafe int HMAC_UpdateNative(ref HMAC_CTX ctx, byte* data, int len);
- [DllImport(Lib, EntryPoint = "HMAC_Final", ExactSpelling = true)]
- private extern static unsafe int HMAC_FinalNative(ref HMAC_CTX ctx, byte* md, ref uint len);
- [DllImport(Lib)]
- internal extern static unsafe void HMAC_CTX_cleanup(ref HMAC_CTX ctx);
- [StructLayout(LayoutKind.Explicit, Size = 512)]
- internal struct HMAC_CTX { }
- }
- }
|