Ejemplo n.º 1
0
        public static void C_GetAttributeValue(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj, CK_ATTRIBUTE[] pTemplate)
        {
            CK_ATTRIBUTE.Native t = null;
            IntPtr buf            = IntPtr.Zero;

            try
            {
                bool isKnownSize;
                t = CK_ATTRIBUTE.ToNativeReadSize(pTemplate, out isKnownSize);

                if (!isKnownSize)
                {
                    CKR_Exception.check(isWindows ?
                                        LibraryWindows.fl.C_GetAttributeValue(session.Handle, obj.Handle, t.windows, t.Length):
                                        LibraryUnix.fl.C_GetAttributeValue(session.Handle, obj.Handle, t.unix, t.Length)
                                        , "C_GetAttributeValue(null)");
                }

                CK_ATTRIBUTE.ToNativeRead(t);
                CKR_Exception.check(isWindows ?
                                    LibraryWindows.fl.C_GetAttributeValue(session.Handle, obj.Handle, t.windows, t.Length):
                                    LibraryUnix.fl.C_GetAttributeValue(session.Handle, obj.Handle, t.unix, t.Length)
                                    , "C_GetAttributeValue");
                CK_ATTRIBUTE.FromNative(pTemplate, t);
            }
            finally
            {
                CK_ATTRIBUTE.Free(t);
            }
        }
Ejemplo n.º 2
0
        public static CK_OBJECT_HANDLE[] C_FindObjects(CK_SESSION_HANDLE session, int ulMaxObjectCount)
        {
            uint[]  buf     = null;
            ulong[] bufUnix = null;

            if (isWindows)
            {
                buf = new uint[ulMaxObjectCount];
            }
            else
            {
                bufUnix = new ulong[ulMaxObjectCount];
            }

            int  count     = 0;
            long countUnix = 0;

            CKR_Exception.check(isWindows ?
                                LibraryWindows.fl.C_FindObjects(session.Handle, buf, ulMaxObjectCount, out count):
                                LibraryUnix.fl.C_FindObjects(session.Handle, bufUnix, ulMaxObjectCount, out countUnix)
                                , "C_FindObjectsInit");

            if (!isWindows)
            {
                count = (int)countUnix;
            }
            CK_OBJECT_HANDLE[] res = new CK_OBJECT_HANDLE[count];
            for (int i = 0; i < count; i++)
            {
                res[i] = new CK_OBJECT_HANDLE(isWindows ? buf[i] : (uint)bufUnix[i]);
            }
            return(res);
        }
Ejemplo n.º 3
0
 public static void C_DigestKey(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key)
 {
     CKR_Exception.check(isWindows ?
                         LibraryWindows.fl.C_DigestKey(session.Handle, key.Handle):
                         LibraryUnix.fl.C_DigestKey(session.Handle, key.Handle)
                         , "C_DigestKey");
 }
Ejemplo n.º 4
0
 public static void C_DestroyObject(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj)
 {
     CKR_Exception.check(isWindows ?
                         LibraryWindows.fl.C_DestroyObject(session.Handle, obj.Handle):
                         LibraryUnix.fl.C_DestroyObject(session.Handle, obj.Handle)
                         , "C_DestroyObject");
 }
Ejemplo n.º 5
0
        public static byte[] C_WrapKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, CK_OBJECT_HANDLE wrappedKey)
        {
            int outSize = C_WrapKey(session, mech, key, wrappedKey, null);

            byte[] output = new byte[outSize];
            outSize = C_WrapKey(session, mech, key, wrappedKey, output);
            return(SubArray(output, outSize));
        }
Ejemplo n.º 6
0
 public static void C_SignInit(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key)
 {
     CK_MECHANISM.Native m = new CK_MECHANISM.Native(mech);
     try { CKR_Exception.check(isWindows ?
                               LibraryWindows.fl.C_SignInit(session.Handle, m.windows, key.Handle):
                               LibraryUnix.fl.C_SignInit(session.Handle, ref m.unix, key.Handle)
                               , "C_SignInit"); }
     finally { m.Free(); }
 }
Ejemplo n.º 7
0
 public static void C_SetAttributeValue(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj, CK_ATTRIBUTE[] pTemplate)
 {
     CK_ATTRIBUTE.Native t = CK_ATTRIBUTE.ToNative(pTemplate);
     try { CKR_Exception.check(isWindows ?
                               LibraryWindows.fl.C_SetAttributeValue(session.Handle, obj.Handle, t.windows, t.Length):
                               LibraryUnix.fl.C_SetAttributeValue(session.Handle, obj.Handle, t.unix, t.Length)
                               , "C_SetAttributeValue"); }
     finally { CK_ATTRIBUTE.Free(t); }
 }
Ejemplo n.º 8
0
        public static int C_WrapKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, CK_OBJECT_HANDLE wrappedKey, byte[] output)
        {
            CK_MECHANISM.Native m = new CK_MECHANISM.Native(mech);
            int outSize           = output == null ? 0 : output.Length;

            try { CKR_Exception.check(fl.C_WrapKey(session.Handle, m, key.Handle, wrappedKey.Handle, output, ref outSize), "C_WrapKey"); }
            finally { m.Free(); }
            return(outSize);
        }
Ejemplo n.º 9
0
        public static int C_WrapKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, CK_OBJECT_HANDLE wrappedKey, byte[] output)
        {
            CK_MECHANISM.Native m = new CK_MECHANISM.Native(mech);
            int  outSize          = output == null ? 0 : output.Length;
            long outSizeUnix      = output == null ? 0 : output.Length;

            try { CKR_Exception.check(isWindows ?
                                      LibraryWindows.fl.C_WrapKey(session.Handle, m.windows, key.Handle, wrappedKey.Handle, output, ref outSize):
                                      LibraryUnix.fl.C_WrapKey(session.Handle, ref m.unix, key.Handle, wrappedKey.Handle, output, ref outSizeUnix)
                                      , "C_WrapKey"); }
            finally { m.Free(); }
            return(isWindows ? outSize : (int)outSizeUnix);
        }
Ejemplo n.º 10
0
        public static CK_OBJECT_HANDLE[] C_FindObjects(CK_SESSION_HANDLE session, int ulMaxObjectCount)
        {
            uint[] buf   = new uint[ulMaxObjectCount];
            int    count = 0;

            CKR_Exception.check(fl.C_FindObjects(session.Handle, out buf, ulMaxObjectCount, out count), "C_FindObjectsInit");

            CK_OBJECT_HANDLE[] res = new CK_OBJECT_HANDLE[count];
            for (int i = 0; i < count; i++)
            {
                res[i] = new CK_OBJECT_HANDLE(buf[i]);
            }
            return(res);
        }
Ejemplo n.º 11
0
        public static void C_GenerateKeyPair(CK_SESSION_HANDLE session, CK_MECHANISM mech,
                                             CK_ATTRIBUTE[] tPub,
                                             CK_ATTRIBUTE[] tPrv,
                                             out CK_OBJECT_HANDLE pubKey,
                                             out CK_OBJECT_HANDLE prvKey)
        {
            CK_ATTRIBUTE.Native[] tPubRaw = CK_ATTRIBUTE.ToNative(tPub);
            CK_ATTRIBUTE.Native[] tPrvRaw = CK_ATTRIBUTE.ToNative(tPrv);
            CK_MECHANISM.Native   m       = new CK_MECHANISM.Native(mech);
            uint pubKeyHandle             = 0;
            uint prvKeyHandle             = 0;

            try { CKR_Exception.check(fl.C_GenerateKeyPair(session.Handle, m, tPubRaw, tPub.Length, tPrvRaw, tPrv.Length, out pubKeyHandle, out prvKeyHandle), "C_GenerateKeyPair"); }
            finally { CK_ATTRIBUTE.Free(tPubRaw); CK_ATTRIBUTE.Free(tPrvRaw); m.Free(); }
            pubKey = new CK_OBJECT_HANDLE(pubKeyHandle);
            prvKey = new CK_OBJECT_HANDLE(prvKeyHandle);
        }
Ejemplo n.º 12
0
        public static void C_GenerateKeyPair(CK_SESSION_HANDLE session, CK_MECHANISM mech,
                                             CK_ATTRIBUTE[] tPub,
                                             CK_ATTRIBUTE[] tPrv,
                                             out CK_OBJECT_HANDLE pubKey,
                                             out CK_OBJECT_HANDLE prvKey)
        {
            CK_ATTRIBUTE.Native tPubRaw = CK_ATTRIBUTE.ToNative(tPub);
            CK_ATTRIBUTE.Native tPrvRaw = CK_ATTRIBUTE.ToNative(tPrv);
            CK_MECHANISM.Native m       = new CK_MECHANISM.Native(mech);
            uint  pubKeyHandle          = 0;
            uint  prvKeyHandle          = 0;
            ulong pubKeyHandleUnix      = 0;
            ulong prvKeyHandleUnix      = 0;

            try { CKR_Exception.check(isWindows ?
                                      LibraryWindows.fl.C_GenerateKeyPair(session.Handle, m.windows, tPubRaw.windows, tPub.Length, tPrvRaw.windows, tPrv.Length, out pubKeyHandle, out prvKeyHandle):
                                      LibraryUnix.fl.C_GenerateKeyPair(session.Handle, ref m.unix, tPubRaw.unix, tPub.Length, tPrvRaw.unix, tPrv.Length, out pubKeyHandleUnix, out prvKeyHandleUnix)
                                      , "C_GenerateKeyPair"); }
            finally { CK_ATTRIBUTE.Free(tPubRaw); CK_ATTRIBUTE.Free(tPrvRaw); m.Free(); }
            pubKey = new CK_OBJECT_HANDLE(isWindows ? pubKeyHandle : (uint)pubKeyHandleUnix);
            prvKey = new CK_OBJECT_HANDLE(isWindows ? prvKeyHandle : (uint)prvKeyHandleUnix);
        }
Ejemplo n.º 13
0
 public static void C_VerifyInit(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key)
 {
     CK_MECHANISM.Native m = new CK_MECHANISM.Native(mech);
     try { CKR_Exception.check(fl.C_VerifyInit(session.Handle, m, key.Handle), "C_VerifyInit"); }
     finally { m.Free(); }
 }
Ejemplo n.º 14
0
 public static void C_SetAttributeValue(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj, CK_ATTRIBUTE[] pTemplate)
 {
     CK_ATTRIBUTE.Native[] t = CK_ATTRIBUTE.ToNative(pTemplate);
     try { CKR_Exception.check(fl.C_SetAttributeValue(session.Handle, obj.Handle, t, t.Length), "C_SetAttributeValue"); }
     finally { CK_ATTRIBUTE.Free(t); }
 }
Ejemplo n.º 15
0
        public static CK_OBJECT_HANDLE C_UnwrapKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, byte[] input, CK_ATTRIBUTE[] pTemplate)
        {
            CK_MECHANISM.Native m        = new CK_MECHANISM.Native(mech);
            CK_ATTRIBUTE.Native t        = CK_ATTRIBUTE.ToNative(pTemplate);
            int   inSize                 = input == null ? 0 : input.Length;
            uint  unwrappedKeyHandle     = 0;
            ulong unwrappedKeyHandleUnix = 0;

            try { CKR_Exception.check(isWindows ?
                                      LibraryWindows.fl.C_UnwrapKey(session.Handle, m.windows, key.Handle, input, inSize, t.windows, t.Length, out unwrappedKeyHandle):
                                      LibraryUnix.fl.C_UnwrapKey(session.Handle, ref m.unix, key.Handle, input, inSize, t.unix, t.Length, out unwrappedKeyHandleUnix)
                                      , "C_UnwrapKey"); }
            finally { m.Free(); CK_ATTRIBUTE.Free(t); }
            return(new CK_OBJECT_HANDLE(isWindows ? unwrappedKeyHandle : (uint)unwrappedKeyHandleUnix));
        }
Ejemplo n.º 16
0
        public static CK_OBJECT_HANDLE C_DeriveKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, CK_ATTRIBUTE[] pTemplate)
        {
            CK_MECHANISM.Native   m = new CK_MECHANISM.Native(mech);
            CK_ATTRIBUTE.Native[] t = CK_ATTRIBUTE.ToNative(pTemplate);
            uint derivedKeyHandle   = 0;

            try { CKR_Exception.check(fl.C_DeriveKey(session.Handle, m, key.Handle, t, t.Length, out derivedKeyHandle), "C_DeriveKey"); }
            finally { m.Free(); CK_ATTRIBUTE.Free(t); }
            return(new CK_OBJECT_HANDLE(derivedKeyHandle));
        }
Ejemplo n.º 17
0
        public static CK_OBJECT_HANDLE C_UnwrapKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, byte[] input, CK_ATTRIBUTE[] pTemplate)
        {
            CK_MECHANISM.Native   m = new CK_MECHANISM.Native(mech);
            CK_ATTRIBUTE.Native[] t = CK_ATTRIBUTE.ToNative(pTemplate);
            int  inSize             = input == null ? 0 : input.Length;
            uint unwrappedKeyHandle = 0;

            try { CKR_Exception.check(fl.C_UnwrapKey(session.Handle, m, key.Handle, input, inSize, t, t.Length, out unwrappedKeyHandle), "C_UnwrapKey"); }
            finally { m.Free(); CK_ATTRIBUTE.Free(t); }
            return(new CK_OBJECT_HANDLE(unwrappedKeyHandle));
        }
Ejemplo n.º 18
0
 public static void C_DigestKey(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key)
 {
     CKR_Exception.check(fl.C_DigestKey(session.Handle, key.Handle), "C_DigestKey");
 }
Ejemplo n.º 19
0
        public static CK_OBJECT_HANDLE C_DeriveKey(CK_SESSION_HANDLE session, CK_MECHANISM mech, CK_OBJECT_HANDLE key, CK_ATTRIBUTE[] pTemplate)
        {
            CK_MECHANISM.Native m      = new CK_MECHANISM.Native(mech);
            CK_ATTRIBUTE.Native t      = CK_ATTRIBUTE.ToNative(pTemplate);
            uint  derivedKeyHandle     = 0;
            ulong derivedKeyHandleUnix = 0;

            try { CKR_Exception.check(isWindows ?
                                      LibraryWindows.fl.C_DeriveKey(session.Handle, m.windows, key.Handle, t.windows, t.Length, out derivedKeyHandle):
                                      LibraryUnix.fl.C_DeriveKey(session.Handle, ref m.unix, key.Handle, t.unix, t.Length, out derivedKeyHandleUnix)
                                      , "C_DeriveKey"); }
            finally { m.Free(); CK_ATTRIBUTE.Free(t); }
            return(new CK_OBJECT_HANDLE(isWindows ? derivedKeyHandle : (uint)derivedKeyHandleUnix));
        }
Ejemplo n.º 20
0
 public static void C_DestroyObject(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj)
 {
     CKR_Exception.check(fl.C_DestroyObject(session.Handle, obj.Handle), "C_DestroyObject");
 }