CKR_BUFFER_TOO_SMALL = 0x00000150 - PullRequest
       4

CKR_BUFFER_TOO_SMALL = 0x00000150

0 голосов
/ 16 мая 2011

Я хочу PInvoke C_Encrypt () "pkcs # 11" из .dll:

[DllImport("cryptoki.dll", SetLastError = true)]
private static extern UInt32 C_Encrypt(CK_SESSION_HANDLE hSession,IntPtr pData,CK_ULONG ulDataLen,out IntPtr pEncryptedData,out CK_ULONG pulEncryptedData);

/*
.... Main
in which I initialize the encryption parametrs with C_EncyptInit
*/ 
CK_BYTE[] text = new CK_BYTE[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x08, 0x09 };

System.UInt32 t, tt = (System.UInt32)text.Length;
IntPtr pdata = Marshal.AllocHGlobal(text.Length);
Marshal.Copy(text, 0, pdata, text.Length);

IntPtr chif = IntPtr.Zero;
tt = (System.UInt32)Marshal.SizeOf(pdata);
rv = C_Encrypt(h, pdata, tt, out chif, out t);

помогите пожалуйста

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

Я решил проблему самостоятельно:

  [DllImport("D:/Program Files/Eracom/ProtectToolkit C SDK/bin/sw/cryptoki.dll", SetLastError = true)]
        private static extern UInt32 C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE[] pData, CK_ULONG ulDataLen, CK_BYTE[] pEncryptedData,ref CK_ULONG pulEncryptedData);

наслаждаться

0 голосов
/ 16 мая 2011

Здесь много разных проблем.

  1. Ваша подпись P / Invoke неверна.Последние два параметра не являются параметрами out.Функция C_Encrypt запишет зашифрованные данные в эти параметры, но вам нужно выделить и передать их самостоятельно.
  2. Вам нужно выделить данные для chif, а затем передать размер, выделенный для chif как последний параметр t.Это коренная причина ошибки, которую вы видите.
  3. Nit: Ваши имена переменных сбивают с толку, и вы, кажется, где-то перепутали tt и t, так как назначаете tt дважды.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...