123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191typekind=[`AES|`DES|`DES3|`EC_private|`EC_public|`RSA_private|`RSA_public|`DSA_private|`DSA_public|`Secret](** Representation used internally, it prevents repetitions. *)moduleInternal_kind=structtypet=[|`Secret|`RSA_public|`RSA_private|`DSA_private|`DSA_public|`EC_public|`EC_private|`Generic_secret|`Fixed_length_secret][@@derivingord]letof_kind:kind->t=function|`Secret->`Secret|`RSA_public->`RSA_public|`RSA_private->`RSA_private|`DSA_public->`DSA_public|`DSA_private->`DSA_private|`EC_public->`EC_public|`EC_private->`EC_private|`AES->`Generic_secret|`DES->`Fixed_length_secret|`DES3->`Fixed_length_secretendopenP11.Attribute_typemoduleKind_map=Map.Make(Internal_kind)letpx=Packxletobject_=[pCKA_CLASS;]letstorage=[pCKA_TOKEN;pCKA_PRIVATE;pCKA_MODIFIABLE;pCKA_LABEL;]@object_letkey=[pCKA_KEY_TYPE;pCKA_ID;pCKA_START_DATE;pCKA_END_DATE;pCKA_DERIVE;pCKA_LOCAL;pCKA_KEY_GEN_MECHANISM;pCKA_ALLOWED_MECHANISMS;]@storageletpublic=[pCKA_SUBJECT;pCKA_ENCRYPT;pCKA_VERIFY;pCKA_VERIFY_RECOVER;pCKA_WRAP;pCKA_TRUSTED;pCKA_WRAP_TEMPLATE;]@keyletprivate_=[pCKA_SUBJECT;pCKA_SENSITIVE;pCKA_DECRYPT;pCKA_SIGN;pCKA_SIGN_RECOVER;pCKA_UNWRAP;pCKA_EXTRACTABLE;pCKA_ALWAYS_SENSITIVE;pCKA_NEVER_EXTRACTABLE;pCKA_WRAP_WITH_TRUSTED;pCKA_UNWRAP_TEMPLATE;pCKA_ALWAYS_AUTHENTICATE;]@keyletsecret=[pCKA_SENSITIVE;pCKA_ENCRYPT;pCKA_DECRYPT;pCKA_SIGN;pCKA_VERIFY;pCKA_WRAP;pCKA_UNWRAP;pCKA_EXTRACTABLE;pCKA_ALWAYS_SENSITIVE;pCKA_NEVER_EXTRACTABLE;pCKA_CHECK_VALUE;pCKA_WRAP_WITH_TRUSTED;pCKA_TRUSTED;pCKA_WRAP_TEMPLATE;pCKA_UNWRAP_TEMPLATE;]@keyletrsa_public=[pCKA_MODULUS;pCKA_MODULUS_BITS;pCKA_PUBLIC_EXPONENT;]@publicletrsa_private=[pCKA_MODULUS;pCKA_PUBLIC_EXPONENT;pCKA_PRIVATE_EXPONENT;pCKA_PRIME_1;pCKA_PRIME_2;pCKA_EXPONENT_1;pCKA_EXPONENT_2;pCKA_COEFFICIENT;]@private_letdsa_public=[pCKA_PRIME;pCKA_SUBPRIME;pCKA_BASE]@publicletdsa_private=[pCKA_VALUE]@dsa_public@private_letec_public=[pCKA_EC_PARAMS;pCKA_EC_POINT;]@publicletec_private=[pCKA_EC_PARAMS;pCKA_VALUE;]@private_letgeneric_secret=[pCKA_VALUE;pCKA_VALUE_LEN;]@secretletfixed_length_secret=[pCKA_VALUE;]@secretletkind_attributes:P11.Attribute_types.tKind_map.t=letaddkvm=Kind_map.addkvminKind_map.empty|>add`Secretsecret|>add`RSA_publicrsa_public|>add`RSA_privatersa_private|>add`DSA_publicdsa_public|>add`DSA_privatedsa_private|>add`EC_publicec_public|>add`EC_privateec_private|>add`Generic_secretgeneric_secret|>add`Fixed_length_secretfixed_length_secretletpossiblekind=try(Kind_map.find(Internal_kind.of_kindkind)kind_attributes)withNot_found->[]