123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103(* The list of all kerberos encryption types is found in krb5.hin
Of those, we only support
#define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011 /**< RFC 3962 */
#define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012 /**< RFC 3962 */
#define ENCTYPE_ARCFOUR_HMAC 0x0017
*)moduleStable=structopen!Core.Core_stablemoduleV1=structmoduleT=structtypet=|KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96|KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96|KRB5_ENCTYPE_ARCFOUR_HMAC[@@derivingbin_io,compare,sexp]endincludeTincludeComparator.V1.Make(T)endendopenCoremoduleRaw=structexternalof_string:string->intKrb_result.t="caml_krb5_string_to_enctype"endmoduleC=structtypet=Stable.V1.t=|KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96|KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96|KRB5_ENCTYPE_ARCFOUR_HMAC[@@derivingcompare,enumerate,sexp_of]typecomparator_witness=Stable.V1.comparator_witnessletcomparator=Stable.V1.comparatorletof_int=function|17->KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96|18->KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96|23->KRB5_ENCTYPE_ARCFOUR_HMAC|i->failwithf"Invalid or unsupported krb5 enctype. %i"i();;letto_int=function|KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96->17|KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96->18|KRB5_ENCTYPE_ARCFOUR_HMAC->23;;letof_strings=Raw.of_strings|>Krb_result.to_or_error~info:"[krb5_string_to_enctype]"|>Result.map~f:of_int|>ok_exn;;letto_string=function|KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96->"aes128-cts-hmac-sha1-96"|KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96->"aes256-cts-hmac-sha1-96"|KRB5_ENCTYPE_ARCFOUR_HMAC->"arcfour-hmac";;let%test_unit_=List.iterall~f:(funt->[%test_result:string](to_stringt)~expect:(sexp_of_tt|>Sexp.to_string|>String.lowercase|>String.tr~target:'_'~replacement:'-'|>String.chop_prefix_exn~prefix:"krb5-enctype-"));;let%test_unit_=List.iterall~f:(funt->lett'=of_string(to_stringt)in[%test_result:t]~expect:tt');;letsexp_of_tt=String.sexp_of_t(to_stringt)lett_of_sexps=of_string(String.t_of_sexps)endincludeCincludeComparable.Make_using_comparator(C)letaes128_cts_hmac_sha1_96=KRB5_ENCTYPE_AES128_CTS_HMAC_SHA1_96letaes256_cts_hmac_sha1_96=KRB5_ENCTYPE_AES256_CTS_HMAC_SHA1_96letarcfour_hmac=KRB5_ENCTYPE_ARCFOUR_HMACletarg=Command.Arg_type.of_alist_exn~list_values_in_help:false(List.mapall~f:(funt->to_stringt,t));;