Path: blob/main/crypto/krb5/src/include/k5-int-pkinit.h
34889 views
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */1/*2* COPYRIGHT (C) 20063* THE REGENTS OF THE UNIVERSITY OF MICHIGAN4* ALL RIGHTS RESERVED5*6* Permission is granted to use, copy, create derivative works7* and redistribute this software and such derivative works8* for any purpose, so long as the name of The University of9* Michigan is not used in any advertising or publicity10* pertaining to the use of distribution of this software11* without specific, written prior authorization. If the12* above copyright notice or any other identification of the13* University of Michigan is included in any copy of any14* portion of this software, then the disclaimer below must15* also be included.16*17* THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION18* FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY19* PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF20* MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING21* WITHOUT LIMITATION THE IMPLIED WARRANTIES OF22* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE23* REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE24* FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR25* CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING26* OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN27* IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF28* SUCH DAMAGES.29*/3031#ifndef _KRB5_INT_PKINIT_H32#define _KRB5_INT_PKINIT_H3334/*35* pkinit structures36*/3738/* AlgorithmIdentifier */39typedef struct _krb5_algorithm_identifier {40krb5_data algorithm; /* OID */41krb5_data parameters; /* Optional */42} krb5_algorithm_identifier;4344/* PAChecksum2 */45typedef struct _krb5_pachecksum2 {46krb5_data checksum;47krb5_algorithm_identifier algorithmIdentifier;48} krb5_pachecksum2;4950/* PKAuthenticator */51typedef struct _krb5_pk_authenticator {52krb5_int32 cusec; /* (0..999999) */53krb5_timestamp ctime;54krb5_int32 nonce; /* (0..4294967295) */55krb5_data paChecksum;56krb5_data *freshnessToken; /* Optional */57krb5_pachecksum2 *paChecksum2; /* Optional */58} krb5_pk_authenticator;5960/** AuthPack from RFC 4556*/61typedef struct _krb5_auth_pack {62krb5_pk_authenticator pkAuthenticator;63krb5_data clientPublicValue; /* Optional */64krb5_algorithm_identifier **supportedCMSTypes; /* Optional */65krb5_data clientDHNonce; /* Optional */66krb5_data **supportedKDFs; /* OIDs of KDFs; OPTIONAL */67} krb5_auth_pack;6869/* ExternalPrincipalIdentifier */70typedef struct _krb5_external_principal_identifier {71krb5_data subjectName; /* Optional */72krb5_data issuerAndSerialNumber; /* Optional */73krb5_data subjectKeyIdentifier; /* Optional */74} krb5_external_principal_identifier;7576/* PA-PK-AS-REQ (rfc4556 -- PA TYPE 16) */77typedef struct _krb5_pa_pk_as_req {78krb5_data signedAuthPack;79krb5_external_principal_identifier **trustedCertifiers; /* Optional array */80krb5_data kdcPkId; /* Optional */81} krb5_pa_pk_as_req;8283/** Pkinit DHRepInfo */84typedef struct _krb5_dh_rep_info {85krb5_data dhSignedData;86krb5_data serverDHNonce; /* Optional */87krb5_data *kdfID; /* OID of selected KDF OPTIONAL */88} krb5_dh_rep_info;8990/* KDCDHKeyInfo */91typedef struct _krb5_kdc_dh_key_info {92krb5_data subjectPublicKey; /* BIT STRING */93krb5_int32 nonce; /* (0..4294967295) */94krb5_timestamp dhKeyExpiration; /* Optional */95} krb5_kdc_dh_key_info;9697/* ReplyKeyPack */98typedef struct _krb5_reply_key_pack {99krb5_keyblock replyKey;100krb5_checksum asChecksum;101} krb5_reply_key_pack;102103/* PA-PK-AS-REP (rfc4556 -- PA TYPE 17) */104typedef struct _krb5_pa_pk_as_rep {105enum krb5_pa_pk_as_rep_selection {106choice_pa_pk_as_rep_UNKNOWN = -1,107choice_pa_pk_as_rep_dhInfo = 0,108choice_pa_pk_as_rep_encKeyPack = 1109} choice;110union krb5_pa_pk_as_rep_choices {111krb5_dh_rep_info dh_Info;112krb5_data encKeyPack;113} u;114} krb5_pa_pk_as_rep;115116/* SP80056A OtherInfo, for pkinit algorithm agility */117typedef struct _krb5_sp80056a_other_info {118krb5_algorithm_identifier algorithm_identifier;119krb5_principal party_u_info;120krb5_principal party_v_info;121krb5_data supp_pub_info;122} krb5_sp80056a_other_info;123124/* PkinitSuppPubInfo, for pkinit algorithm agility */125typedef struct _krb5_pkinit_supp_pub_info {126krb5_enctype enctype;127krb5_data as_req;128krb5_data pk_as_rep;129} krb5_pkinit_supp_pub_info;130131/*132* Begin "asn1.h"133*/134135/*************************************************************************136* Prototypes for pkinit asn.1 encode routines137*************************************************************************/138139krb5_error_code140encode_krb5_pa_pk_as_req(const krb5_pa_pk_as_req *rep, krb5_data **code);141142krb5_error_code143encode_krb5_pa_pk_as_rep(const krb5_pa_pk_as_rep *rep, krb5_data **code);144145krb5_error_code146encode_krb5_auth_pack(const krb5_auth_pack *rep, krb5_data **code);147148krb5_error_code149encode_krb5_kdc_dh_key_info(const krb5_kdc_dh_key_info *rep, krb5_data **code);150151krb5_error_code152encode_krb5_reply_key_pack(const krb5_reply_key_pack *, krb5_data **code);153154krb5_error_code155encode_krb5_td_trusted_certifiers(krb5_external_principal_identifier *const *,156krb5_data **code);157158krb5_error_code159encode_krb5_td_dh_parameters(krb5_algorithm_identifier *const *,160krb5_data **code);161162krb5_error_code163encode_krb5_sp80056a_other_info(const krb5_sp80056a_other_info *,164krb5_data **);165166krb5_error_code167encode_krb5_pkinit_supp_pub_info(const krb5_pkinit_supp_pub_info *,168krb5_data **);169170/*************************************************************************171* Prototypes for pkinit asn.1 decode routines172*************************************************************************/173174krb5_error_code175decode_krb5_pa_pk_as_req(const krb5_data *, krb5_pa_pk_as_req **);176177krb5_error_code178decode_krb5_pa_pk_as_rep(const krb5_data *, krb5_pa_pk_as_rep **);179180krb5_error_code181decode_krb5_auth_pack(const krb5_data *, krb5_auth_pack **);182183krb5_error_code184decode_krb5_kdc_dh_key_info(const krb5_data *, krb5_kdc_dh_key_info **);185186krb5_error_code187decode_krb5_principal_name(const krb5_data *, krb5_principal_data **);188189krb5_error_code190decode_krb5_reply_key_pack(const krb5_data *, krb5_reply_key_pack **);191192krb5_error_code193decode_krb5_td_trusted_certifiers(const krb5_data *,194krb5_external_principal_identifier ***);195196krb5_error_code197decode_krb5_td_dh_parameters(const krb5_data *, krb5_algorithm_identifier ***);198199krb5_error_code200encode_krb5_enc_data(const krb5_enc_data *, krb5_data **);201202krb5_error_code203encode_krb5_encryption_key(const krb5_keyblock *rep, krb5_data **code);204205krb5_error_code206krb5_encrypt_helper(krb5_context context, const krb5_keyblock *key,207krb5_keyusage keyusage, const krb5_data *plain,208krb5_enc_data *cipher);209210#endif /* _KRB5_INT_PKINIT_H */211212213