protected static int IPSecGetISAKMPData(IntPtr hStore, Guid ISAKMPGUID, out IPSEC_ISAKMP_DATA ipsecISAKMPData)
        {
            ipsecISAKMPData = new IPSEC_ISAKMP_DATA();

            //Allocate memory for the struct pointer.
            IntPtr ppIpsecISAKMPData = Marshal.AllocHGlobal(Marshal.SizeOf(new IntPtr()));


            int hr = IPSecGetISAKMPData(hStore, ISAKMPGUID, ppIpsecISAKMPData);

            if (hr != 0)
            {
                return(hr);
            }

            //Dereference the ppIpsecISAKMPData into a pointer.
            IntPtr pIpsecISAKMPData = Marshal.ReadIntPtr(ppIpsecISAKMPData);

            //Cast the ptr.
            ipsecISAKMPData = (IPSEC_ISAKMP_DATA)Marshal.PtrToStructure(pIpsecISAKMPData, typeof(IPSEC_ISAKMP_DATA));

            //Free memory allocations.
            Marshal.FreeHGlobal(ppIpsecISAKMPData);

            return(hr);
        }
        protected static int IPSecCreateISAKMPData(IntPtr hStore, IPSEC_ISAKMP_DATA ipsecISAKMPData)
        {
            IntPtr pIpsecISAKMPData = Marshal.AllocHGlobal(Marshal.SizeOf(ipsecISAKMPData));

            Marshal.StructureToPtr(ipsecISAKMPData, pIpsecISAKMPData, false);
            int hr = IPSecCreateISAKMPData(hStore, pIpsecISAKMPData);

            Marshal.FreeHGlobal(pIpsecISAKMPData);
            return(hr);
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="manualISAKMPData"></param>
        /// <returns></returns>
        private int CreateIpsecSakmpData(out IPSEC_ISAKMP_DATA manualISAKMPData)
        {
            NativeMethods.Oakdefs.CRYPTO_BUNDLE pSecurityMethods = new()
            {
                EncryptionAlgorithm = new NativeMethods.Oakdefs.OAKLEY_ALGORITHM()
                {
                    AlgorithmIdentifier = 3, Rounds = 8, KeySize = 64
                },
                HashAlgorithm = new NativeMethods.Oakdefs.OAKLEY_ALGORITHM()
                {
                    AlgorithmIdentifier = 2, Rounds = 0, KeySize = 64
                },
                Lifetime = new NativeMethods.Oakdefs.OAKLEY_LIFETIME()
                {
                    KBytes = 0, Seconds = 28800
                },
            };
            manualISAKMPData = new IPSEC_ISAKMP_DATA()
            {
                ISAKMPIdentifier           = Guid.NewGuid(),
                dwWhenChanged              = (int)new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds(),
                dwNumISAKMPSecurityMethods = 2,
                pSecurityMethods           = Marshal.AllocHGlobal(Marshal.SizeOf(pSecurityMethods)),
            };
            manualISAKMPData.ISAKMPPolicy = new NativeMethods.Oakdefs.ISAKMP_POLICY()
            {
                AquireSize = 28800,
                PolicyId   = manualISAKMPData.ISAKMPIdentifier
            };
            Marshal.StructureToPtr(pSecurityMethods, manualISAKMPData.pSecurityMethods, false);

            int hr = IPSecCreateISAKMPData(hStore, manualISAKMPData);

            Marshal.FreeHGlobal(manualISAKMPData.pSecurityMethods);

            return(hr);
        }
Beispiel #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="ISAKMPGUID"></param>
 /// <param name="ipsecIsakmpData"></param>
 /// <returns></returns>
 private int GetISAKMPData(Guid ISAKMPGUID, out IPSEC_ISAKMP_DATA ipsecIsakmpData) => IPSecGetISAKMPData(hStore, ISAKMPGUID, out ipsecIsakmpData);