📄 wtls_pdu.h
字号:
/* ==================================================================== * The Kannel Software License, Version 1.0 * * Copyright (c) 2001-2004 Kannel Group * Copyright (c) 1998-2001 WapIT Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Kannel Group (http://www.kannel.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Kannel" and "Kannel Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please * contact org@kannel.org. * * 5. Products derived from this software may not be called "Kannel", * nor may "Kannel" appear in their name, without prior written * permission of the Kannel Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Kannel Group. For more information on * the Kannel Group, please see <http://www.kannel.org/>. * * Portions of this software are based upon software originally written at * WapIT Ltd., Helsinki, Finland for the Kannel project. */ /* wtls_pdu.h - definitions for unpacked WTLS protocol data units * */#ifndef PDU_H#define PDU_H#include "gwlib/list.h"#include "gwlib/octstr.h"#include "wtls.h"typedef enum wtls_pdu_modes { ChangeCipher_PDU = 1, Alert_PDU, Handshake_PDU, Application_PDU} wtls_pdu_modes;typedef enum handshake_type{ hello_request = 0, client_hello = 1, server_hello = 2, certificate = 11, server_key_exchange = 12, certificate_request = 13, server_hello_done = 14, certificate_verify = 15, client_key_exchange = 16, finished = 20} HandshakeType;typedef enum compmethod { null_comp = 0} CompressionMethod;typedef enum certificateformat { WTLSCert = 1, X509Cert, X968Cert} CertificateFormat;typedef enum sig_algo { anonymous, ecdsa_sha, rsa_sha,} SignatureAlgorithm;/*typedef enum keyex_algo { rsa, rsa_anon, dh_anon, ecdh_anon, ecdh_ecdsa,} KeyExchangeAlgorithm;*/typedef enum keyex_suite { null_k, shared_secret, dh_anon, dh_anon_512, dh_anon_768, rsa_anon, rsa_anon_512, rsa_anon_768, rsa, rsa_512, rsa_768, ecdh_anon, ecdh_anon_113, ecdh_anon_131, ecdh_ecdsa,} KeyExchangeSuite;typedef enum pubkey_algo { rsa_pubkey, diffie_hellman_pubkey, elliptic_curve_pubkey,} PublicKeyAlgorithm;typedef enum identifier_type { null = 0, text, binary, key_hash_sha = 254, x509_name = 255} IdentifierType;typedef enum public_key_type { rsa_key = 2, ecdh_key = 3, ecdsa_key = 4} PublicKeyType;typedef enum ecbasistype { ec_basis_onb = 1, ec_basis_trinomial, ec_basis_pentanomial, ec_basis_polynomial} ECBasisType;typedef enum ecfield { ec_prime_p, ec_characteristic_two} ECField;typedef struct random { long gmt_unix_time; Octstr *random_bytes;} Random;typedef struct ecpoint { Octstr *point;} ECPoint;typedef ECPoint ECPublicKey;typedef struct dhpublickey { Octstr *dh_Y;} DHPublicKey;typedef struct rsa_public_key { Octstr *rsa_exponent; Octstr *rsa_modulus;} RSAPublicKey;typedef struct public_key { /* ecdh */ ECPublicKey *ecdh_pubkey; /* ecdsa */ ECPublicKey *ecdsa_pubkey; /* rsa */ RSAPublicKey *rsa_pubkey;} PublicKey;typedef struct identifier { IdentifierType id_type; /* text */ int charset; Octstr *name; /* binary */ Octstr *identifier; /* key_hash_sha */ Octstr *key_hash; /* x509 */ Octstr *distinguished_name;} Identifier;typedef struct eccurve { Octstr *a; Octstr *b; Octstr *seed;} ECCurve;typedef struct dh_parameters{ int dh_e; Octstr *dh_p; Octstr *dh_g;} DHParameters;typedef struct ec_parameters{ ECField field; /* case ec_prime_p */ Octstr *prime_p; /* case ec_characteristic_two */ int m; ECBasisType basis; /* case ec_basis_onb : nothing*/ /* case ec_trinomial */ int k; /* case ec_pentanomial */ int k1; int k2; int k3; /* case ec_basis_polynomial */ Octstr *irreducible; ECCurve *curve; ECPoint *base; Octstr *order; Octstr *cofactor;} ECParameters;typedef struct parameter_set { long length; /* rsa: empty */ /* diffie-hellman */ DHParameters *dhparams; /* eliptic curve */ ECParameters *ecparams;} ParameterSet;typedef struct parameter_specifier { int param_index; ParameterSet *param_set;} ParameterSpecifier;typedef struct key_exchange_id { int key_exchange_suite; ParameterSpecifier *param_specif; Identifier *identifier;} KeyExchangeId;typedef struct signature { /* case anonymous */ /* nothing */ /* case ecdsa_sha and rsa_sha */ List *sha_hash;} Signature;typedef struct to_be_signed_cert { int certificate_version; SignatureAlgorithm signature_algo; Identifier *issuer; long valid_not_before; long valid_not_after; Identifier *subject; PublicKeyType pubkey_type; ParameterSpecifier *param_spec; PublicKey *pubkey;} ToBeSignedCertificate; typedef struct wtls_cert { ToBeSignedCertificate *tobesigned_cert; Signature *signature;} WTLSCertificate;typedef struct rsa_secret{ int client_version; List *random;} RSASecret;typedef struct rsa_encrypted_secret { Octstr *encrypted_secret;} RSAEncryptedSecret;typedef struct cipher_suite { int bulk_cipher_algo; int mac_algo;} CipherSuite;typedef struct cert_request { List *trusted_authorities; // List of KeyExchangeIds} CertificateRequest;typedef struct cert_verify { Signature *signature;} CertificateVerify;typedef struct hello_request{ /* nothing here */} HelloRequest;typedef struct client_hello{ int clientversion; Random *random; Octstr *session_id; List *client_key_ids; List *trusted_key_ids; List *ciphersuites; // list of CipherSuites List *comp_methods; int snmode; int krefresh;} ClientHello;typedef struct server_hello{ int serverversion; Random *random; Octstr *session_id; int client_key_id; CipherSuite *ciphersuite; CompressionMethod comp_method; int snmode; int krefresh;} ServerHello;typedef struct certificate { CertificateFormat certificateformat; /* case WTLS */ WTLSCertificate *wtls_certificate; /* case X509 */ Octstr *x509_certificate; /* X968 */ Octstr *x968_certificate;} Certificate;typedef struct server_key_exchange{ ParameterSpecifier *param_spec; /* case rsa_anon */ RSAPublicKey *rsa_params; /* case dh_anon */ DHPublicKey *dh_params; /* case ecdh_anon */ ECPublicKey *ecdh_params;} ServerKeyExchange;typedef struct client_key_exchange{ /* case rsa and rsa_anon*/ RSAEncryptedSecret *rsa_params; /* case dh_anon */ DHPublicKey *dh_anon_params; /* case ecdh_anon and ecdh_ecdsa*/ ECPublicKey *ecdh_params;} ClientKeyExchange;typedef struct finished { Octstr *verify_data;} Finished;typedef struct server_hello_done{ /* nothing here */} ServerHelloDone; typedef struct cc{ int change;} ChangeCipher;typedef struct alert{ int level; int desc; Octstr *chksum;} Alert;typedef struct handshake{ HandshakeType msg_type; int length; /* case hello_request */ /* case client_hello */ ClientHello *client_hello; /* case server_hello */ ServerHello *server_hello; /* case certificate */ Certificate *certificate; /* case server_key_exchange */ ServerKeyExchange *server_key_exchange; /* case certificate_request */ CertificateRequest *certificate_request; /* case server_hello_done */ ServerHelloDone *server_hello_done; /* case certificate_verify */ CertificateVerify *cert_verify; /* case client_key_exchange */ ClientKeyExchange *client_key_exchange; /* case finished */ Finished *finished;} Handshake;typedef struct application{ Octstr *data;} Application;typedef struct wtls_pdu { int type; int reserved; int cipher; int seqnum; int rlen; union { ChangeCipher cc; Alert alert; Handshake handshake; Application application; } u;} wtls_PDU;typedef struct wtls_payload { int type; int reserved; int cipher; int seqnum; int rlen; Octstr *data;} wtls_Payload;/* Prototypes */wtls_PDU *wtls_pdu_create(int type);void wtls_pdu_destroy(wtls_PDU *msg);void wtls_pdu_dump(wtls_PDU *msg, int level);wtls_PDU *wtls_pdu_unpack(wtls_Payload *payload, WTLSMachine* wtls_machine);wtls_Payload *wtls_pdu_pack(wtls_PDU *pdu, WTLSMachine* wtls_machine);wtls_Payload *wtls_payload_unpack(Octstr *data);Octstr *wtls_payload_pack(wtls_Payload *payload);void wtls_payload_destroy(wtls_Payload *payload);List* wtls_unpack_payloadlist (Octstr *data);Octstr* wtls_pack_payloadlist (List* payloadlist);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -