package pkcs11-driver

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file pkcs11_CBC_ENCRYPT_DATA_PARAMS.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(** Helper to define [CK_*_CBC_ENCRYPT_DATA_PARAMS] *)

open Ctypes
open Ctypes_helpers

module type HIGHER = sig
  type t =
    { iv: string
    ; data: string
    }
  [@@deriving ord,yojson]
end

module type PARAM = sig
  val name: string

  val size: int
end

module Make(Param : PARAM)(Higher : HIGHER) =
struct
  type _t
  type t = _t structure
  let t: t typ = structure Param.name

  let iv_size = Param.size

  let (-:) typ label = smart_field t label typ
  let iv = array iv_size Pkcs11_CK_BYTE.typ -: "iv"
  let pData = Reachable_ptr.typ Pkcs11_CK_BYTE.typ -: "pData"
  let length = ulong -: "length"
  let () = seal t

  let make u =
    let open Higher in
    let t = make t in
    (* Build the variable length string *)
    make_string u.data t length pData;

    (* Copy the fixed length string *)
    if String.length u.iv <> iv_size
    then invalid_arg "CBC_ENCRYPT_DATA_PARAMS: invalid IV size.";
    string_copy u.iv iv_size (CArray.start (getf t iv));
    t

  let view t =
    let open Higher in
    { iv = string_from_carray (getf t iv)
    ; data =
        string_from_ptr
          ~length:(getf t length |> Unsigned.ULong.to_int)
          (Reachable_ptr.getf t pData)
    }
end

module CK_DES_CBC_ENCRYPT_DATA_PARAMS =
  Make
    (struct
      let name = "CK_DES_CBC_ENCRYPT_DATA_PARAMS"

      let size = 8
    end)
    (P11_des_cbc_encrypt_data_params)

module CK_AES_CBC_ENCRYPT_DATA_PARAMS =
  Make
    (struct
      let name = "CK_AES_CBC_ENCRYPT_DATA_PARAMS"

      let size = 16
    end)
    (P11_aes_cbc_encrypt_data_params)
OCaml

Innovation. Community. Security.