(* -*- tuareg -*- *) (* The minimum tested version is gnutls-2.8.6, as found in Debian Squeeze *) #use "stubgen.ml" let types = [ "gnutls_cipher_algorithm_t", `Abstract_enum; "gnutls_kx_algorithm_t", `Abstract_enum; "gnutls_mac_algorithm_t", `Abstract_enum; "gnutls_compression_method_t", `Abstract_enum; "gnutls_pk_algorithm_t", `Abstract_enum; "gnutls_sign_algorithm_t", `Abstract_enum; "gnutls_certificate_type_t", `Abstract_enum; "gnutls_digest_algorithm_t", `Same_as "gnutls_mac_algorithm_t"; "gnutls_session_t", abstract_ptr "b_free_session"; "gnutls_dh_params_t", abstract_ptr "gnutls_dh_params_deinit"; (* "gnutls_ecdh_params_t", `Abstract_ptr; *) (* "gnutls_rsa_params_t", `Abstract_ptr; *) "gnutls_priority_t", abstract_ptr "gnutls_priority_deinit"; "gnutls_cipher_hd_t", abstract_ptr "gnutls_cipher_deinit"; "gnutls_x509_privkey_t", abstract_ptr "gnutls_x509_privkey_deinit"; "gnutls_x509_crl_t", abstract_ptr "gnutls_x509_crl_deinit"; "gnutls_x509_crt_t", abstract_ptr "gnutls_x509_crt_deinit"; (* "gnutls_x509_crq_t", `Abstract_ptr; (* in x509.h *) *) "gnutls_openpgp_keyring_t", abstract_ptr "gnutls_openpgp_keyring_deinit"; "gnutls_certificate_credentials_t", abstract_ptr "gnutls_certificate_free_credentials"; "gnutls_anon_server_credentials_t", abstract_ptr "gnutls_anon_free_server_credentials"; "gnutls_anon_client_credentials_t", abstract_ptr "gnutls_anon_free_client_credentials"; "gnutls_srp_server_credentials_t", abstract_ptr "gnutls_srp_free_server_credentials"; "gnutls_srp_client_credentials_t", abstract_ptr "gnutls_srp_free_client_credentials"; "gnutls_psk_server_credentials_t", abstract_ptr "gnutls_psk_free_server_credentials"; "gnutls_psk_client_credentials_t", abstract_ptr "gnutls_psk_free_client_credentials"; (* "gnutls_openpgp_crt_t", `Abstract_ptr; *) (* "gnutls_openpgp_privkey_t", `Abstract_ptr; *) (* "gnutls_pkcs11_privkey_t", `Abstract_ptr; *) (* "gnutls_datum_t", `Abstract_ptr; *) (* "gnutls_params_function", `Abstract_val; (* CHECK *)*) "gnutls_pubkey_t", abstract_ptr "gnutls_pubkey_deinit"; "gnutls_privkey_t", abstract_ptr "gnutls_privkey_deinit"; "gnutls_params_type_t", `Enum [ "GNUTLS_PARAMS_|RSA_EXPORT"; "GNUTLS_PARAMS_|DH"; "?GNUTLS_PARAMS_|ECDH" ]; "gnutls_credentials_type_t", `Enum [ "GNUTLS_CRD_|CERTIFICATE"; "GNUTLS_CRD_|ANON"; "GNUTLS_CRD_|SRP"; "GNUTLS_CRD_|PSK"; "GNUTLS_CRD_|IA" ]; "gnutls_alert_level_t", `Enum [ "GNUTLS_AL_|WARNING"; "GNUTLS_AL_|FATAL" ]; "gnutls_alert_description_t",`Enum [ "GNUTLS_A_|CLOSE_NOTIFY"; "GNUTLS_A_|UNEXPECTED_MESSAGE"; "GNUTLS_A_|BAD_RECORD_MAC"; "GNUTLS_A_|DECRYPTION_FAILED"; "GNUTLS_A_|RECORD_OVERFLOW"; "GNUTLS_A_|DECOMPRESSION_FAILURE"; "GNUTLS_A_|HANDSHAKE_FAILURE"; "GNUTLS_A_|SSL3_NO_CERTIFICATE"; "GNUTLS_A_|BAD_CERTIFICATE"; "GNUTLS_A_|UNSUPPORTED_CERTIFICATE"; "GNUTLS_A_|CERTIFICATE_REVOKED"; "GNUTLS_A_|CERTIFICATE_EXPIRED"; "GNUTLS_A_|CERTIFICATE_UNKNOWN"; "GNUTLS_A_|ILLEGAL_PARAMETER"; "GNUTLS_A_|UNKNOWN_CA"; "GNUTLS_A_|ACCESS_DENIED"; "GNUTLS_A_|DECODE_ERROR"; "GNUTLS_A_|DECRYPT_ERROR"; "GNUTLS_A_|EXPORT_RESTRICTION"; "GNUTLS_A_|PROTOCOL_VERSION"; "GNUTLS_A_|INSUFFICIENT_SECURITY"; "GNUTLS_A_|INTERNAL_ERROR"; "GNUTLS_A_|USER_CANCELED"; "GNUTLS_A_|NO_RENEGOTIATION"; "GNUTLS_A_|UNSUPPORTED_EXTENSION"; "GNUTLS_A_|CERTIFICATE_UNOBTAINABLE"; "GNUTLS_A_|UNRECOGNIZED_NAME"; "GNUTLS_A_|UNKNOWN_PSK_IDENTITY"; "?GNUTLS_A_|NO_APPLICATION_PROTOCOL"; "?GNUTLS_A_|INNER_APPLICATION_FAILURE"; "?GNUTLS_A_|INNER_APPLICATION_VERIFICATION"; ]; "gnutls_handshake_description_t", `Enum [ "GNUTLS_HANDSHAKE_|HELLO_REQUEST"; "GNUTLS_HANDSHAKE_|CLIENT_HELLO"; "GNUTLS_HANDSHAKE_|SERVER_HELLO"; "?GNUTLS_HANDSHAKE_|HELLO_VERIFY_REQUEST"; "?GNUTLS_HANDSHAKE_|NEW_SESSION_TICKET"; "GNUTLS_HANDSHAKE_|CERTIFICATE_PKT"; "GNUTLS_HANDSHAKE_|SERVER_KEY_EXCHANGE"; "GNUTLS_HANDSHAKE_|CERTIFICATE_REQUEST"; "GNUTLS_HANDSHAKE_|SERVER_HELLO_DONE"; "GNUTLS_HANDSHAKE_|CERTIFICATE_VERIFY"; "GNUTLS_HANDSHAKE_|CLIENT_KEY_EXCHANGE"; "GNUTLS_HANDSHAKE_|FINISHED"; "GNUTLS_HANDSHAKE_|SUPPLEMENTAL"; "?GNUTLS_HANDSHAKE_|CHANGE_CIPHER_SPEC"; "?GNUTLS_HANDSHAKE_|CLIENT_HELLO_V2"; ]; "gnutls_certificate_status_t", `Flags [ "GNUTLS_CERT_|INVALID"; "GNUTLS_CERT_|REVOKED"; "GNUTLS_CERT_|SIGNER_NOT_FOUND"; "GNUTLS_CERT_|SIGNER_NOT_CA"; "GNUTLS_CERT_|INSECURE_ALGORITHM"; "GNUTLS_CERT_|NOT_ACTIVATED"; "GNUTLS_CERT_|EXPIRED"; "?GNUTLS_CERT_|SIGNATURE_FAILURE"; "?GNUTLS_CERT_|REVOCATION_DATA_SUPERSEDED"; "?GNUTLS_CERT_|UNEXPECTED_OWNER"; "?GNUTLS_CERT_|REVOCATION_DATA_ISSUED_IN_FUTURE"; "?GNUTLS_CERT_|SIGNER_CONSTRAINTS_FAILURE"; "?GNUTLS_CERT_|MISMATCH"; "?GNUTLS_CERT_|PURPOSE_MISMATCH"; ]; "gnutls_certificate_request_t", `Enum [ "GNUTLS_CERT_|IGNORE"; "GNUTLS_CERT_|REQUEST"; "GNUTLS_CERT_|REQUIRE"; ]; "gnutls_certificate_verify_flags", `Flags [ "GNUTLS_VERIFY_|DISABLE_CA_SIGN"; "GNUTLS_VERIFY_|ALLOW_X509_V1_CA_CRT"; "GNUTLS_VERIFY_|DO_NOT_ALLOW_SAME"; "GNUTLS_VERIFY_|ALLOW_ANY_X509_V1_CA_CRT"; "GNUTLS_VERIFY_|ALLOW_SIGN_RSA_MD2"; "GNUTLS_VERIFY_|ALLOW_SIGN_RSA_MD5"; "GNUTLS_VERIFY_|DISABLE_TIME_CHECKS"; "?GNUTLS_VERIFY_|DISABLE_TRUSTED_TIME_CHECKS"; "?GNUTLS_VERIFY_|DO_NOT_ALLOW_X509_V1_CA_CRT"; "?GNUTLS_VERIFY_|DISABLE_CRL_CHECKS"; ]; "gnutls_openpgp_crt_status_t", `Enum [ "GNUTLS_OPENPGP_|CERT"; "GNUTLS_OPENPGP_|CERT_FINGERPRINT" ]; "gnutls_close_request_t", `Enum [ "GNUTLS_SHUT_|RDWR"; "GNUTLS_SHUT_|WR"; ]; "gnutls_protocol_t", `Enum [ "GNUTLS_|SSL3"; "GNUTLS_|TLS1_0"; "GNUTLS_|TLS1_1"; "GNUTLS_|TLS1_2"; "?GNUTLS_|DTLS0_9"; "?GNUTLS_|DTLS1_0"; "?GNUTLS_|DTLS1_2"; "GNUTLS_|VERSION_UNKNOWN"; ]; "gnutls_x509_crt_fmt_t", `Enum [ "GNUTLS_X509_FMT_|DER"; "GNUTLS_X509_FMT_|PEM" ]; "gnutls_certificate_print_formats_t", `Enum [ "GNUTLS_CRT_PRINT_|FULL"; "GNUTLS_CRT_PRINT_|ONELINE"; "GNUTLS_CRT_PRINT_|UNSIGNED_FULL"; "?GNUTLS_CRT_PRINT_|COMPACT"; "?GNUTLS_CRT_PRINT_|FULL_NUMBERS"; ]; "gnutls_ecc_curve_t", `Enum [ "GNUTLS_ECC_CURVE_|INVALID"; "GNUTLS_ECC_CURVE_|SECP224R1"; "GNUTLS_ECC_CURVE_|SECP256R1"; "GNUTLS_ECC_CURVE_|SECP384R1"; "GNUTLS_ECC_CURVE_|SECP521R1"; "GNUTLS_ECC_CURVE_|SECP192R1"; ]; "gnutls_sec_param_t", `Enum [ "GNUTLS_SEC_PARAM_|UNKNOWN"; "GNUTLS_SEC_PARAM_|WEAK"; "GNUTLS_SEC_PARAM_|LOW"; "GNUTLS_SEC_PARAM_|NORMAL";(*=MEDIUM*) "GNUTLS_SEC_PARAM_|HIGH"; "GNUTLS_SEC_PARAM_|ULTRA"; "?GNUTLS_SEC_PARAM_|INSECURE"; "?GNUTLS_SEC_PARAM_|EXPORT"; "?GNUTLS_SEC_PARAM_|VERY_WEAK"; "?GNUTLS_SEC_PARAM_|LEGACY"; ]; "gnutls_init_flags", `Flags [ "GNUTLS_|SERVER"; "GNUTLS_|CLIENT"; "?GNUTLS_|DATAGRAM"; "?GNUTLS_|NONBLOCK"; "?GNUTLS_|NO_EXTENSIONS"; "?GNUTLS_|NO_REPLAY_PROTECTION"; ]; "gnutls_server_name_type_t", `Enum [ "GNUTLS_NAME_|DNS" ]; "gnutls_supplemental_data_format_type_t", `Enum [ "?GNUTLS_SUPPLEMENTAL_|UNKNOWN"; ]; "gnutls_psk_key_flags", `Enum [ "GNUTLS_PSK_KEY_|RAW"; "GNUTLS_PSK_KEY_|HEX" ]; "gnutls_x509_subject_alt_name_t", `Enum [ "GNUTLS_SAN_|DNSNAME"; "GNUTLS_SAN_|RFC822NAME"; "GNUTLS_SAN_|URI"; "GNUTLS_SAN_|IPADDRESS"; "GNUTLS_SAN_|OTHERNAME"; "GNUTLS_SAN_|DN"; "GNUTLS_SAN_|OTHERNAME_XMPP"; ]; "gnutls_privkey_type_t", `Enum [ "GNUTLS_PRIVKEY_|X509"; "GNUTLS_PRIVKEY_|OPENPGP"; "GNUTLS_PRIVKEY_|PKCS11"; "?GNUTLS_PRIVKEY_|EXT" ]; "key_usage", `Flags [ "GNUTLS_KEY_|DIGITAL_SIGNATURE"; "GNUTLS_KEY_|NON_REPUDIATION"; "GNUTLS_KEY_|KEY_ENCIPHERMENT"; "GNUTLS_KEY_|DATA_ENCIPHERMENT"; "GNUTLS_KEY_|KEY_AGREEMENT"; "GNUTLS_KEY_|KEY_CERT_SIGN"; "GNUTLS_KEY_|CRL_SIGN"; "GNUTLS_KEY_|ENCIPHER_ONLY"; "GNUTLS_KEY_|DECIPHER_ONLY"; ]; "gnutls_channel_binding_t", `Enum [ "GNUTLS_CB_|TLS_UNIQUE" ]; "gnutls_info_access_what_t", `Enum [ "GNUTLS_IA_|ACCESSMETHOD_OID"; "GNUTLS_IA_|ACCESSLOCATION_GENERALNAME_TYPE"; "GNUTLS_IA_|URI"; "GNUTLS_IA_|OCSP_URI"; "GNUTLS_IA_|CAISSUERS_URI"; "?GNUTLS_IA_|UNKNOWN"; ]; "gnutls_certificate_import_flags", `Flags [ "?GNUTLS_X509_CRT_LIST_|FAIL_IF_UNSORTED"; "GNUTLS_X509_CRT_LIST_|IMPORT_FAIL_IF_EXCEED"; "?GNUTLS_X509_CRT_LIST_|SORT"; ]; "error_code", `Enum [ "GNUTLS_E_|SUCCESS"; "GNUTLS_E_|UNKNOWN_COMPRESSION_ALGORITHM"; "GNUTLS_E_|UNKNOWN_CIPHER_TYPE"; "GNUTLS_E_|LARGE_PACKET"; "GNUTLS_E_|UNSUPPORTED_VERSION_PACKET"; "GNUTLS_E_|UNEXPECTED_PACKET_LENGTH"; "GNUTLS_E_|INVALID_SESSION"; "GNUTLS_E_|FATAL_ALERT_RECEIVED"; "GNUTLS_E_|UNEXPECTED_PACKET"; "GNUTLS_E_|WARNING_ALERT_RECEIVED"; "GNUTLS_E_|ERROR_IN_FINISHED_PACKET"; "GNUTLS_E_|UNEXPECTED_HANDSHAKE_PACKET"; "GNUTLS_E_|UNKNOWN_CIPHER_SUITE"; "GNUTLS_E_|UNWANTED_ALGORITHM"; "GNUTLS_E_|MPI_SCAN_FAILED"; "GNUTLS_E_|DECRYPTION_FAILED"; "GNUTLS_E_|MEMORY_ERROR"; "GNUTLS_E_|DECOMPRESSION_FAILED"; "GNUTLS_E_|COMPRESSION_FAILED"; "GNUTLS_E_|AGAIN"; "GNUTLS_E_|EXPIRED"; "GNUTLS_E_|DB_ERROR"; "GNUTLS_E_|SRP_PWD_ERROR"; "GNUTLS_E_|INSUFFICIENT_CREDENTIALS"; "GNUTLS_E_|HASH_FAILED"; "GNUTLS_E_|BASE64_DECODING_ERROR"; "GNUTLS_E_|MPI_PRINT_FAILED"; "GNUTLS_E_|REHANDSHAKE"; "GNUTLS_E_|GOT_APPLICATION_DATA"; "GNUTLS_E_|RECORD_LIMIT_REACHED"; "GNUTLS_E_|ENCRYPTION_FAILED"; "GNUTLS_E_|PK_ENCRYPTION_FAILED"; "GNUTLS_E_|PK_DECRYPTION_FAILED"; "GNUTLS_E_|PK_SIGN_FAILED"; "GNUTLS_E_|X509_UNSUPPORTED_CRITICAL_EXTENSION"; "GNUTLS_E_|KEY_USAGE_VIOLATION"; "GNUTLS_E_|NO_CERTIFICATE_FOUND"; "GNUTLS_E_|INVALID_REQUEST"; "GNUTLS_E_|SHORT_MEMORY_BUFFER"; "GNUTLS_E_|INTERRUPTED"; "GNUTLS_E_|PUSH_ERROR"; "GNUTLS_E_|PULL_ERROR"; "GNUTLS_E_|RECEIVED_ILLEGAL_PARAMETER"; "GNUTLS_E_|REQUESTED_DATA_NOT_AVAILABLE"; "GNUTLS_E_|PKCS1_WRONG_PAD"; "GNUTLS_E_|RECEIVED_ILLEGAL_EXTENSION"; "GNUTLS_E_|INTERNAL_ERROR"; "GNUTLS_E_|DH_PRIME_UNACCEPTABLE"; "GNUTLS_E_|FILE_ERROR"; "GNUTLS_E_|TOO_MANY_EMPTY_PACKETS"; "GNUTLS_E_|UNKNOWN_PK_ALGORITHM"; "?GNUTLS_E_|TOO_MANY_HANDSHAKE_PACKETS"; "GNUTLS_E_|NO_TEMPORARY_RSA_PARAMS"; "GNUTLS_E_|NO_COMPRESSION_ALGORITHMS"; "GNUTLS_E_|NO_CIPHER_SUITES"; "GNUTLS_E_|OPENPGP_GETKEY_FAILED"; "GNUTLS_E_|PK_SIG_VERIFY_FAILED"; "GNUTLS_E_|ILLEGAL_SRP_USERNAME"; "GNUTLS_E_|SRP_PWD_PARSING_ERROR"; "GNUTLS_E_|NO_TEMPORARY_DH_PARAMS"; "GNUTLS_E_|ASN1_ELEMENT_NOT_FOUND"; "GNUTLS_E_|ASN1_IDENTIFIER_NOT_FOUND"; "GNUTLS_E_|ASN1_DER_ERROR"; "GNUTLS_E_|ASN1_VALUE_NOT_FOUND"; "GNUTLS_E_|ASN1_GENERIC_ERROR"; "GNUTLS_E_|ASN1_VALUE_NOT_VALID"; "GNUTLS_E_|ASN1_TAG_ERROR"; "GNUTLS_E_|ASN1_TAG_IMPLICIT"; "GNUTLS_E_|ASN1_TYPE_ANY_ERROR"; "GNUTLS_E_|ASN1_SYNTAX_ERROR"; "GNUTLS_E_|ASN1_DER_OVERFLOW"; "GNUTLS_E_|OPENPGP_UID_REVOKED"; "GNUTLS_E_|CERTIFICATE_ERROR"; (* "GNUTLS_E_|X509_CERTIFICATE_ERROR"; *) "GNUTLS_E_|CERTIFICATE_KEY_MISMATCH"; "GNUTLS_E_|UNSUPPORTED_CERTIFICATE_TYPE"; "GNUTLS_E_|X509_UNKNOWN_SAN"; "GNUTLS_E_|OPENPGP_FINGERPRINT_UNSUPPORTED"; "GNUTLS_E_|X509_UNSUPPORTED_ATTRIBUTE"; "GNUTLS_E_|UNKNOWN_HASH_ALGORITHM"; "GNUTLS_E_|UNKNOWN_PKCS_CONTENT_TYPE"; "GNUTLS_E_|UNKNOWN_PKCS_BAG_TYPE"; "GNUTLS_E_|INVALID_PASSWORD"; "GNUTLS_E_|MAC_VERIFY_FAILED"; "GNUTLS_E_|CONSTRAINT_ERROR"; "GNUTLS_E_|WARNING_IA_IPHF_RECEIVED"; "GNUTLS_E_|WARNING_IA_FPHF_RECEIVED"; "GNUTLS_E_|IA_VERIFY_FAILED"; "GNUTLS_E_|UNKNOWN_ALGORITHM"; "?GNUTLS_E_|UNSUPPORTED_SIGNATURE_ALGORITHM"; "?GNUTLS_E_|SAFE_RENEGOTIATION_FAILED"; "?GNUTLS_E_|UNSAFE_RENEGOTIATION_DENIED"; "?GNUTLS_E_|UNKNOWN_SRP_USERNAME"; "?GNUTLS_E_|PREMATURE_TERMINATION"; "GNUTLS_E_|BASE64_ENCODING_ERROR"; (* "GNUTLS_E_|INCOMPATIBLE_GCRYPT_LIBRARY"; *) "GNUTLS_E_|INCOMPATIBLE_CRYPTO_LIBRARY"; "GNUTLS_E_|INCOMPATIBLE_LIBTASN1_LIBRARY"; "GNUTLS_E_|OPENPGP_KEYRING_ERROR"; "GNUTLS_E_|X509_UNSUPPORTED_OID"; "GNUTLS_E_|RANDOM_FAILED"; "GNUTLS_E_|BASE64_UNEXPECTED_HEADER_ERROR"; "GNUTLS_E_|OPENPGP_SUBKEY_ERROR"; "GNUTLS_E_|CRYPTO_ALREADY_REGISTERED"; "GNUTLS_E_|HANDSHAKE_TOO_LARGE"; "?GNUTLS_E_|CRYPTODEV_IOCTL_ERROR"; "?GNUTLS_E_|CRYPTODEV_DEVICE_ERROR"; "?GNUTLS_E_|CHANNEL_BINDING_NOT_AVAILABLE"; "?GNUTLS_E_|BAD_COOKIE"; "?GNUTLS_E_|OPENPGP_PREFERRED_KEY_ERROR"; "?GNUTLS_E_|INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL"; "?GNUTLS_E_|HEARTBEAT_PONG_RECEIVED"; "?GNUTLS_E_|HEARTBEAT_PING_RECEIVED"; "?GNUTLS_E_|PKCS11_ERROR"; "?GNUTLS_E_|PKCS11_LOAD_ERROR"; "?GNUTLS_E_|PARSING_ERROR"; "?GNUTLS_E_|PKCS11_PIN_ERROR"; "?GNUTLS_E_|PKCS11_SLOT_ERROR"; "?GNUTLS_E_|LOCKING_ERROR"; "?GNUTLS_E_|PKCS11_ATTRIBUTE_ERROR"; "?GNUTLS_E_|PKCS11_DEVICE_ERROR"; "?GNUTLS_E_|PKCS11_DATA_ERROR"; "?GNUTLS_E_|PKCS11_UNSUPPORTED_FEATURE_ERROR"; "?GNUTLS_E_|PKCS11_KEY_ERROR"; "?GNUTLS_E_|PKCS11_PIN_EXPIRED"; "?GNUTLS_E_|PKCS11_PIN_LOCKED"; "?GNUTLS_E_|PKCS11_SESSION_ERROR"; "?GNUTLS_E_|PKCS11_SIGNATURE_ERROR"; "?GNUTLS_E_|PKCS11_TOKEN_ERROR"; "?GNUTLS_E_|PKCS11_USER_ERROR"; "?GNUTLS_E_|CRYPTO_INIT_FAILED"; "?GNUTLS_E_|TIMEDOUT"; "?GNUTLS_E_|USER_ERROR"; "?GNUTLS_E_|ECC_NO_SUPPORTED_CURVES"; "?GNUTLS_E_|ECC_UNSUPPORTED_CURVE"; "?GNUTLS_E_|PKCS11_REQUESTED_OBJECT_NOT_AVAILBLE"; "?GNUTLS_E_|CERTIFICATE_LIST_UNSORTED"; "?GNUTLS_E_|ILLEGAL_PARAMETER"; "?GNUTLS_E_|NO_PRIORITIES_WERE_SET"; "?GNUTLS_E_|X509_UNSUPPORTED_EXTENSION"; "?GNUTLS_E_|SESSION_EOF"; "?GNUTLS_E_|TPM_ERROR"; "?GNUTLS_E_|TPM_KEY_PASSWORD_ERROR"; "?GNUTLS_E_|TPM_SRK_PASSWORD_ERROR"; "?GNUTLS_E_|TPM_SESSION_ERROR"; "?GNUTLS_E_|TPM_KEY_NOT_FOUND"; "?GNUTLS_E_|TPM_UNINITIALIZED"; "?GNUTLS_E_|NO_CERTIFICATE_STATUS"; "?GNUTLS_E_|OCSP_RESPONSE_ERROR"; "?GNUTLS_E_|RANDOM_DEVICE_ERROR"; "?GNUTLS_E_|AUTH_ERROR"; "?GNUTLS_E_|NO_APPLICATION_PROTOCOL"; "?GNUTLS_E_|SOCKETS_INIT_ERROR"; "?GNUTLS_E_|KEY_IMPORT_FAILED"; "?GNUTLS_E_|SELF_TEST_ERROR"; "?GNUTLS_E_|NO_SELF_TEST"; "?GNUTLS_E_|LIB_IN_ERROR_STATE"; "?GNUTLS_E_|PK_GENERATION_ERROR"; "?GNUTLS_E_|IDNA_ERROR"; "?GNUTLS_E_|NEED_FALLBACK"; "GNUTLS_E_|UNIMPLEMENTED_FEATURE"; ]; "gnutls_pkcs_encrypt_flags_t", `Flags [ "GNUTLS_PKCS_|PLAIN"; "GNUTLS_PKCS_|USE_PKCS12_3DES"; "GNUTLS_PKCS_|USE_PKCS12_ARCFOUR"; "GNUTLS_PKCS_|USE_PKCS12_RC2_40"; "GNUTLS_PKCS_|USE_PBES2_3DES"; "?GNUTLS_PKCS_|USE_PBES2_DES"; "?GNUTLS_PKCS_|USE_PBES2_AES_128"; "?GNUTLS_PKCS_|USE_PBES2_AES_192"; "?GNUTLS_PKCS_|USE_PBES2_AES_256"; "?GNUTLS_PKCS_|NULL_PASSWORD"; ]; "empty_flags", `Flags [ "DUMMY" ]; "str_datum", `Manual("type str_datum = string"); "str_datum_p", `Manual("type str_datum_p = string"); "const_str_datum_p", `Manual("type const_str_datum_p = string"); ] (* standard parser: - all params are input - net_gnutls_error_code = int is checked *) (* abbrevs: - uint = unsigned int - ztstr = zero-terminated string - <elt> ztlist = zero-terminated list (of ints or enums) - <elt> array = array of something - array_size - <id> bigarray = a data buffer as bigarray - <id> bigarray_size = the size of the bigarray - (bigarray_datum = a gnutls_datum_t * as bigarray) - str_datum = a gnutls_datum_t * as string - file_descr Output values are not deallocated by the generated wrapper code. *) let standard ?(ask_for_size=false) ?(optional=false) ?(options=[]) decl = let (name, result, params) = parse decl in let params1 = List.map (fun (n,tag,ty) -> if ask_for_size && (ty = "1 bigarray_size" || ty = "1 stringbuf_size" || ty = "1 ztstringbuf_size") then (n, `Out_ignore, ty) else if ask_for_size && (ty = "1 stringbuf" || ty = "1 ztstringbuf") then (n, `Out, ty) else (n, tag, ty) ) params in (name, params1 @ [ "result", (if result = "void" || result = "error_code" then `Return_ignore else `Return ), result ], [`Pre("nettls_init();")] @ (if ask_for_size then [ `GNUTLS_ask_for_size ] else []) @ (if result = "error_code" || has_prefix ~prefix:"error_code/" result then [ `Post("net_gnutls_error_check(RESULT);") ] else [] ) @ (if optional then [ `Optional ] else []) @ options ) (* let standard_blocking decl = let (name, params, directives) = standard decl in (name, params, directives @ [ `Blocking ]) *) let functions = [ standard "void nettls_init()"; standard "void nettls_deinit()"; standard "bool gnutls_error_is_fatal(error_code error)"; standard "const ztstr gnutls_strerror(error_code error)"; standard "const ztstr gnutls_strerror_name(error_code error)"; "gnutls_check_version", [ "req_version", `In_ignore, "const_charp"; "result", `Return, "const ztstr" ], [ `Pre("req_version__c = NULL;"); `Pre("nettls_init();"); ]; (**********************************************************************) (* Logging *) (**********************************************************************) standard "void gnutls_global_set_log_level (int level)"; (* TODO: gnutls_global_set_log_function *) (* TODO: gnutls_global_set_audit_log_function *) (**********************************************************************) (* Session and transport basics *) (**********************************************************************) "gnutls_init", [ "session", `Out, "gnutls_session_t"; "flags", `In, "gnutls_init_flags"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Post("attach_session_callbacks(session__c);"); ]; standard "void gnutls_certificate_server_set_request \ (gnutls_session_t session, gnutls_certificate_request_t req)"; standard "void gnutls_certificate_send_x509_rdn_sequence \ (gnutls_session_t session, bool status)"; "gnutls_certificate_verify_peers2", [ "session", `In, "gnutls_session_t"; "status", `Out, "gnutls_certificate_status_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; "gnutls_certificate_get_peers", [ "session", `In, "gnutls_session_t"; "list_size", `Out_ignore, "result array_size_uint"; "result", `Return, "const str_datum array"; ], [ `Pre("nettls_init();") ]; (* standard "void net_gnutls_transport_set_int \ (gnutls_session_t session, file_descr fd)"; *) standard "bool gnutls_record_get_direction (gnutls_session_t session)"; standard "error_code gnutls_handshake (gnutls_session_t session)"; standard "error_code gnutls_rehandshake (gnutls_session_t session)"; standard ~options: [ `Pre("if (data_size__c < 0 || \ data_size__c > caml_ba_byte_size(Caml_ba_array_val(data))) \ invalid_argument(\"gnutls_record_send\");" ) ] "error_code/uint gnutls_record_send \ (gnutls_session_t session, 1 bigarray data, int data_size)"; standard "error_code/uint gnutls_record_recv \ (gnutls_session_t session, 1 bigarray data, 1 bigarray_size data_size)"; (* TODO: gnutls_record_recv_seq *) standard "uint gnutls_record_check_pending (gnutls_session_t session)"; standard "error_code gnutls_bye \ (gnutls_session_t session, gnutls_close_request_t how)"; (**********************************************************************) (* Alerts *) (**********************************************************************) standard "gnutls_alert_description_t gnutls_alert_get (gnutls_session_t session)"; standard "const ztstr gnutls_alert_get_name (gnutls_alert_description_t alert)"; standard ~optional:true "const ztstr gnutls_alert_get_strname (gnutls_alert_description_t alert)"; standard "error_code gnutls_alert_send (gnutls_session_t session, \ gnutls_alert_level_t level, \ gnutls_alert_description_t desc)"; standard "error_code gnutls_alert_send_appropriate \ (gnutls_session_t session, int err)"; "gnutls_error_to_alert", [ "error", `In, "error_code"; "level", `Out, "int/gnutls_alert_level_t"; "result", `Return, "gnutls_alert_description_t"; ], [ `Pre("nettls_init();") ]; (**********************************************************************) (* Priority strings *) (**********************************************************************) "gnutls_priority_init", [ "prority_cache", `Out, "gnutls_priority_t"; "priorities", `In, "ztstr"; "err_pos", `In_ignore, "const char **"; "result", `Return_ignore, "error_code"; ], [ `Declare("const char *err_pos_dummy;"); `Pre("nettls_init();"); `Pre("err_pos__c = &err_pos_dummy;"); `Post("net_gnutls_error_check(RESULT);") ]; "gnutls_priority_get_cipher_suite_index", [ "pcache", `In, "gnutls_priority_t"; "idx", `In, "uint"; "sidx", `Out, "uint"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard "error_code gnutls_priority_set \ (gnutls_session_t session, gnutls_priority_t priority)"; standard "error_code gnutls_set_default_priority (gnutls_session_t session)"; (**********************************************************************) (* sec_param *) (**********************************************************************) standard ~optional:true "uint gnutls_sec_param_to_pk_bits (gnutls_pk_algorithm_t algo, \ gnutls_sec_param_t param)"; standard ~optional:true "gnutls_sec_param_t gnutls_pk_bits_to_sec_param \ (gnutls_pk_algorithm_t algo, \ uint bits)"; standard ~optional:true "const ztstr gnutls_sec_param_get_name (gnutls_sec_param_t param)"; (**********************************************************************) (* Session serialization client *) (**********************************************************************) standard "error_code gnutls_session_set_data \ (gnutls_session_t session, \ 1 stringbuf session_data, 1 stringbuf_size session_data_size)"; standard ~ask_for_size:true "error_code gnutls_session_get_data \ (gnutls_session_t session, \ 1 stringbuf session_data, 1 stringbuf_size session_data_size)"; standard ~ask_for_size:true "error_code gnutls_session_get_id \ (gnutls_session_t session, \ 1 stringbuf session_id, 1 stringbuf_size session_id_size)"; standard "bool gnutls_session_is_resumed (gnutls_session_t session)"; (**********************************************************************) (* Session serialization server *) (**********************************************************************) (* TODO: gnutls_db_set_retrieve/remove/store_function *) standard "void gnutls_db_set_cache_expiration \ (gnutls_session_t session, int seconds)"; standard "void gnutls_db_remove_session (gnutls_session_t session)"; standard "int gnutls_db_check_entry \ (gnutls_session_t session, str_datum session_entry)"; (**********************************************************************) (* Session tickets *) (**********************************************************************) "gnutls_session_ticket_key_generate", [ "key", `Out, "str_datum"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard ~optional:true "error_code gnutls_session_ticket_enable_client \ (gnutls_session_t session)"; standard ~optional:true "error_code gnutls_session_ticket_enable_server \ (gnutls_session_t session, str_datum_p key)"; (**********************************************************************) (* PRF *) (**********************************************************************) standard "error_code gnutls_prf \ (gnutls_session_t session, \ 1 bigarray_size label_size, 1 bigarray label, \ bool server_random_first, \ 2 bigarray_size extra_size, 2 bigarray extra, \ 3 bigarray_size outsize, 3 bigarray out)"; standard "error_code gnutls_prf_raw \ (gnutls_session_t session, \ 1 bigarray_size label_size, 1 bigarray label, \ 2 bigarray_size seed_size, 2 bigarray seed, \ 3 bigarray_size outsize, 3 bigarray out)"; (**********************************************************************) (* Channel binding *) (**********************************************************************) "gnutls_session_channel_binding", [ "session", `In, "gnutls_session_t"; "cbtype", `In, "gnutls_channel_binding_t"; "cb", `Out, "str_datum"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; (**********************************************************************) (* Elliptic curves *) (**********************************************************************) standard ~optional:true "const ztstr gnutls_ecc_curve_get_name (gnutls_ecc_curve_t curve)"; standard ~optional:true "int gnutls_ecc_curve_get_size (gnutls_ecc_curve_t curve)"; standard ~optional:true "gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session)"; (**********************************************************************) (* Algorithms *) (**********************************************************************) standard "gnutls_cipher_algorithm_t gnutls_cipher_get (gnutls_session_t session)"; standard "gnutls_kx_algorithm_t gnutls_kx_get (gnutls_session_t session)"; standard "gnutls_mac_algorithm_t gnutls_mac_get (gnutls_session_t session)"; standard "gnutls_compression_method_t gnutls_compression_get \ (gnutls_session_t session)"; standard "gnutls_certificate_type_t gnutls_certificate_type_get \ (gnutls_session_t session)"; standard "uint gnutls_cipher_get_key_size (gnutls_cipher_algorithm_t algorithm)"; standard "uint gnutls_mac_get_key_size (gnutls_mac_algorithm_t algorithm)"; standard "const ztstr gnutls_cipher_get_name (gnutls_cipher_algorithm_t algorithm)"; standard "const ztstr gnutls_mac_get_name (gnutls_mac_algorithm_t algorithm)"; standard "const ztstr gnutls_compression_get_name (gnutls_compression_method_t algo)"; standard "const ztstr gnutls_kx_get_name (gnutls_kx_algorithm_t algorithm)"; standard "const ztstr gnutls_certificate_type_get_name (gnutls_certificate_type_t ty)"; standard "const ztstr gnutls_pk_get_name (gnutls_pk_algorithm_t algorithm)"; standard "const ztstr gnutls_sign_get_name (gnutls_sign_algorithm_t algorithm)"; standard "gnutls_mac_algorithm_t gnutls_mac_get_id(ztstr name)"; standard "gnutls_compression_method_t gnutls_compression_get_id(ztstr name)"; standard "gnutls_cipher_algorithm_t gnutls_cipher_get_id(ztstr name)"; standard "gnutls_kx_algorithm_t gnutls_kx_get_id(ztstr name)"; standard "gnutls_protocol_t gnutls_protocol_get_id(ztstr name)"; standard "gnutls_certificate_type_t gnutls_certificate_type_get_id(ztstr name)"; standard "gnutls_pk_algorithm_t gnutls_pk_get_id(ztstr name)"; standard "gnutls_sign_algorithm_t gnutls_sign_get_id(ztstr name)"; standard "const gnutls_cipher_algorithm_t ztlist gnutls_cipher_list ()"; standard "const gnutls_mac_algorithm_t ztlist gnutls_mac_list()"; standard "const gnutls_compression_method_t ztlist gnutls_compression_list()"; standard "const gnutls_protocol_t ztlist gnutls_protocol_list()"; standard "const gnutls_certificate_type_t ztlist gnutls_certificate_type_list()"; standard "const gnutls_kx_algorithm_t ztlist gnutls_kx_list()"; standard "const gnutls_pk_algorithm_t ztlist gnutls_pk_list()"; standard "const gnutls_sign_algorithm_t ztlist gnutls_sign_list()"; standard "gnutls_protocol_t gnutls_protocol_get_version \ (gnutls_session_t session)"; standard "const ztstr gnutls_protocol_get_name (gnutls_protocol_t version)"; standard "const ztstr gnutls_cipher_suite_get_name \ (gnutls_kx_algorithm_t kx_algorithm, \ gnutls_cipher_algorithm_t cipher_algorithm, \ gnutls_mac_algorithm_t mac_algorithm)"; (* TODO: gnutls_cipher_suite_info *) (**********************************************************************) (* Symmetric cryptography *) (**********************************************************************) standard "bool net_have_crypto()"; standard ~optional:true "error_code gnutls_cipher_init \ (OUT gnutls_cipher_hd_t handle, \ gnutls_cipher_algorithm_t cipher, \ str_datum_p key, \ str_datum_p iv)"; standard ~optional:true "error_code gnutls_cipher_encrypt2 \ (gnutls_cipher_hd_t handle, \ 1 bigarray text, \ 1 bigarray_size textlen, \ 2 bigarray ciphertext, \ 2 bigarray_size ciphertextlen)"; standard ~optional:true "error_code gnutls_cipher_decrypt2 \ (gnutls_cipher_hd_t handle, \ 1 bigarray ciphertext, \ 2 bigarray_size ciphertextlen, \ 2 bigarray text, \ 2 bigarray_size textlen)"; standard ~optional:true "error_code gnutls_cipher_add_auth \ (gnutls_cipher_hd_t handle, \ 1 stringbuf text, \ 1 stringbuf_size text_size)"; standard ~optional:true "error_code gnutls_cipher_tag \ (gnutls_cipher_hd_t handle, \ 1 stringbuf tag, \ 1 stringbuf_size tag_size)"; (**********************************************************************) (* Handshake details *) (**********************************************************************) standard "void gnutls_handshake_set_private_extensions \ (gnutls_session_t session, bool allow)"; standard "gnutls_handshake_description_t gnutls_handshake_get_last_out \ (gnutls_session_t session)"; standard "gnutls_handshake_description_t gnutls_handshake_get_last_in \ (gnutls_session_t session)"; standard "void gnutls_handshake_set_max_packet_length \ (gnutls_session_t session, uint max)"; (* TODO: gnutls_handshake_set_post_client_hello_function *) (**********************************************************************) (* Session details *) (**********************************************************************) "gnutls_sign_algorithm_get_requested", [ "session", `In, "gnutls_session_t"; "indx", `In, "uint"; "algo", `Out, "gnutls_sign_algorithm_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard "void gnutls_session_enable_compatibility_mode \ (gnutls_session_t session)"; standard "void gnutls_record_disable_padding (gnutls_session_t session)"; standard "uint gnutls_record_get_max_size (gnutls_session_t session)"; standard "error_code gnutls_record_set_max_size \ (gnutls_session_t session, uint size)"; standard "error_code gnutls_server_name_set \ (gnutls_session_t session, \ gnutls_server_name_type_t type, \ 1 stringbuf name, 1 stringbuf_size name_length)"; standard ~ask_for_size:true "error_code gnutls_server_name_get \ (gnutls_session_t session, \ 1 ztstringbuf data, \ 1 ztstringbuf_size data_length, \ OUT gnutls_server_name_type_t ty, \ uint indx)"; standard ~optional:true "bool gnutls_safe_renegotiation_status (gnutls_session_t session)"; standard "const ztstr gnutls_supplemental_get_name \ (gnutls_supplemental_data_format_type_t ty)"; standard "void gnutls_credentials_clear (gnutls_session_t session)"; (**********************************************************************) (* General helpers *) (**********************************************************************) "gnutls_key_generate", [ "key", `Out, "str_datum"; "key_size", `In, "uint"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard ~ask_for_size:true "error_code gnutls_fingerprint \ (gnutls_digest_algorithm_t algo, str_datum_p data, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; (* TODO: gnutls_random_art *) (**********************************************************************) (* Certificate credentials *) (**********************************************************************) "gnutls_certificate_allocate_credentials", [ "sc", `Out, "gnutls_certificate_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard ~optional:true "error_code gnutls_certificate_set_x509_system_trust \ (gnutls_certificate_credentials_t cred)"; standard "error_code gnutls_certificate_set_x509_trust_file \ (gnutls_certificate_credentials_t cred, \ ztstr cafile, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_trust_mem \ (gnutls_certificate_credentials_t res, \ str_datum_p ca, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_crl_file \ (gnutls_certificate_credentials_t cred, \ ztstr crlfile, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_crl_mem \ (gnutls_certificate_credentials_t res, \ str_datum_p crl, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_key_file \ (gnutls_certificate_credentials_t cred, \ ztstr certfile, \ ztstr keyfile, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_key_mem \ (gnutls_certificate_credentials_t res, \ str_datum_p cert, \ str_datum_p key, \ gnutls_x509_crt_fmt_t type)"; standard "error_code gnutls_certificate_set_x509_simple_pkcs12_file \ (gnutls_certificate_credentials_t res, \ ztstr pkcs12file, \ gnutls_x509_crt_fmt_t type, \ ztstr password)"; standard "error_code gnutls_certificate_set_x509_simple_pkcs12_mem \ (gnutls_certificate_credentials_t res, \ str_datum_p p12blob, \ gnutls_x509_crt_fmt_t type, \ ztstr password)"; standard "error_code gnutls_certificate_set_x509_key \ (gnutls_certificate_credentials_t res, \ gnutls_x509_crt_t array cert_list, \ cert_list array_size cert_list_size, \ gnutls_x509_privkey_t key)"; (* NB: certs and key are copied by this function *) standard "error_code/int gnutls_certificate_set_x509_trust \ (gnutls_certificate_credentials_t res, \ gnutls_x509_crt_t array ca_list, \ ca_list array_size ca_list_size)"; (* NB: certs are copied by this function *) standard "error_code/int gnutls_certificate_set_x509_crl \ (gnutls_certificate_credentials_t res, \ gnutls_x509_crl_t array crl_list, \ crl_list array_size crl_list_size)"; (* NB: crls are copied by this function *) (* "gnutls_certificate_get_openpgp_keyring", [ "sc", `In, "gnutls_certificate_credentials_t"; "keyring", `Out, "gnutls_openpgp_keyring_t"; "result", `Return_ignore, "void"; ], [ ]; *) (**********************************************************************) (* Anon credentials *) (**********************************************************************) "gnutls_anon_allocate_server_credentials", [ "sc", `Out, "gnutls_anon_server_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; (* TODO: gnutls_anon_set_server_params_function *) "gnutls_anon_allocate_client_credentials", [ "sc", `Out, "gnutls_anon_client_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; (**********************************************************************) (* Credential parameters (DH) *) (**********************************************************************) "gnutls_dh_params_init", [ "dh_params", `Out, "gnutls_dh_params_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_dh_params_import_raw \ (gnutls_dh_params_t dh_params, \ str_datum_p prime, \ str_datum_p generator)"; standard "error_code gnutls_dh_params_import_pkcs3 \ (gnutls_dh_params_t params, \ str_datum_p pkcs3_params, \ gnutls_x509_crt_fmt_t format)"; standard "error_code gnutls_dh_params_generate2 \ (gnutls_dh_params_t params, uint bits)"; (* TODO: gnutls_dh_params_export_* *) standard "error_code gnutls_dh_params_cpy \ (gnutls_dh_params_t dst, gnutls_dh_params_t src)"; standard "void gnutls_certificate_set_dh_params \ (gnutls_certificate_credentials_t res, \ gnutls_dh_params_t dh_params)"; standard "void gnutls_anon_set_server_dh_params \ (gnutls_anon_server_credentials_t res, \ gnutls_dh_params_t dh_params)"; standard "void gnutls_psk_set_server_dh_params \ (gnutls_psk_server_credentials_t res, \ gnutls_dh_params_t dh_params)"; standard "void gnutls_dh_set_prime_bits \ (gnutls_session_t session, uint bits)"; standard "int gnutls_dh_get_secret_bits (gnutls_session_t session)"; standard "int gnutls_dh_get_peers_public_bits (gnutls_session_t session)"; standard "int gnutls_dh_get_prime_bits (gnutls_session_t session)"; "gnutls_dh_get_group", [ "session", `In, "gnutls_session_t"; "raw_gen", `Out, "str_datum"; "raw_prime", `Out, "str_datum"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; "gnutls_dh_get_pubkey", [ "session", `In, "gnutls_session_t"; "raw_key", `Out, "str_datum"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; (* TODO: gnutls_certificate_set_params_function *) (* TODO: gnutls_anon_set_params_function *) (* TODO: gnutls_psk_set_params_function *) (**********************************************************************) (* Certificate details *) (**********************************************************************) standard "gnutls_credentials_type_t gnutls_auth_get_type \ (gnutls_session_t session)"; standard "gnutls_credentials_type_t gnutls_auth_server_get_type \ (gnutls_session_t session)"; standard "gnutls_credentials_type_t gnutls_auth_client_get_type \ (gnutls_session_t session)"; (* TODO: gnutls_certificate_set_retrieve_function *) (* TODO: gnutls_certificate_set_verify_function *) standard "const_str_datum_p gnutls_certificate_get_ours (gnutls_session_t session)"; standard "double gnutls_certificate_activation_time_peers \ (gnutls_session_t session)"; standard "double gnutls_certificate_expiration_time_peers \ (gnutls_session_t session)"; standard "error_code/bool gnutls_certificate_client_get_request_status \ (gnutls_session_t session)"; (**********************************************************************) (* X509 details *) (**********************************************************************) standard ~optional:true "error_code gnutls_certificate_get_issuer \ (gnutls_certificate_credentials_t sc, \ gnutls_x509_crt_t cert, OUT gnutls_x509_crt_t issuer, \ empty_flags flags)"; (* TODO_ gnutls_certificate_free_* *) standard "void gnutls_certificate_set_verify_flags \ (gnutls_certificate_credentials_t res, \ gnutls_certificate_verify_flags flags)"; standard "void gnutls_certificate_set_verify_limits \ (gnutls_certificate_credentials_t res, \ uint max_bits, \ uint max_depth)"; (**********************************************************************) (* OpenPGP details *) (**********************************************************************) standard "void gnutls_openpgp_send_cert \ (gnutls_session_t session, gnutls_openpgp_crt_status_t status)"; (**********************************************************************) (* SRP *) (**********************************************************************) (* NB Some Linux distros do not include SRP *) "gnutls_srp_allocate_client_credentials", [ "sc", `Out, "gnutls_srp_client_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard ~optional:true "error_code gnutls_srp_set_client_credentials \ (gnutls_srp_client_credentials_t res, \ ztstr username, ztstr password)"; "gnutls_srp_allocate_server_credentials", [ "sc", `Out, "gnutls_srp_server_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; standard ~optional:true "error_code gnutls_srp_set_server_credentials_file \ (gnutls_srp_server_credentials_t res, \ ztstr password_file, ztstr password_conf_file)"; standard ~optional:true "const ztstr gnutls_srp_server_get_username (gnutls_session_t session)"; standard ~optional:true "void gnutls_srp_set_prime_bits (gnutls_session_t session, uint bits)"; "gnutls_srp_verifier", [ "username", `In, "ztstr"; "password", `In, "ztstr"; "salt", `In, "str_datum_p"; "generator", `In, "str_datum_p"; "prime", `In, "str_datum_p"; "res", `Out, "str_datum"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional ]; (* TODO: access to gnutls_srp_<N>_group_prime/generator *) (* TODO: gnutls_srp_set_server_credentials_function gnutls_srp_set_client_credentials_function The "special" base64 functions *) (**********************************************************************) (* PSK *) (**********************************************************************) "gnutls_psk_allocate_client_credentials", [ "sc", `Out, "gnutls_psk_client_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_psk_set_client_credentials \ (gnutls_psk_client_credentials_t res, \ ztstr username, \ str_datum_p key, \ gnutls_psk_key_flags flags)"; "gnutls_psk_allocate_server_credentials", [ "sc", `Out, "gnutls_psk_server_credentials_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_psk_set_server_credentials_file \ (gnutls_psk_server_credentials_t res, ztstr password_file)"; standard "error_code gnutls_psk_set_server_credentials_hint \ (gnutls_psk_server_credentials_t res, ztstr hint)"; standard "const ztstr gnutls_psk_server_get_username (gnutls_session_t session)"; standard "const ztstr gnutls_psk_client_get_hint (gnutls_session_t session)"; (* TODO: gnutls_psk_set_server_credentials_function gnutls_psk_set_client_credentials_function *) (* TODO: gnutls_psk_set_server_params_function *) (**********************************************************************) (* X509 certificate reading *) (**********************************************************************) "gnutls_x509_crt_init", [ "cert", `Out, "gnutls_x509_crt_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_x509_crt_import \ (gnutls_x509_crt_t cert, \ const_str_datum_p data, \ gnutls_x509_crt_fmt_t format)"; (* gnutls_x509_crt_list_import: in gnutls.c *) (* In the following, ask_for_size:true enables special handling of the "1 stringbuf" and "1 stringbuf_size" arguments. The function is first called with a NULL buffer pointer to get the size of the buffer, and then again with a buffer of the right size. The buffer is returned as string *) standard ~ask_for_size:true "error_code gnutls_x509_crt_export \ (gnutls_x509_crt_t cert, \ gnutls_x509_crt_fmt_t format, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_issuer_dn \ (gnutls_x509_crt_t cert, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_issuer_dn_oid \ (gnutls_x509_crt_t cert, int indx, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; (* int gnutls_x509_crt_get_issuer_dn_by_oid (gnutls_x509_crt_t cert, const char *oid, int indx, unsigned int raw_flag, void *buf, size_t * buf_size); *) (* FIXME: there is a null byte at the end of the returned string *) standard ~ask_for_size:true "error_code gnutls_x509_crt_get_dn \ (gnutls_x509_crt_t cert, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_dn_oid \ (gnutls_x509_crt_t cert, int indx, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; (* int gnutls_x509_crt_get_dn_by_oid (gnutls_x509_crt_t cert, const char *oid, int indx, unsigned int raw_flag, void *buf, size_t * buf_size); *) standard "bool gnutls_x509_crt_check_hostname \ (gnutls_x509_crt_t cert, const ztstr hostname)"; standard "error_code/gnutls_sign_algorithm_t \ gnutls_x509_crt_get_signature_algorithm \ (gnutls_x509_crt_t cert)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_signature \ (gnutls_x509_crt_t cert, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard "error_code/uint gnutls_x509_crt_get_version \ (gnutls_x509_crt_t cert)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_key_id \ (gnutls_x509_crt_t crt, \ empty_flags flags, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_authority_key_id \ (gnutls_x509_crt_t cert, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size, \ OUT ubool critical)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_subject_key_id \ (gnutls_x509_crt_t cert, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size, \ OUT ubool critical)"; standard ~ask_for_size:true ~optional:true "error_code gnutls_x509_crt_get_subject_unique_id \ (gnutls_x509_crt_t crt, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard ~ask_for_size:true ~optional:true "error_code gnutls_x509_crt_get_issuer_unique_id \ (gnutls_x509_crt_t crt, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard ~optional:true "error_code gnutls_x509_crt_get_authority_info_access \ (gnutls_x509_crt_t crt, \ uint seq, gnutls_info_access_what_t what, \ OUT str_datum data, \ OUT ubool critical)"; standard "double gnutls_x509_crt_get_activation_time(gnutls_x509_crt_t cert)"; standard "double gnutls_x509_crt_get_expiration_time (gnutls_x509_crt_t cert)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_serial \ (gnutls_x509_crt_t cert, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard "error_code/gnutls_pk_algorithm_t gnutls_x509_crt_get_pk_algorithm \ (gnutls_x509_crt_t cert, OUT uint bits)"; standard "error_code gnutls_x509_crt_get_pk_rsa_raw \ (gnutls_x509_crt_t crt, \ OUT str_datum m, OUT str_datum e)"; standard "error_code gnutls_x509_crt_get_pk_dsa_raw \ (gnutls_x509_crt_t crt, \ OUT str_datum p, OUT str_datum q, OUT str_datum g, OUT str_datum y)"; standard ~ask_for_size:true "error_code/gnutls_x509_subject_alt_name_t \ gnutls_x509_crt_get_subject_alt_name \ (gnutls_x509_crt_t cert, \ uint seq, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size, \ OUT ubool critical)"; (* int gnutls_x509_crt_get_subject_alt_name2 (gnutls_x509_crt_t cert, unsigned int seq, void *ret, size_t * ret_size, unsigned int *ret_type, unsigned int *critical); *) standard ~ask_for_size:true "error_code/gnutls_x509_subject_alt_name_t \ gnutls_x509_crt_get_subject_alt_othername_oid \ (gnutls_x509_crt_t cert, \ uint seq, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; standard ~ask_for_size:true ~optional:true "error_code/gnutls_x509_subject_alt_name_t \ gnutls_x509_crt_get_issuer_alt_name \ (gnutls_x509_crt_t cert, \ uint seq,\ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size, \ OUT ubool critical)"; (* int gnutls_x509_crt_get_issuer_alt_name2 (gnutls_x509_crt_t cert, unsigned int seq, void *ret, size_t * ret_size, unsigned int *ret_type, unsigned int *critical); *) standard ~ask_for_size:true ~optional:true "error_code/gnutls_x509_subject_alt_name_t \ gnutls_x509_crt_get_issuer_alt_othername_oid \ (gnutls_x509_crt_t cert, \ uint seq, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; standard "error_code gnutls_x509_crt_get_ca_status \ (gnutls_x509_crt_t cert, OUT ubool critical)"; standard "error_code gnutls_x509_crt_get_basic_constraints \ (gnutls_x509_crt_t cert, \ OUT ubool critical, OUT ubool ca, OUT int pathlen)"; standard "error_code gnutls_x509_crt_get_key_usage \ (gnutls_x509_crt_t cert, \ OUT key_usage key_usage, OUT ubool critical)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_extension_oid \ (gnutls_x509_crt_t cert, int indx, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size)"; (* standard ~ask_for_size:true "error_code gnutls_x509_crt_get_extension_by_oid \ (gnutls_x509_crt_t cert, const ztstr oid, int indx, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size, \ OUT ubool critical)"; *) standard ~ask_for_size:true "error_code gnutls_x509_crt_get_extension_info \ (gnutls_x509_crt_t cert, int indx, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size, \ OUT ubool critical)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_extension_data \ (gnutls_x509_crt_t cert, int indx, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; (* int gnutls_x509_crt_get_subject (gnutls_x509_crt_t cert, gnutls_x509_dn_t * dn); int gnutls_x509_crt_get_issuer (gnutls_x509_crt_t cert, gnutls_x509_dn_t * dn); int gnutls_x509_dn_get_rdn_ava (gnutls_x509_dn_t dn, int irdn, int iava, gnutls_x509_ava_st * ava); int gnutls_x509_dn_init (gnutls_x509_dn_t * dn); int gnutls_x509_dn_import (gnutls_x509_dn_t dn, const gnutls_datum_t * data); int gnutls_x509_dn_export (gnutls_x509_dn_t dn, gnutls_x509_crt_fmt_t format, void *output_data, size_t * output_data_size); void gnutls_x509_dn_deinit (gnutls_x509_dn_t dn); *) standard "bool gnutls_x509_crt_check_issuer \ (gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer)"; standard "error_code gnutls_x509_crt_list_verify \ (gnutls_x509_crt_t array cert_list, \ cert_list array_size cert_list_length, \ gnutls_x509_crt_t array ca_list, \ ca_list array_size ca_list_length, \ gnutls_x509_crl_t array crl_list, \ crl_list array_size crl_list_length, \ gnutls_certificate_verify_flags flags, \ OUT gnutls_certificate_status_t verify)"; standard "error_code gnutls_x509_crt_verify \ (gnutls_x509_crt_t cert, \ gnutls_x509_crt_t array ca_list, \ ca_list array_size ca_list_length, \ gnutls_certificate_verify_flags flags, \ OUT gnutls_certificate_status_t verify)"; standard "error_code gnutls_x509_crl_verify \ (gnutls_x509_crl_t crl, \ gnutls_x509_crt_t array ca_list, \ ca_list array_size ca_list_length, \ gnutls_certificate_verify_flags flags, \ OUT gnutls_certificate_status_t verify)"; standard "error_code/bool gnutls_x509_crt_check_revocation \ (gnutls_x509_crt_t cert, \ gnutls_x509_crl_t array crl_list, \ crl_list array_size crl_list_length)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_fingerprint \ (gnutls_x509_crt_t cert, \ gnutls_digest_algorithm_t algo, \ 1 stringbuf output_data, 1 stringbuf_size output_data_size)"; standard ~ask_for_size:true "error_code gnutls_x509_crt_get_key_purpose_oid \ (gnutls_x509_crt_t cert, \ int indx, \ 1 ztstringbuf output_data, 1 ztstringbuf_size output_data_size, \ OUT ubool critical)"; (**********************************************************************) (* X509 private keys *) (**********************************************************************) "gnutls_x509_privkey_init", [ "cert", `Out, "gnutls_x509_privkey_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_x509_privkey_import \ (gnutls_x509_privkey_t key, \ const_str_datum_p data, \ gnutls_x509_crt_fmt_t format)"; standard "error_code gnutls_x509_privkey_import_pkcs8 \ (gnutls_x509_privkey_t key, \ const_str_datum_p data, \ gnutls_x509_crt_fmt_t format, \ ztstr password, \ gnutls_pkcs_encrypt_flags_t flags);"; (**********************************************************************) (* X509 CRLs *) (**********************************************************************) "gnutls_x509_crl_init", [ "cert", `Out, "gnutls_x509_crl_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);") ]; standard "error_code gnutls_x509_crl_import \ (gnutls_x509_crl_t key, \ const_str_datum_p data, \ gnutls_x509_crt_fmt_t format)"; (**********************************************************************) (* Public key crypto functions *) (**********************************************************************) standard "bool net_have_pubkey()"; "gnutls_pubkey_init", [ "key", `Out, "gnutls_pubkey_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional; ]; "gnutls_privkey_init", [ "key", `Out, "gnutls_privkey_t"; "result", `Return_ignore, "error_code"; ], [ `Pre("nettls_init();"); `Post("net_gnutls_error_check(RESULT);"); `Optional; ]; standard ~optional:true "error_code gnutls_pubkey_import \ (gnutls_pubkey_t key, \ const_str_datum_p data, \ gnutls_x509_crt_fmt_t format)"; standard ~optional:true "error_code gnutls_pubkey_import_url \ (gnutls_pubkey_t key, \ const ztstr url, \ uint flags)"; standard ~optional:true "error_code gnutls_pubkey_import_privkey \ (gnutls_pubkey_t key, \ gnutls_privkey_t pkey, \ uint usage, \ uint flags)"; standard ~optional:true "error_code gnutls_privkey_import_x509 \ (gnutls_privkey_t key, \ gnutls_x509_privkey_t x509key, \ uint flags)"; standard ~optional:true "error_code gnutls_pubkey_encrypt_data \ (gnutls_pubkey_t key, \ uint flags, \ const_str_datum_p plaintext, \ OUT str_datum ciphertext)"; standard ~optional:true "error_code gnutls_privkey_decrypt_data \ (gnutls_privkey_t key, \ uint flags, \ const_str_datum_p ciphertext, \ OUT str_datum plaintext)"; standard ~optional:true "error_code gnutls_privkey_sign_data \ (gnutls_privkey_t key, \ gnutls_digest_algorithm_t hash, \ uint flags, \ const_str_datum_p data, \ OUT str_datum signature)"; standard ~optional:true "error_code gnutls_pubkey_verify_data2 \ (gnutls_pubkey_t key, \ gnutls_sign_algorithm_t algo, \ uint flags, \ const_str_datum_p data, \ const_str_datum_p signature)"; ] let optional_functions = (* also generate checks for these *) [ "gnutls_transport_set_pull_timeout_function"; "gnutls_certificate_set_verify_function"; "gnutls_x509_crl_list_import"; ] let optional_types = [ "gnutls_sec_param_t"; "gnutls_channel_binding_t"; "gnutls_ecc_curve_t"; "gnutls_info_access_what_t"; "gnutls_privkey_type_t"; "gnutls_cipher_hd_t"; ] let () = generate ~c_file:"gnutls.c" ~ml_file:"gnutls.ml" ~mli_file:"gnutls.mli" ~modname:"nettls_gnutls_bindings" ~types ~functions ~optional_functions ~optional_types ~free: [ "str_datum"; "str_datum_p" ] ~init: [] ~hashes:[ "Certificate"; "Srp_client"; "Srp_server"; "Anon_client"; "Anon_server"; "Psk_client"; "Psk_server" ] ~enum_of_string:[ "b_error_of_name", "error_code" ] ()