(* -*- tuareg -*- *) (* Minimum expected version: nettle-2.0 (as in Debian Squeeze) *) #use "stubgen.ml" let types = [ "net_nettle_cipher_t", abstract_ptr "net_nettle_destroy_cipher"; "net_nettle_cipher_ctx_t", abstract_ptr "net_nettle_free"; "net_nettle_gcm_aes_ctx_t", abstract_ptr "net_nettle_free"; "net_nettle_hash_t", abstract_ptr "net_nettle_destroy_hash"; "net_nettle_hash_ctx_t", abstract_ptr "net_nettle_free"; ] let standard ?(optional=false) ?(options=[]) decl = let (name, result, params) = parse decl in (name, params @ [ "result", (if result = "void" then `Return_ignore else `Return), result ], (if optional then [ `Optional ] else []) @ options ) let functions = [ standard "void net_nettle_ciphers \ (OUT net_nettle_cipher_t array cipher_list, \ OUT_IGNORE cipher_list array_size cipher_list_size)"; standard "void net_ext_ciphers \ (OUT net_nettle_cipher_t array cipher_list, \ OUT_IGNORE cipher_list array_size cipher_list_size)"; standard "const ztstr net_nettle_cipher_name \ (net_nettle_cipher_t cipher)"; standard "net_nettle_cipher_ctx_t net_nettle_create_cipher_ctx \ (net_nettle_cipher_t cipher)"; standard "void net_nettle_set_encrypt_key \ (net_nettle_cipher_t cipher, \ net_nettle_cipher_ctx_t ctx, \ 1 stringbuf_size key_length, \ 1 stringbuf key)"; standard "void net_nettle_set_decrypt_key \ (net_nettle_cipher_t cipher, \ net_nettle_cipher_ctx_t ctx, \ 1 stringbuf_size key_length, \ 1 stringbuf key)"; standard "void net_nettle_encrypt \ (net_nettle_cipher_t cipher, \ net_nettle_cipher_ctx_t ctx, \ uint length, \ 1 bigarray dst, \ 1 bigarray src)"; standard "void net_nettle_decrypt \ (net_nettle_cipher_t cipher, \ net_nettle_cipher_ctx_t ctx, \ uint length, \ 1 bigarray dst, \ 1 bigarray src)"; standard "net_nettle_gcm_aes_ctx_t net_nettle_gcm_aes_init \ ()"; standard ~optional:true "void nettle_gcm_aes_set_key \ (net_nettle_gcm_aes_ctx_t ctx, \ 1 stringbuf_size key_length, \ 1 stringbuf key)"; standard ~optional:true "void nettle_gcm_aes_set_iv \ (net_nettle_gcm_aes_ctx_t ctx, \ 1 stringbuf_size iv_length, \ 1 stringbuf iv)"; standard ~optional:true "void nettle_gcm_aes_update \ (net_nettle_gcm_aes_ctx_t ctx, \ 1 stringbuf_size data_length, \ 1 stringbuf data)"; standard ~optional:true "void nettle_gcm_aes_encrypt \ (net_nettle_gcm_aes_ctx_t ctx, \ uint length, \ 1 bigarray dst, \ 1 bigarray src)"; standard ~optional:true "void nettle_gcm_aes_decrypt \ (net_nettle_gcm_aes_ctx_t ctx, \ uint length, \ 1 bigarray dst, \ 1 bigarray src)"; standard ~optional:true "void nettle_gcm_aes_digest \ (net_nettle_gcm_aes_ctx_t ctx, \ 1 stringbuf_size length, \ 1 stringbuf mac)"; standard "bool net_have_gcm_aes()"; standard "void net_nettle_hashes \ (OUT net_nettle_hash_t array hash_list, \ OUT_IGNORE hash_list array_size hash_list_size)"; standard "const ztstr net_nettle_hash_name \ (net_nettle_hash_t hash)"; standard "net_nettle_hash_ctx_t net_nettle_create_hash_ctx \ (net_nettle_hash_t hash)"; standard "void net_nettle_hash_init \ (net_nettle_hash_t hash, \ net_nettle_hash_ctx_t ctx)"; standard "void net_nettle_hash_update \ (net_nettle_hash_t hash, \ net_nettle_hash_ctx_t ctx, \ 1 bigarray_size length, \ 1 bigarray src)"; standard "void net_nettle_hash_digest \ (net_nettle_hash_t hash, \ net_nettle_hash_ctx_t ctx, \ 1 stringbuf_size length, \ 1 stringbuf src)"; ] let optional_types = [ ] let optional_functions = [ "nettle_gcm_aes_set_key"; "nettle_gcm_aes_set_iv"; "nettle_gcm_aes_update"; "nettle_gcm_aes_encrypt"; "nettle_gcm_aes_decrypt"; "nettle_gcm_aes_digest"; "nettle_ciphers"; (* actually a variable *) "nettle_hashes"; (* actually a variable *) ] let () = generate ~c_file:"nettle.c" ~ml_file:"nettle.ml" ~mli_file:"nettle.mli" ~modname:"nettls_nettle_bindings" ~types ~functions ~optional_functions ~optional_types ~free:[] ~init:[] ~hashes:[] ~enum_of_string:[] ()