4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
30 #pragma ident "%Z%%M% %I% %E% SMI"
36 #include <sys/types.h>
38 typedef struct ami_oid
{
48 typedef struct ami_rdn_seq
*ami_dname
;
50 typedef struct ami_name
{
51 unsigned short choice
;
52 #define distinguishedName_chosen 1
54 struct ami_rdn_seq
*distinguishedName
;
58 typedef struct ami_rdn_seq
{
59 struct ami_rdn_seq
*next
;
60 struct ami_rdname
*value
;
63 typedef struct ami_rdname
{
64 struct ami_rdname
*next
;
65 struct ami_ava
*value
;
68 typedef Any ami_attr_value
;
70 typedef struct ami_ava
{
71 struct ami_oid
*objid
;
72 ami_attr_value
*value
;
75 typedef struct ami_attr_list
{
76 struct ami_attr_list
*next
;
77 struct ami_attr
*value
;
80 typedef struct ami_attr
{
82 struct ami_attr_value_set
*values
;
85 typedef struct ami_attr_value_set
{
86 struct ami_attr_value_set
*next
;
87 ami_attr_value
*value
;
88 } *ami_attr_value_set
;
90 typedef struct CaseIgnoreString
{
91 unsigned short choice
;
92 #define CaseIgnoreString_t61String_chosen 1
93 #define CaseIgnoreString_printableString_chosen 2
95 char *CaseIgnoreString_t61String
;
96 char *CaseIgnoreString_printableString
;
100 typedef CaseIgnoreString ami_case_ignore_string
;
102 typedef char *ami_printable_string
;
104 typedef struct ami_cert_pair
{
105 struct ami_cert
*forward
; /* NULL for not present */
106 struct ami_cert
*reverse
; /* NULL for not present */
109 typedef struct ami_cert_serialnum
{
110 unsigned short length
;
111 unsigned char *value
;
112 } ami_cert_serialnum
;
114 typedef struct ami_cert_info
{
115 unsigned char bit_mask
;
116 #define version_present 0x80
117 #define extensions_present 0x40
118 int version
; /* default assumed if omitted */
122 ami_cert_serialnum serial
;
123 struct ami_algid
*signature
;
124 struct ami_name
*issuer
;
125 struct ami_validity
*validity
;
126 struct ami_name
*subject
;
127 struct ami_pubkey_info
*pubKeyInfo
;
128 struct ami_uid
*issuerUID
; /* NULL for not present */
129 struct ami_uid
*subjectUID
; /* NULL for not present */
130 struct ami_cert_extn_list
*extensions
; /* optional */
133 typedef struct ami_bitstring
{
134 unsigned int length
; /* number of significant bits */
135 unsigned char *value
;
138 typedef struct ami_cert
{
140 struct ami_algid
*algorithm
;
141 ami_bitstring signature
;
144 typedef struct ami_uid
{
145 unsigned int length
; /* number of significant bits */
146 unsigned char *value
;
149 typedef struct ami_octetstring
{
151 unsigned char *value
;
154 typedef int ami_cert_version
;
155 #define CertificateVersion_v1 0
156 #define CertificateVersion_v2 1
157 #define CertificateVersion_v3 2
159 typedef char amiBoolean
;
162 short year
; /* YYYY format when used for GeneralizedTime */
163 /* YY format when used for UTCTime */
170 short mindiff
; /* UTC +/- minute differential */
171 amiBoolean utc
; /* TRUE means UTC time */
174 typedef GeneralizedTime UTCTime
;
176 typedef struct ami_validity
{
181 typedef struct ami_pubkey_info
{
182 struct ami_algid
*algorithm
;
183 ami_bitstring pubKey
;
186 typedef Any ami_alg_params
;
188 typedef struct ami_algid
{
189 struct ami_oid
*algorithm
;
190 ami_alg_params
*parameters
; /* NULL for not present */
194 typedef struct ami_cert_extn
{
195 unsigned char bit_mask
;
196 #define critical_present 0x80
197 struct ami_oid
*extend
;
199 ami_octetstring extnValue
;
202 typedef struct ami_cert_extn_list
{
203 struct ami_cert_extn_list
*next
;
204 struct ami_cert_extn
*value
;
205 } *ami_cert_extn_list
;
207 typedef struct ami_cert_list_contents
{
208 unsigned char bit_mask
;
209 #define nextUpdate_present 0x80
210 #define CertListContents_revokedCertificates_present 0x40
216 struct _seqof1
*next
;
218 ami_cert_serialnum userCertificate
;
219 UTCTime revocationDate
;
221 } *CertListContents_revokedCertificates
;
222 } ami_cert_list_contents
;
224 typedef struct ami_cert_list
{
225 ami_cert_list_contents certListContents
;
227 ami_bitstring signature
;
230 typedef struct ami_rc2_cbc_param
{
231 unsigned short choice
;
233 #define sequence_chosen 2
245 typedef struct ami_keypkg_info
{
246 unsigned char bit_mask
;
247 #define keypkgAttrs_present 0x80
248 #define tKeys_present 0x40
251 struct ami_name
*owner
;
252 struct ami_pubkey_info
*pubKeyInfo
;
253 struct ami_encr_privkey_info
*encrPrivKeyInfo
;
254 struct ami_attr_list
*keypkgAttrs
; /* optional */
256 struct ami_tkey_list
*tKeys
; /* optional */
259 typedef struct ami_keypkg
{
260 ami_keypkg_info info
;
261 struct ami_algid
*algorithm
;
262 ami_bitstring signature
;
265 typedef struct ami_tkey_list
{
266 struct ami_tkey_list
*next
;
267 struct ami_tkey
*value
;
270 typedef struct ami_tkey
{
271 unsigned char bit_mask
;
272 #define TrustedKey_extensions_present 0x80
273 struct ami_name
*owner
;
274 struct ami_pubkey_info
*pubKeyInfo
;
275 struct ami_name
*issuer
; /* NULL for not present */
276 struct ami_validity
*validity
; /* NULL for not present */
277 struct ami_cert_serialnum
*serial
; /* NULL for not present */
278 struct ami_cert_extn_list
*TrustedKey_extensions
; /* optional */
281 typedef struct ami_serv_key_info
{
291 typedef struct _octet1
{
293 unsigned char *value
;
296 typedef struct ami_digest_info
{
297 struct ami_algid
*digestAlgorithm
;
301 typedef struct ami_crl_set
{
302 struct ami_crl_set
*next
;
303 struct ami_crl
*value
;
306 typedef struct ami_crl_entry
{
308 UTCTime
*revocationDate
;
311 typedef struct ami_crl_info
{
312 unsigned char bit_mask
;
313 #define CertificateRevocationListInfo_revokedCertificates_present 0x80
314 struct ami_algid
*signature
;
315 struct ami_name
*issuer
;
319 struct _seqof2
*next
;
321 } *CertificateRevocationListInfo_revokedCertificates
;
324 typedef struct ami_crl
{
326 struct ami_algid
*algorithm
;
327 ami_bitstring signature
;
330 typedef struct ami_pbe_param
{
332 unsigned short length
;
333 unsigned char value
[8];
338 typedef struct ami_extcert_info
{
340 struct ami_cert
*certificate
;
341 struct ami_attr_list
*attributes
;
344 typedef struct ami_extcert
{
345 struct ami_extcert_info
*extendedCertificateInfo
;
346 struct ami_algid
*signatureAlgorithm
;
347 ami_bitstring signature
;
350 typedef struct ami_extcerts_and_certs
{
351 struct ami_extcerts_and_certs
*next
;
352 struct ami_extcert_or_cert
*value
;
353 } *ami_extcerts_and_certs
;
355 typedef struct ami_extcert_or_cert
{
356 unsigned short choice
;
357 #define cert_chosen 1
358 #define extendedCert_chosen 2
360 struct ami_cert
*cert
;
361 struct ami_extcert
*extendedCert
;
363 } ami_extcert_or_cert
;
367 typedef struct ami_content_info
{
368 struct ami_oid
*contentType
;
369 Content
*content
; /* NULL for not present */
372 typedef struct ami_content_info_fm
{
373 struct ami_oid
*contentType
;
374 Content
*content
; /* NULL for not present */
375 } ami_content_info_fm
;
377 typedef struct ami_enveloped_data
{
379 struct ami_rcpt_info_list
*recipientInfos
;
380 struct ami_encr_content_info
*encryptedContentInfo
;
381 } ami_enveloped_data
;
383 typedef struct ami_encr_data
{
385 struct ami_encr_content_info
*encryptedContentInfo
;
388 typedef struct ami_signed_data
{
389 unsigned char bit_mask
;
390 #define SignedData_certs_present 0x80
391 #define SignedData_crls_present 0x40
393 struct ami_digest_alg_list
*digestAlgorithms
;
394 struct ami_content_info
*contentInfo
;
395 struct ami_extcerts_and_certs
*SignedData_certs
; /* optional */
396 struct ami_crl_set
*SignedData_crls
; /* optional */
397 struct ami_signer_info_list
*signerInfos
;
400 typedef struct ami_signed_data_fm
{
401 unsigned char bit_mask
;
402 #define SignedDataFm_certs_present 0x80
403 #define SignedDataFm_crls_present 0x40
405 struct ami_digest_alg_list
*digestAlgorithms
;
406 struct ami_content_info_fm
*contentInfo
;
407 struct ami_extcerts_and_certs
*SignedDataFm_certs
; /* optional */
408 struct ami_crl_set
*SignedDataFm_crls
; /* optional */
409 struct ami_signer_info_list
*signerInfos
;
410 } ami_signed_data_fm
;
412 typedef struct ami_rcpt_info_list
{
413 struct ami_rcpt_info_list
*next
;
414 struct ami_rcpt_info
*value
;
415 } *ami_rcpt_info_list
;
417 typedef struct ami_encr_content_info
{
418 struct ami_oid
*contentType
;
419 struct ami_algid
*contentEncryptionAlgorithm
;
420 struct ami_encr_content
*encryptedContent
; /* NULL for not present */
421 } ami_encr_content_info
;
423 typedef struct ami_pkcs_data
{
425 unsigned char *value
;
428 typedef struct ami_pkcs_data_fm
{
430 unsigned char *value
;
433 typedef struct ami_encr_content
{
435 unsigned char *value
;
438 typedef struct ami_rcpt_info
{
440 struct ami_issuer_and_serialnum
*issuerAndSerialNumber
;
441 struct ami_algid
*keyEncryptionAlgorithm
;
442 _octet1 encryptedKey
;
445 typedef struct ami_signer_info
{
446 unsigned char bit_mask
;
447 #define authenticatedAttributes_present 0x80
448 #define unauthenticatedAttributes_present 0x40
450 struct ami_issuer_and_serialnum
*issuerAndSerialNumber
;
451 struct ami_algid
*digestAlgorithm
;
452 struct ami_attr_list
*authenticatedAttributes
; /* optional */
453 struct ami_algid
*digestEncryptionAlgorithm
;
454 _octet1 encryptedDigest
;
455 struct ami_attr_list
*unauthenticatedAttributes
; /* optional */
458 typedef struct ami_signer_info_list
{
459 struct ami_signer_info_list
*next
;
460 struct ami_signer_info
*value
;
461 } *ami_signer_info_list
;
463 typedef struct ami_issuer_and_serialnum
{
464 struct ami_name
*issuer
;
465 ami_cert_serialnum serial
;
466 } ami_issuer_and_serialnum
;
468 typedef struct ami_digest_alg_list
{
469 struct ami_digest_alg_list
*next
;
470 struct ami_algid
*value
;
471 } *ami_digest_alg_list
;
473 typedef struct ami_privkey_info
{
474 unsigned char bit_mask
;
475 #define attributes_present 0x80
477 struct ami_algid
*privateKeyAlgorithm
;
479 struct ami_attr_list
*attributes
; /* optional */
482 typedef struct ami_encr_privkey_info
{
483 struct ami_algid
*encryptionAlgorithm
;
484 ami_octetstring encryptedData
;
485 } ami_encr_privkey_info
;
487 typedef struct ami_certreq_info
{
489 struct ami_name
*subject
;
490 struct ami_pubkey_info
*pubKeyInfo
;
491 struct ami_attr_list
*attributes
;
494 typedef struct ami_certreq
{
495 ami_certreq_info info
;
496 struct ami_algid
*algorithm
;
497 ami_bitstring signature
;
500 typedef struct ami_challenge_pwd
{
501 unsigned short choice
;
502 #define ChallengePassword_printableString_chosen 1
503 #define ChallengePassword_t61String_chosen 2
505 char *ChallengePassword_printableString
;
506 char *ChallengePassword_t61String
;
510 typedef char *ami_email_addr
;
512 typedef struct ami_pubkey_and_challenge
{
513 struct ami_pubkey_info
*spki
;
515 } ami_pubkey_and_challenge
;
517 typedef struct ami_signed_pubkey_and_challenge
{
518 ami_pubkey_and_challenge pubKeyAndChallenge
;
519 struct ami_algid
*sigAlg
;
520 ami_bitstring signature
;
521 } ami_signed_pubkey_and_challenge
;
523 extern ami_oid
*AMI_MD2_OID
;
524 extern ami_oid
*AMI_MD4_OID
;
525 extern ami_oid
*AMI_MD5_OID
;
526 extern ami_oid
*AMI_SHA_1_OID
;
527 extern ami_oid
*AMI_RSA_ENCR_OID
;
528 extern ami_oid
*AMI_MD2WithRSAEncryption_OID
;
529 extern ami_oid
*AMI_MD5WithRSAEncryption_OID
;
530 extern ami_oid
*AMI_DSA_OID
;
531 extern ami_oid
*AMI_SHA1WithDSASignature_OID
;
532 extern ami_oid
*AMI_DES_ECB_OID
;
533 extern ami_oid
*AMI_DES_CBC_OID
;
534 extern ami_oid
*AMI_DES3_CBC_OID
;
535 extern ami_oid
*AMI_DES_MAC_OID
;
536 extern ami_oid
*AMI_RC2_CBC_OID
;
537 extern ami_oid
*AMI_RC4_OID
;
542 extern struct ami_algid
*AMI_RSA_ENCR_AID
;
543 extern struct ami_algid
*AMI_MD2WithRSAEncryption_AID
;
544 extern struct ami_algid
*AMI_MD5WithRSAEncryption_AID
;
545 extern struct ami_algid
*AMI_DSA_AID
;
546 extern struct ami_algid
*AMI_SHA1WithDSASignature_AID
;
547 extern struct ami_algid
*AMI_DH_AID
;
548 extern struct ami_algid
*AMI_MD2_AID
;
549 extern struct ami_algid
*AMI_MD4_AID
;
550 extern struct ami_algid
*AMI_MD5_AID
;
551 extern struct ami_algid
*AMI_SHA1_AID
;
552 extern struct ami_algid
*AMI_RC4_AID
;
554 /* Algorithm types */
561 AMI_KEYED_INTEGRITY_ALG
564 /* Parameter types */
569 AMI_PARM_OCTETSTRING
,
575 /* Algorithm table */
576 #define AMI_NO_EXPORT_KEYSIZE_LIMIT 0
577 typedef struct ami_alg_list
{
580 ami_alg_type algType
;
581 ami_parm_type parmType
;
582 size_t keysize_limit
;
586 * AMI function return values
590 #define AMI_EBUFSIZE 1
591 #define AMI_ENOMEM 2 /* ENOMEM MUST be 2 */
592 #define AMI_BAD_FILE 3
593 #define AMI_FILE_NOT_FOUND 4
594 #define AMI_FILE_IO_ERR 5
595 #define AMI_BAD_PASSWD 6
596 #define AMI_UNKNOWN_USER 7
597 #define AMI_ALGORITHM_UNKNOWN 8
598 #define AMI_ASN1_ENCODE_ERR 9
599 #define AMI_ASN1_DECODE_ERR 10
600 #define AMI_BAD_KEY 11
601 #define AMI_KEYGEN_ERR 12
602 #define AMI_ENCRYPT_ERR 13
603 #define AMI_DECRYPT_ERR 14
604 #define AMI_SIGN_ERR 15
605 #define AMI_VERIFY_ERR 16
606 #define AMI_DIGEST_ERR 17
607 #define AMI_OUTPUT_FORMAT_ERR 18
608 #define AMI_SYSTEM_ERR 19 /* General Errors */
609 #define AMI_ATTRIBUTE_UNKNOWN 20
610 #define AMI_AMILOGIN_ERR 21
611 #define AMI_AMILOGOUT_ERR 22
612 #define AMI_NO_SUCH_ENTRY 23
613 #define AMI_ENTRY_ALREADY_EXISTS 24
614 #define AMI_AMISERV_DECRYPT_ERR 25
615 #define AMI_AMISERV_SIGN_ERR 26
616 #define AMI_USER_DID_NOT_AMILOGIN 27
617 #define AMI_AMISERV_CONNECT 28
618 #define AMI_KEYPKG_NOT_FOUND 29
619 #define AMI_TIME_INVALID 30
620 #define AMI_UNTRUSTED_PUBLIC_KEY 31
621 #define AMI_EPARM 32 /* EPARM MUST be 32 */
622 #define AMI_BINARY_TO_RFC1421_ERR 33
623 #define AMI_RFC1421_TO_BINARY_ERR 34
624 #define AMI_RANDOM_NUM_ERR 35
625 #define AMI_XFN_ERR 36
626 #define AMI_CERT_CHAIN_ERR 37
627 #define AMI_RDN_MISSING_EQUAL 38
628 #define AMI_AVA_TYPE_MISSING 39
629 #define AMI_AVA_VALUE_MISSING 40
630 #define AMI_CERT_NOT_FOUND 41
631 #define AMI_DN_NOT_FOUND 42
632 #define AMI_CRITICAL_EXTNS_ERR 43
633 #define AMI_ASN1_INIT_ERROR 44
634 #define AMI_WRAP_ERROR 45
635 #define AMI_UNWRAP_ERROR 46
636 #define AMI_UNSUPPORTED_KEY_TYPE 47
637 #define AMI_DH_PART1_ERR 48
638 #define AMI_DH_PART2_ERR 49
639 #define AMI_DOUBLE_ENCRYPT 50
640 #define AMI_AMISERV_KEYPKG_UPDATE 51
641 #define AMI_AMISERV_STAT_ERR 52
642 #define AMI_GLOBAL_ERR 53
643 #define AMI_TRUSTED_KEY_EXPIRED 54
644 #define AMI_OPEN_ERR 55
645 #define AMI_TOTAL_ERRNUM 56
646 #define AMI_CERT_ERR 57
647 #define AMI_KEYPKG_ERR 58
649 /* flags for ami_encrypt, ami_decrypt, ami_sign, ami_verify, ami_digest */
650 #define AMI_ADD_DATA 1
651 #define AMI_END_DATA 2
652 #define AMI_DIGESTED_DATA 3 /* for ami_verify for digested data */
654 /* AMI Handle and status */
655 typedef struct ami_handle ami_handle_t
;
657 /* AMI return variable */
658 typedef int AMI_STATUS
;
664 typedef struct ami_rsa_keygen_param_t
{
666 uchar_t
*publicExponent
; /* const */
667 size_t publicExponentLen
;
668 } ami_rsa_keygen_param
;
670 typedef struct ami_des_keygen_param_t
{
671 uchar_t
*saltVal
; /* const */
673 char *passwd
; /* const */
675 } ami_des_keygen_param
;
678 * PROTOTYPES should be set to one if and only if the compiler supports
679 * function argument prototyping.
680 * The following makes PROTOTYPES default to 1 if it has not already been
681 * defined as 0 with C compiler flags.
688 * PROTO_LIST is defined depending on how PROTOTYPES is defined above.
689 * If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
690 * returns an empty list.
694 #define PROTO_LIST(list) list
696 #define PROTO_LIST(list) ()
703 /* Init and Terminate a AMI session */
704 AMI_STATUS ami_init
PROTO_LIST((
712 AMI_STATUS ami_end
PROTO_LIST((
715 char *ami_strerror
PROTO_LIST((
717 const AMI_STATUS
)); /* errno */
720 AMI_STATUS ami_gen_des_key
PROTO_LIST((
721 const ami_handle_t
*, /* IN: ami handle */
722 uchar_t
**, /* OUT: DES session key */
723 ami_alg_params
**)); /* OUT: IV */
725 AMI_STATUS ami_gen_des3_key
PROTO_LIST((
726 const ami_handle_t
*, /* IN: ami handle */
727 uchar_t
**, /* OUT: triple DES session key */
728 ami_alg_params
**)); /* OUT: IV */
730 AMI_STATUS ami_gen_rc2_key
PROTO_LIST((
731 const ami_handle_t
*, /* IN: AMI handle */
732 const size_t, /* IN: key length */
733 const uint_t
, /* IN: effective key size in bits */
734 uchar_t
**, /* OUT: RC2 session key */
735 ami_alg_params
**)); /* OUT: RC2 parameter */
737 AMI_STATUS ami_gen_rc4_key
PROTO_LIST((
738 const ami_handle_t
*, /* IN: ami handle */
739 const size_t, /* IN: key length in bytes */
740 uchar_t
**)); /* OUT: RC4 key */
742 AMI_STATUS ami_gen_rsa_keypair
PROTO_LIST((
743 const ami_handle_t
*, /* IN: ami handle */
744 const ami_rsa_keygen_param
*, /* IN: keypair generation parameters */
747 uchar_t
**, /* OUT: public key */
748 size_t *, /* OUT: public key length */
749 uchar_t
**, /* OUT: private key */
750 size_t *)); /* OUT: private key length */
753 AMI_STATUS ami_digest
PROTO_LIST((
754 ami_handle_t
*, /* IN: ami handle */
755 const uchar_t
*, /* IN: input data */
756 const size_t, /* IN: length of data in bytes */
757 const int, /* IN: more input data flag */
758 const ami_algid
*, /* IN: digest algorithm */
759 uchar_t
**, /* OUT: digest */
760 size_t *)); /* OUT: length of digest */
761 AMI_STATUS ami_sign
PROTO_LIST((
762 ami_handle_t
*, /* IN: ami handle */
763 const uchar_t
*, /* IN: data to be signed */
764 const size_t, /* IN: data length */
765 const int, /* IN: more input data flag */
766 const ami_algid
*, /* IN: signature key algorithm */
767 const uchar_t
*, /* IN: signature key */
768 const size_t, /* IN: signature key length */
769 const ami_algid
*, /* IN: signature algorithm */
770 uchar_t
**, /* OUT: signature */
771 size_t *)); /* OUT: signature length */
772 AMI_STATUS ami_verify
PROTO_LIST((
773 ami_handle_t
*, /* IN: ami handle */
774 const uchar_t
*, /* IN: data to be verified */
775 const size_t, /* IN: data length */
776 const int, /* IN: more input data flag */
777 const ami_algid
*, /* IN: verification key algorithm */
778 const uchar_t
*, /* IN: verification key */
779 const size_t, /* IN: verification key length */
780 const ami_algid
*, /* IN: verification algorithm */
781 const uchar_t
*, /* IN: signature */
782 const size_t)); /* IN: signature length */
783 AMI_STATUS ami_encrypt
PROTO_LIST((
784 ami_handle_t
*, /* IN: ami handle */
785 const uchar_t
*, /* IN: input data */
786 const size_t, /* IN: input data length */
787 const int, /* IN: more input data flag */
788 const ami_algid
*, /* IN: encryption key algorithm */
789 const uchar_t
*, /* IN: encryption key */
790 const size_t, /* IN: encryption key length */
791 const ami_algid
*, /* IN: encryption algorithm */
792 uchar_t
**, /* OUT: ciphertext */
793 size_t *)); /* OUT: ciphertext length */
794 AMI_STATUS ami_decrypt
PROTO_LIST((
795 ami_handle_t
*, /* IN: ami handle */
796 const uchar_t
*, /* IN: ciphertext */
797 const size_t, /* IN: ciphertext length */
798 const int, /* IN: more input data flag */
799 const ami_algid
*, /* IN: decryption key algorithm */
800 const uchar_t
*, /* IN: decryption key */
801 const size_t, /* IN: decryption key length */
802 const ami_algid
*, /* IN: decryption algorithm */
803 uchar_t
**, /* OUT: cleartext */
804 size_t *)); /* OUT: cleartext length */
805 AMI_STATUS ami_wrap_key
PROTO_LIST((
806 const ami_handle_t
*, /* IN: ami handle */
807 const uchar_t
*, /* IN: key to be wrapped */
808 const size_t, /* IN: length of key to be wrapped */
809 const ami_algid
*, /* IN: wrapping key algorithm */
810 const uchar_t
*, /* IN: wrapping key */
811 const size_t, /* IN: wrapping key length */
812 const ami_algid
*, /* IN: wrapping algorithm */
813 uchar_t
**, /* OUT: wrapped key */
814 size_t *)); /* IN/OUT: wrapped key length */
815 AMI_STATUS ami_unwrap_key
PROTO_LIST((
816 const ami_handle_t
*, /* IN: ami handle */
817 const uchar_t
*, /* IN: wrapped key */
818 const size_t, /* IN: wrapped key length */
819 const ami_algid
*, /* IN: unwrapping key algorithm */
820 const uchar_t
*, /* IN: unwrapping key */
821 const size_t, /* IN: unwrapping key length */
822 const ami_algid
*, /* IN: unwrapping algorithm */
823 uchar_t
**, /* OUT: unwrapped key */
824 size_t *)); /* OUT: unwrapped key length */
826 /* certificate verification */
827 AMI_STATUS ami_verify_cert
PROTO_LIST((
828 const ami_handle_t
*, /* IN: ami handle */
829 const ami_cert
*, /* IN: certificate to be verified */
830 const ami_pubkey_info
*, /* IN: public verification key */
831 const int)); /* IN: flags (unused) */
832 AMI_STATUS ami_verify_cert_chain
PROTO_LIST((
833 const ami_handle_t
*, /* IN: ami handle */
834 const ami_cert
*, /* IN: certificate chain to be verified */
835 const int, /* IN: length of cert chain */
836 const struct ami_tkey_list
*, /* IN: trusted key list */
837 const int, /* IN: flags (unused) */
838 ami_cert
**)); /* OUT: first expired certificate */
839 AMI_STATUS ami_verify_cert_est_chain
PROTO_LIST((
840 const ami_handle_t
*, /* IN: ami handle */
841 const ami_cert
*, /* IN: certificate to be verified */
842 const struct ami_tkey_list
*, /* IN: trusted key list */
843 const char **, /* IN: CA Name list */
844 const int, /* IN: flags (unused) */
845 ami_cert
**, /* OUT: first expired certificate */
846 ami_cert
**, /* OUT: certificate chain */
847 int *)); /* OUT: length of cert chain */
849 /* certificate chain establishment */
850 AMI_STATUS ami_get_cert_chain
PROTO_LIST((
851 const ami_handle_t
*, /* IN: ami handle */
852 const ami_cert
*, /* IN: user certificate */
853 const char **, /* IN: CA name list */
854 int flags
, /* IN: flags (unused) */
855 ami_cert
**, /* OUT: certificate chain */
856 int *)); /* OUT: length of cert chain */
859 AMI_STATUS ami_set_keypkg
PROTO_LIST((
860 const ami_handle_t
*, /* IN: ami handle */
861 const char *, /* IN: keypkg filename or repository index */
862 const ami_keypkg
*)); /* IN: keypkg to be stored */
863 AMI_STATUS ami_get_keypkg
PROTO_LIST((
864 const ami_handle_t
*, /* IN: ami handle */
865 const char *, /* IN: keypkg_filename or repository index */
866 ami_keypkg
**)); /* OUT: keypkg */
867 AMI_STATUS ami_set_cert
PROTO_LIST((
868 const ami_handle_t
*, /* IN: ami handle */
869 const char *, /* IN: cert filename or repository index */
870 const ami_cert
*)); /* IN: certificate */
871 AMI_STATUS ami_get_cert
PROTO_LIST((
872 const ami_handle_t
*, /* IN: ami handle */
873 const char *, /* IN: certificate filename, rep index, DN */
874 ami_cert
**, /* OUT: set of certificates */
875 int *)); /* OUT: certificate set length */
877 /* generate random bytes */
878 AMI_STATUS ami_random
PROTO_LIST((
879 const ushort_t
, /* IN: requested number of random bytes */
880 uchar_t
**)); /* OUT: random byte buffer */
884 void ami_free_keypkg
PROTO_LIST((ami_keypkg
**));
885 void ami_free_cert
PROTO_LIST((ami_cert
**));
886 void ami_free_cert_list
PROTO_LIST((ami_cert
**, int));
887 void ami_free_dn
PROTO_LIST((ami_name
**));
890 AMI_STATUS ami_str2dn
PROTO_LIST((
891 const ami_handle_t
*, char *, ami_name
**));
892 AMI_STATUS ami_dn2str
PROTO_LIST((
893 const ami_handle_t
*, ami_name
*, char **));
895 /* Supported algorithms */
896 AMI_STATUS ami_get_alglist
PROTO_LIST((ami_alg_list
**));
902 #endif /* _SLP_AMI_H */