ec113054eb
Keyring
216 lines
5.8 KiB
C#
216 lines
5.8 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Collections.Specialized;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Novell.CASA.DataEngines.KWallet
|
|
{
|
|
|
|
public class kwallet
|
|
{
|
|
|
|
//private static int MAX_NAME_LENGTH = 512;
|
|
private const string CPP_LIB = "kwallets_rw";
|
|
|
|
|
|
|
|
/*
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern void MyTest(
|
|
EnumSecretList enumSecretList
|
|
);
|
|
|
|
*/
|
|
[DllImport(CPP_LIB)]
|
|
public static extern void Aggregate(
|
|
EnumSecretList enumSecretList
|
|
);
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern void FreeList();
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern int SetEntry(string walletName, string folderName, int entryType, string keyName, string value, int valueLen);
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern int SetMapEntry(string walletName, string folderName, string keyName, String[,] value, int eleCount);
|
|
[DllImport(CPP_LIB)]
|
|
public static extern int RemoveEntry(string walletName, string folderName, string keyName);
|
|
|
|
/*
|
|
public static int Try(EnumSecretList enumSecretList)
|
|
{
|
|
MyTest(enumSecretList);
|
|
return 0;
|
|
}
|
|
|
|
*/
|
|
public static int AggregateKW(EnumSecretList enumSecretList)
|
|
{
|
|
Aggregate(enumSecretList);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
public static int FreeResources()
|
|
{
|
|
FreeList();
|
|
return 0;
|
|
}
|
|
|
|
|
|
public static int SetSecret(string walletName, string folderName, int entryType, string keyName, string value, int valueLen )
|
|
{
|
|
return(SetEntry(walletName, folderName, entryType, keyName, value, valueLen ));
|
|
}
|
|
public static int SetSecret(string walletName, string folderName, string keyName, NameValueCollection nvc)
|
|
{
|
|
|
|
//IntPtr[] mapele = new IntPtr[nvc.Count * 2];
|
|
String[,] mapele = new String[nvc.Count,2 ];
|
|
String str=" ";
|
|
|
|
int j=0;
|
|
for (int i=0; i< nvc.Count; i++)
|
|
{
|
|
mapele[i,0] = nvc.GetKey(i);
|
|
mapele[i,1] = nvc.Get(nvc.GetKey(i));
|
|
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
for (int i=0; i< nvc.Count; i++)
|
|
{
|
|
str = String.Concat(str,nvc.GetKey(i));
|
|
str = String.Concat(str, "\0");
|
|
str = String.Concat(str,nvc.Get(nvc.GetKey(i)));
|
|
str = String.Concat(str, "\0");
|
|
|
|
}
|
|
*/
|
|
|
|
char[] strarr = str.ToCharArray();
|
|
|
|
/*for (int i=0; i< nvc.Count; i++)
|
|
{
|
|
|
|
string strKey = nvc.GetKey(i);
|
|
Console.WriteLine("Key is " + strKey);
|
|
//IntPtr ptr1 = Marshal.AllocHGlobal(strKey.Length);
|
|
//Marshal.StructureToPtr(strKey,ptr1,false);
|
|
|
|
IntPtr ptr1 = Marshal.StringToHGlobalAnsi(strKey);
|
|
string strValue = nvc.Get(strKey);
|
|
//IntPtr ptr2 = Marshal.AllocHGlobal(strValue.Length);
|
|
//Marshal.StructureToPtr(strValue,ptr2,false);
|
|
IntPtr ptr2 = Marshal.StringToHGlobalAnsi(strValue);
|
|
Console.WriteLine("Value is " + strValue);
|
|
//IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(kv));
|
|
// Marshal.StructureToPtr(kv,ptr,false);
|
|
mapele[j++] = ptr1;
|
|
Console.WriteLine("Pointer is " +ptr1);
|
|
mapele[j++] = ptr2;
|
|
Console.WriteLine("Pointer is " +ptr2);
|
|
}
|
|
*/
|
|
//IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(mapele));
|
|
//Marshal.StructureToPtr(mapele,ptr,false);
|
|
|
|
/*string[] str = {"a","bb","ccc"};
|
|
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(str));
|
|
Marshal.StructureToPtr(str,ptr,false);
|
|
*/
|
|
/*Console.WriteLine("Setting Map Entry Keys name is " + keyName); */
|
|
return(SetMapEntry(walletName, folderName, keyName, mapele, nvc.Count));
|
|
}
|
|
public static int DeleteSecret(string walletName, string folderName, string keyName)
|
|
{
|
|
return(RemoveEntry(walletName, folderName, keyName));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TBD: All this for future.
|
|
/*
|
|
[DllImport(CPP_LIB)]
|
|
public static extern int ReadSecret
|
|
(
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String walletName,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String folderName,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String key,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
Byte[] secretVal
|
|
);
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern int WriteSecret
|
|
(
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String walletName,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String folderName,
|
|
int entryType,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
String key,
|
|
[MarshalAs(UnmanagedType.LPStr)]
|
|
Byte[] secret
|
|
);
|
|
|
|
|
|
|
|
|
|
[DllImport(CPP_LIB)]
|
|
public static extern void CloseAllWallets();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int ReadWallet(String walletName, String folderName, String key, Byte[] secretVal)
|
|
{
|
|
|
|
// Read a secret from wallet
|
|
return (ReadSecret(walletName, folderName, key, secretVal));
|
|
}
|
|
|
|
public static int WriteWallet(String walletName, String folderName,int entryType, String key, Byte[] secretVal)
|
|
{
|
|
|
|
// Write secret to wallet
|
|
return (WriteSecret( walletName, folderName, entryType, key, secretVal));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void DisconnectApplication()
|
|
{
|
|
|
|
CloseAllWallets();
|
|
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
}
|