Added API for external hashing of ServerKeyExchange, and signature algorithm identifiers in the 0x080* format (preparatory steps for EdDSA support).
This commit is contained in:
parent
44c79c1add
commit
ef318ef83a
11 changed files with 933 additions and 729 deletions
|
|
@ -2277,7 +2277,7 @@ struct br_ssl_client_context_ {
|
||||||
* Bit field for algoithms (hash + signature) supported by the
|
* Bit field for algoithms (hash + signature) supported by the
|
||||||
* server when requesting a client certificate.
|
* server when requesting a client certificate.
|
||||||
*/
|
*/
|
||||||
uint16_t hashes;
|
uint32_t hashes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Server's public key curve.
|
* Server's public key curve.
|
||||||
|
|
@ -2321,15 +2321,33 @@ struct br_ssl_client_context_ {
|
||||||
* \brief Get the hash functions and signature algorithms supported by
|
* \brief Get the hash functions and signature algorithms supported by
|
||||||
* the server.
|
* the server.
|
||||||
*
|
*
|
||||||
* This is a field of bits: for hash function of ID x, bit x is set if
|
* This value is a bit field:
|
||||||
* the hash function is supported in RSA signatures, 8+x if it is supported
|
*
|
||||||
* with ECDSA. This information is conveyed by the server when requesting
|
* - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`,
|
||||||
* a client certificate.
|
* then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1,
|
||||||
|
* or 2 to 6 for the SHA family).
|
||||||
|
*
|
||||||
|
* - If ECDSA is suported with hash function of ID `x`, then bit `8+x`
|
||||||
|
* is set.
|
||||||
|
*
|
||||||
|
* - Newer algorithms are symbolic 16-bit identifiers that do not
|
||||||
|
* represent signature algorithm and hash function separately. If
|
||||||
|
* the TLS-level identifier is `0x0800+x` for a `x` in the 0..15
|
||||||
|
* range, then bit `16+x` is set.
|
||||||
|
*
|
||||||
|
* "New algorithms" are currently defined only in draft documents, so
|
||||||
|
* this support is subject to possible change. Right now (early 2017),
|
||||||
|
* this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA
|
||||||
|
* on Curve448) to bit 24. If the identifiers on the wire change in
|
||||||
|
* future document, then the decoding mechanism in BearSSL will be
|
||||||
|
* amended to keep mapping ed25519 and ed448 on bits 23 and 24,
|
||||||
|
* respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not
|
||||||
|
* guaranteed yet.
|
||||||
*
|
*
|
||||||
* \param cc client context.
|
* \param cc client context.
|
||||||
* \return the server-supported hash functions (for signatures).
|
* \return the server-supported hash functions and signature algorithms.
|
||||||
*/
|
*/
|
||||||
static inline uint16_t
|
static inline uint32_t
|
||||||
br_ssl_client_get_server_hashes(const br_ssl_client_context *cc)
|
br_ssl_client_get_server_hashes(const br_ssl_client_context *cc)
|
||||||
{
|
{
|
||||||
return cc->hashes;
|
return cc->hashes;
|
||||||
|
|
@ -2654,18 +2672,47 @@ typedef struct {
|
||||||
uint16_t cipher_suite;
|
uint16_t cipher_suite;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Hash function for signing the ServerKeyExchange.
|
* \brief Hash function or algorithm for signing the ServerKeyExchange.
|
||||||
*
|
*
|
||||||
* This is the symbolic identifier for the hash function that
|
* This parameter is ignored for `TLS_RSA_*` and `TLS_ECDH_*`
|
||||||
* will be used to sign the ServerKeyExchange message, for ECDHE
|
* cipher suites; it is used only for `TLS_ECDHE_*` suites, in
|
||||||
* cipher suites. This is ignored for RSA and ECDH cipher suites.
|
* which the server _signs_ the ephemeral EC Diffie-Hellman
|
||||||
|
* parameters sent to the client.
|
||||||
*
|
*
|
||||||
* Take care that with TLS 1.0 and 1.1, that value MUST match
|
* This identifier must be one of the following values:
|
||||||
* the protocol requirements: value must be 0 (MD5+SHA-1) for
|
*
|
||||||
* a RSA signature, or 2 (SHA-1) for an ECDSA signature. Only
|
* - `0xFF00 + id`, where `id` is a hash function identifier
|
||||||
* TLS 1.2 allows for other hash functions.
|
* (0 for MD5+SHA-1, or 2 to 6 for one of the SHA functions);
|
||||||
|
*
|
||||||
|
* - a full 16-bit identifier, lower than `0xFF00`.
|
||||||
|
*
|
||||||
|
* If the first option is used, then the SSL engine will
|
||||||
|
* compute the hash of the data that is to be signed, with the
|
||||||
|
* designated hash function. The `do_sign()` method will be
|
||||||
|
* invoked with that hash value provided in the the `data`
|
||||||
|
* buffer.
|
||||||
|
*
|
||||||
|
* If the second option is used, then the SSL engine will NOT
|
||||||
|
* compute a hash on the data; instead, it will provide the
|
||||||
|
* to-be-signed data itself in `data`, i.e. the concatenation of
|
||||||
|
* the client random, server random, and encoded ECDH
|
||||||
|
* parameters. Furthermore, with TLS-1.2 and later, the 16-bit
|
||||||
|
* identifier will be used "as is" in the protocol, in the
|
||||||
|
* SignatureAndHashAlgorithm; for instance, `0x0401` stands for
|
||||||
|
* RSA PKCS#1 v1.5 signature (the `01`) with SHA-256 as hash
|
||||||
|
* function (the `04`).
|
||||||
|
*
|
||||||
|
* Take care that with TLS 1.0 and 1.1, the hash function is
|
||||||
|
* constrainted by the protocol: RSA signature must use
|
||||||
|
* MD5+SHA-1 (so use `0xFF00`), while ECDSA must use SHA-1
|
||||||
|
* (`0xFF02`). Since TLS 1.0 and 1.1 don't include a
|
||||||
|
* SignatureAndHashAlgorithm field in their ServerKeyExchange
|
||||||
|
* messages, any value below `0xFF00` will be usable to send the
|
||||||
|
* raw ServerKeyExchange data to the `do_sign()` callback, but
|
||||||
|
* that callback must still follow the protocol requirements
|
||||||
|
* when generating the signature.
|
||||||
*/
|
*/
|
||||||
int hash_id;
|
unsigned algo_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Certificate chain to send to the client.
|
* \brief Certificate chain to send to the client.
|
||||||
|
|
@ -2795,33 +2842,45 @@ struct br_ssl_server_policy_class_ {
|
||||||
/**
|
/**
|
||||||
* \brief Perform a signature (for a ServerKeyExchange message).
|
* \brief Perform a signature (for a ServerKeyExchange message).
|
||||||
*
|
*
|
||||||
* This callback function is invoked for ECDHE cipher suites.
|
* This callback function is invoked for ECDHE cipher suites. On
|
||||||
* On input, the hash value to sign is in `data`, of size
|
* input, the hash value or message to sign is in `data`, of
|
||||||
* `hv_len`; the involved hash function is identified by
|
* size `hv_len`; the involved hash function or algorithm is
|
||||||
* `hash_id`. The signature shall be computed and written
|
* identified by `algo_id`. The signature shall be computed and
|
||||||
* back into `data`; the total size of that buffer is `len`
|
* written back into `data`; the total size of that buffer is
|
||||||
* bytes.
|
* `len` bytes.
|
||||||
*
|
*
|
||||||
* This callback shall verify that the signature length does not
|
* This callback shall verify that the signature length does not
|
||||||
* exceed `len` bytes, and abstain from writing the signature if
|
* exceed `len` bytes, and abstain from writing the signature if
|
||||||
* it does not fit.
|
* it does not fit.
|
||||||
*
|
*
|
||||||
* For RSA signatures, the `hash_id` may be 0, in which case
|
* The `algo_id` value matches that which was written in the
|
||||||
* this is the special header-less signature specified in TLS 1.0
|
* `choices` structures by the `choose()` callback. This will be
|
||||||
* and 1.1, with a 36-byte hash value. Otherwise, normal PKCS#1
|
* one of the following:
|
||||||
* v1.5 signatures shall be computed.
|
*
|
||||||
|
* - `0xFF00 + id` for a hash function identifier `id`. In
|
||||||
|
* that case, the `data` buffer contains a hash value
|
||||||
|
* already computed over the data that is to be signed,
|
||||||
|
* of length `hv_len`. The `id` may be 0 to designate the
|
||||||
|
* special MD5+SHA-1 concatenation (old-style RSA signing).
|
||||||
|
*
|
||||||
|
* - Another value, lower than `0xFF00`. The `data` buffer
|
||||||
|
* then contains the raw, non-hashed data to be signed
|
||||||
|
* (concatenation of the client and server randoms and
|
||||||
|
* ECDH parameters). The callback is responsible to apply
|
||||||
|
* any relevant hashing as part of the signing process.
|
||||||
*
|
*
|
||||||
* Returned value is the signature length (in bytes), or 0 on error.
|
* Returned value is the signature length (in bytes), or 0 on error.
|
||||||
*
|
*
|
||||||
* \param pctx policy context.
|
* \param pctx policy context.
|
||||||
* \param hash_id hash function identifier.
|
* \param algo_id hash function / algorithm identifier.
|
||||||
* \param hv_len hash value length (in bytes).
|
* \param data input/output buffer (message/hash, then signature).
|
||||||
* \param data input/output buffer (hash value, then signature).
|
* \param hv_len hash value or message length (in bytes).
|
||||||
* \param len total buffer length (in bytes).
|
* \param len total buffer length (in bytes).
|
||||||
* \return signature length (in bytes) on success, or 0 on error.
|
* \return signature length (in bytes) on success, or 0 on error.
|
||||||
*/
|
*/
|
||||||
size_t (*do_sign)(const br_ssl_server_policy_class **pctx,
|
size_t (*do_sign)(const br_ssl_server_policy_class **pctx,
|
||||||
int hash_id, size_t hv_len, unsigned char *data, size_t len);
|
unsigned algo_id,
|
||||||
|
unsigned char *data, size_t hv_len, size_t len);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -3006,9 +3065,10 @@ struct br_ssl_server_context_ {
|
||||||
/*
|
/*
|
||||||
* Hash functions supported by the client, with ECDSA and RSA
|
* Hash functions supported by the client, with ECDSA and RSA
|
||||||
* (bit mask). For hash function with id 'x', set bit index is
|
* (bit mask). For hash function with id 'x', set bit index is
|
||||||
* x for RSA, x+8 for ECDSA.
|
* x for RSA, x+8 for ECDSA. For newer algorithms, with ID
|
||||||
|
* 0x08**, bit 16+k is set for algorithm 0x0800+k.
|
||||||
*/
|
*/
|
||||||
uint16_t hashes;
|
uint32_t hashes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Curves supported by the client (bit mask, for named curves).
|
* Curves supported by the client (bit mask, for named curves).
|
||||||
|
|
@ -3019,7 +3079,7 @@ struct br_ssl_server_context_ {
|
||||||
* Context for chain handler.
|
* Context for chain handler.
|
||||||
*/
|
*/
|
||||||
const br_ssl_server_policy_class **policy_vtable;
|
const br_ssl_server_policy_class **policy_vtable;
|
||||||
unsigned char sign_hash_id;
|
uint16_t sign_hash_id;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For the core handlers, thus avoiding (in most cases) the
|
* For the core handlers, thus avoiding (in most cases) the
|
||||||
|
|
@ -3281,16 +3341,36 @@ br_ssl_server_get_client_suites(const br_ssl_server_context *cc, size_t *num)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the hash functions supported by the client.
|
* \brief Get the hash functions and signature algorithms supported by
|
||||||
|
* the client.
|
||||||
*
|
*
|
||||||
* This is a field of bits: for hash function of ID x, bit x is set if
|
* This value is a bit field:
|
||||||
* the hash function is supported in RSA signatures, 8+x if it is supported
|
*
|
||||||
* with ECDSA.
|
* - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`,
|
||||||
|
* then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1,
|
||||||
|
* or 2 to 6 for the SHA family).
|
||||||
|
*
|
||||||
|
* - If ECDSA is suported with hash function of ID `x`, then bit `8+x`
|
||||||
|
* is set.
|
||||||
|
*
|
||||||
|
* - Newer algorithms are symbolic 16-bit identifiers that do not
|
||||||
|
* represent signature algorithm and hash function separately. If
|
||||||
|
* the TLS-level identifier is `0x0800+x` for a `x` in the 0..15
|
||||||
|
* range, then bit `16+x` is set.
|
||||||
|
*
|
||||||
|
* "New algorithms" are currently defined only in draft documents, so
|
||||||
|
* this support is subject to possible change. Right now (early 2017),
|
||||||
|
* this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA
|
||||||
|
* on Curve448) to bit 24. If the identifiers on the wire change in
|
||||||
|
* future document, then the decoding mechanism in BearSSL will be
|
||||||
|
* amended to keep mapping ed25519 and ed448 on bits 23 and 24,
|
||||||
|
* respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not
|
||||||
|
* guaranteed yet.
|
||||||
*
|
*
|
||||||
* \param cc server context.
|
* \param cc server context.
|
||||||
* \return the client-supported hash functions (for signatures).
|
* \return the client-supported hash functions and signature algorithms.
|
||||||
*/
|
*/
|
||||||
static inline uint16_t
|
static inline uint32_t
|
||||||
br_ssl_server_get_client_hashes(const br_ssl_server_context *cc)
|
br_ssl_server_get_client_hashes(const br_ssl_server_context *cc)
|
||||||
{
|
{
|
||||||
return cc->hashes;
|
return cc->hashes;
|
||||||
|
|
|
||||||
|
|
@ -1299,6 +1299,7 @@ br_ssl_engine_hs_reset(br_ssl_engine_context *cc,
|
||||||
cc->hsrun = hsrun;
|
cc->hsrun = hsrun;
|
||||||
cc->shutdown_recv = 0;
|
cc->shutdown_recv = 0;
|
||||||
cc->application_data = 0;
|
cc->application_data = 0;
|
||||||
|
cc->alert = 0;
|
||||||
jump_handshake(cc, 0);
|
jump_handshake(cc, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -285,7 +285,7 @@ make_pms_ecdh(br_ssl_client_context *ctx, unsigned ecdhe, int prf_id)
|
||||||
{
|
{
|
||||||
int curve;
|
int curve;
|
||||||
unsigned char key[66], point[133];
|
unsigned char key[66], point[133];
|
||||||
const unsigned char *generator, *order, *point_src;
|
const unsigned char *order, *point_src;
|
||||||
size_t glen, olen, point_len;
|
size_t glen, olen, point_len;
|
||||||
unsigned char mask;
|
unsigned char mask;
|
||||||
|
|
||||||
|
|
@ -326,7 +326,7 @@ make_pms_ecdh(br_ssl_client_context *ctx, unsigned ecdhe, int prf_id)
|
||||||
* Compute the common ECDH point, whose X coordinate is the
|
* Compute the common ECDH point, whose X coordinate is the
|
||||||
* pre-master secret.
|
* pre-master secret.
|
||||||
*/
|
*/
|
||||||
generator = ctx->eng.iec->generator(curve, &glen);
|
ctx->eng.iec->generator(curve, &glen);
|
||||||
if (glen != point_len) {
|
if (glen != point_len) {
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
return -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
|
|
@ -500,28 +500,28 @@ static const uint8_t t0_codeblock[] = {
|
||||||
T0_INT2(offsetof(br_ssl_engine_context, version_max)), 0x00, 0x00,
|
T0_INT2(offsetof(br_ssl_engine_context, version_max)), 0x00, 0x00,
|
||||||
0x01, T0_INT2(offsetof(br_ssl_engine_context, version_min)), 0x00,
|
0x01, T0_INT2(offsetof(br_ssl_engine_context, version_min)), 0x00,
|
||||||
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, version_out)),
|
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, version_out)),
|
||||||
0x00, 0x00, 0x09, 0x26, 0x55, 0x06, 0x02, 0x65, 0x28, 0x00, 0x00, 0x06,
|
0x00, 0x00, 0x09, 0x26, 0x56, 0x06, 0x02, 0x66, 0x28, 0x00, 0x00, 0x06,
|
||||||
0x08, 0x2C, 0x0E, 0x05, 0x02, 0x6E, 0x28, 0x04, 0x01, 0x3C, 0x00, 0x00,
|
0x08, 0x2C, 0x0E, 0x05, 0x02, 0x6F, 0x28, 0x04, 0x01, 0x3C, 0x00, 0x00,
|
||||||
0x01, 0x01, 0x00, 0x01, 0x03, 0x00, 0x96, 0x26, 0x5B, 0x43, 0x9A, 0x26,
|
0x01, 0x01, 0x00, 0x01, 0x03, 0x00, 0x97, 0x26, 0x5C, 0x44, 0x9B, 0x26,
|
||||||
0x05, 0x04, 0x5D, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x9A,
|
0x05, 0x04, 0x5E, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x9B,
|
||||||
0x00, 0x5B, 0x04, 0x6B, 0x00, 0x06, 0x02, 0x65, 0x28, 0x00, 0x00, 0x26,
|
0x00, 0x5C, 0x04, 0x6B, 0x00, 0x06, 0x02, 0x66, 0x28, 0x00, 0x00, 0x26,
|
||||||
0x86, 0x43, 0x05, 0x03, 0x01, 0x0C, 0x08, 0x43, 0x76, 0x2C, 0xA8, 0x1C,
|
0x87, 0x44, 0x05, 0x03, 0x01, 0x0C, 0x08, 0x44, 0x77, 0x2C, 0xA9, 0x1C,
|
||||||
0x81, 0x01, 0x0C, 0x31, 0x00, 0x00, 0x26, 0x1F, 0x01, 0x08, 0x0B, 0x43,
|
0x82, 0x01, 0x0C, 0x31, 0x00, 0x00, 0x26, 0x1F, 0x01, 0x08, 0x0B, 0x44,
|
||||||
0x59, 0x1F, 0x08, 0x00, 0x01, 0x03, 0x00, 0x01, 0x00, 0x74, 0x3D, 0x29,
|
0x5A, 0x1F, 0x08, 0x00, 0x01, 0x03, 0x00, 0x01, 0x00, 0x75, 0x3E, 0x29,
|
||||||
0x1A, 0x36, 0x06, 0x07, 0x02, 0x00, 0xCB, 0x03, 0x00, 0x04, 0x75, 0x01,
|
0x1A, 0x36, 0x06, 0x07, 0x02, 0x00, 0xCC, 0x03, 0x00, 0x04, 0x75, 0x01,
|
||||||
0x00, 0xC2, 0x02, 0x00, 0x26, 0x1A, 0x17, 0x06, 0x02, 0x6C, 0x28, 0xCB,
|
0x00, 0xC3, 0x02, 0x00, 0x26, 0x1A, 0x17, 0x06, 0x02, 0x6D, 0x28, 0xCC,
|
||||||
0x04, 0x76, 0x01, 0x01, 0x00, 0x74, 0x3D, 0x01, 0x16, 0x84, 0x3D, 0x01,
|
0x04, 0x76, 0x01, 0x01, 0x00, 0x75, 0x3E, 0x01, 0x16, 0x85, 0x3E, 0x01,
|
||||||
0x00, 0x87, 0x3C, 0x34, 0xD1, 0x29, 0xB1, 0x06, 0x09, 0x01, 0x7F, 0xAC,
|
0x00, 0x88, 0x3C, 0x34, 0xD2, 0x29, 0xB2, 0x06, 0x09, 0x01, 0x7F, 0xAD,
|
||||||
0x01, 0x7F, 0xCE, 0x04, 0x80, 0x53, 0xAE, 0x76, 0x2C, 0x9E, 0x01,
|
0x01, 0x7F, 0xCF, 0x04, 0x80, 0x53, 0xAF, 0x77, 0x2C, 0x9F, 0x01,
|
||||||
T0_INT1(BR_KEYTYPE_SIGN), 0x17, 0x06, 0x01, 0xB2, 0xB5, 0x26, 0x01,
|
T0_INT1(BR_KEYTYPE_SIGN), 0x17, 0x06, 0x01, 0xB3, 0xB6, 0x26, 0x01,
|
||||||
0x0D, 0x0E, 0x06, 0x07, 0x25, 0xB4, 0xB5, 0x01, 0x7F, 0x04, 0x02, 0x01,
|
0x0D, 0x0E, 0x06, 0x07, 0x25, 0xB5, 0xB6, 0x01, 0x7F, 0x04, 0x02, 0x01,
|
||||||
0x00, 0x03, 0x00, 0x01, 0x0E, 0x0E, 0x05, 0x02, 0x6F, 0x28, 0x06, 0x02,
|
0x00, 0x03, 0x00, 0x01, 0x0E, 0x0E, 0x05, 0x02, 0x70, 0x28, 0x06, 0x02,
|
||||||
0x64, 0x28, 0x33, 0x06, 0x02, 0x6F, 0x28, 0x02, 0x00, 0x06, 0x1C, 0xCF,
|
0x65, 0x28, 0x33, 0x06, 0x02, 0x70, 0x28, 0x02, 0x00, 0x06, 0x1C, 0xD0,
|
||||||
0x7D, 0x2E, 0x01, 0x81, 0x7F, 0x0E, 0x06, 0x0D, 0x25, 0x01, 0x10, 0xDA,
|
0x7E, 0x2E, 0x01, 0x81, 0x7F, 0x0E, 0x06, 0x0D, 0x25, 0x01, 0x10, 0xDB,
|
||||||
0x01, 0x00, 0xD9, 0x76, 0x2C, 0xA8, 0x24, 0x04, 0x04, 0xD2, 0x06, 0x01,
|
0x01, 0x00, 0xDA, 0x77, 0x2C, 0xA9, 0x24, 0x04, 0x04, 0xD3, 0x06, 0x01,
|
||||||
0xD0, 0x04, 0x01, 0xD2, 0x01, 0x7F, 0xCE, 0x01, 0x7F, 0xAC, 0x01, 0x01,
|
0xD1, 0x04, 0x01, 0xD3, 0x01, 0x7F, 0xCF, 0x01, 0x7F, 0xAD, 0x01, 0x01,
|
||||||
0x74, 0x3D, 0x01, 0x17, 0x84, 0x3D, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00,
|
0x75, 0x3E, 0x01, 0x17, 0x85, 0x3E, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00,
|
||||||
0x97, 0x01, 0x0C, 0x11, 0x01, 0x00, 0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
0x98, 0x01, 0x0C, 0x11, 0x01, 0x00, 0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
||||||
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_KEYX), 0x04, 0x30, 0x01, 0x01,
|
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_KEYX), 0x04, 0x30, 0x01, 0x01,
|
||||||
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
||||||
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_SIGN), 0x04, 0x25, 0x01, 0x02,
|
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_SIGN), 0x04, 0x25, 0x01, 0x02,
|
||||||
|
|
@ -531,214 +531,216 @@ static const uint8_t t0_codeblock[] = {
|
||||||
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x0F, 0x01, 0x04,
|
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x0F, 0x01, 0x04,
|
||||||
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
|
||||||
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x04, 0x01, 0x00,
|
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x04, 0x01, 0x00,
|
||||||
0x43, 0x25, 0x00, 0x00, 0x7F, 0x2E, 0x01, 0x0E, 0x0E, 0x06, 0x04, 0x01,
|
0x44, 0x25, 0x00, 0x00, 0x80, 0x2E, 0x01, 0x0E, 0x0E, 0x06, 0x04, 0x01,
|
||||||
0x00, 0x04, 0x02, 0x01, 0x05, 0x00, 0x00, 0x3F, 0x06, 0x04, 0x01, 0x06,
|
0x00, 0x04, 0x02, 0x01, 0x05, 0x00, 0x00, 0x40, 0x06, 0x04, 0x01, 0x06,
|
||||||
0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x85, 0x2E, 0x26, 0x06, 0x08, 0x01,
|
0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x86, 0x2E, 0x26, 0x06, 0x08, 0x01,
|
||||||
0x01, 0x09, 0x01, 0x11, 0x07, 0x04, 0x03, 0x25, 0x01, 0x05, 0x00, 0x01,
|
0x01, 0x09, 0x01, 0x11, 0x07, 0x04, 0x03, 0x25, 0x01, 0x05, 0x00, 0x01,
|
||||||
0x40, 0x03, 0x00, 0x25, 0x01, 0x00, 0x42, 0x06, 0x03, 0x02, 0x00, 0x08,
|
0x41, 0x03, 0x00, 0x25, 0x01, 0x00, 0x43, 0x06, 0x03, 0x02, 0x00, 0x08,
|
||||||
0x41, 0x06, 0x03, 0x02, 0x00, 0x08, 0x26, 0x06, 0x06, 0x01, 0x01, 0x0B,
|
0x42, 0x06, 0x03, 0x02, 0x00, 0x08, 0x26, 0x06, 0x06, 0x01, 0x01, 0x0B,
|
||||||
0x01, 0x06, 0x08, 0x00, 0x00, 0x88, 0x3E, 0x26, 0x06, 0x03, 0x01, 0x09,
|
0x01, 0x06, 0x08, 0x00, 0x00, 0x89, 0x3F, 0x26, 0x06, 0x03, 0x01, 0x09,
|
||||||
0x08, 0x00, 0x01, 0x3F, 0x26, 0x06, 0x1E, 0x01, 0x00, 0x03, 0x00, 0x26,
|
0x08, 0x00, 0x01, 0x40, 0x26, 0x06, 0x1E, 0x01, 0x00, 0x03, 0x00, 0x26,
|
||||||
0x06, 0x0E, 0x26, 0x01, 0x01, 0x17, 0x02, 0x00, 0x08, 0x03, 0x00, 0x01,
|
0x06, 0x0E, 0x26, 0x01, 0x01, 0x17, 0x02, 0x00, 0x08, 0x03, 0x00, 0x01,
|
||||||
0x01, 0x11, 0x04, 0x6F, 0x25, 0x02, 0x00, 0x01, 0x01, 0x0B, 0x01, 0x06,
|
0x01, 0x11, 0x04, 0x6F, 0x25, 0x02, 0x00, 0x01, 0x01, 0x0B, 0x01, 0x06,
|
||||||
0x08, 0x00, 0x00, 0x7C, 0x2D, 0x43, 0x11, 0x01, 0x01, 0x17, 0x35, 0x00,
|
0x08, 0x00, 0x00, 0x7D, 0x2D, 0x44, 0x11, 0x01, 0x01, 0x17, 0x35, 0x00,
|
||||||
0x00, 0x9C, 0xCA, 0x26, 0x01, 0x07, 0x17, 0x01, 0x00, 0x38, 0x0E, 0x06,
|
0x00, 0x9D, 0xCB, 0x26, 0x01, 0x07, 0x17, 0x01, 0x00, 0x38, 0x0E, 0x06,
|
||||||
0x09, 0x25, 0x01, 0x10, 0x17, 0x06, 0x01, 0x9C, 0x04, 0x2D, 0x01, 0x01,
|
0x09, 0x25, 0x01, 0x10, 0x17, 0x06, 0x01, 0x9D, 0x04, 0x2D, 0x01, 0x01,
|
||||||
0x38, 0x0E, 0x06, 0x24, 0x25, 0x25, 0x01, 0x00, 0x74, 0x3D, 0xB0, 0x85,
|
0x38, 0x0E, 0x06, 0x24, 0x25, 0x25, 0x01, 0x00, 0x75, 0x3E, 0xB1, 0x86,
|
||||||
0x2E, 0x01, 0x01, 0x0E, 0x01, 0x01, 0xA5, 0x37, 0x06, 0x0F, 0x29, 0x1A,
|
0x2E, 0x01, 0x01, 0x0E, 0x01, 0x01, 0xA6, 0x37, 0x06, 0x0F, 0x29, 0x1A,
|
||||||
0x36, 0x06, 0x04, 0xCA, 0x25, 0x04, 0x78, 0x01, 0x80, 0x64, 0xC2, 0x04,
|
0x36, 0x06, 0x04, 0xCB, 0x25, 0x04, 0x78, 0x01, 0x80, 0x64, 0xC3, 0x04,
|
||||||
0x01, 0x9C, 0x04, 0x03, 0x6F, 0x28, 0x25, 0x04, 0xFF, 0x3C, 0x01, 0x26,
|
0x01, 0x9D, 0x04, 0x03, 0x70, 0x28, 0x25, 0x04, 0xFF, 0x3C, 0x01, 0x26,
|
||||||
0x03, 0x00, 0x09, 0x26, 0x55, 0x06, 0x02, 0x65, 0x28, 0x02, 0x00, 0x00,
|
0x03, 0x00, 0x09, 0x26, 0x56, 0x06, 0x02, 0x66, 0x28, 0x02, 0x00, 0x00,
|
||||||
0x00, 0x97, 0x01, 0x0F, 0x17, 0x00, 0x00, 0x73, 0x2E, 0x01, 0x00, 0x38,
|
0x00, 0x98, 0x01, 0x0F, 0x17, 0x00, 0x00, 0x74, 0x2E, 0x01, 0x00, 0x38,
|
||||||
0x0E, 0x06, 0x10, 0x25, 0x26, 0x01, 0x01, 0x0D, 0x06, 0x03, 0x25, 0x01,
|
0x0E, 0x06, 0x10, 0x25, 0x26, 0x01, 0x01, 0x0D, 0x06, 0x03, 0x25, 0x01,
|
||||||
0x02, 0x73, 0x3D, 0x01, 0x00, 0x04, 0x22, 0x01, 0x01, 0x38, 0x0E, 0x06,
|
0x02, 0x74, 0x3E, 0x01, 0x00, 0x04, 0x21, 0x01, 0x01, 0x38, 0x0E, 0x06,
|
||||||
0x15, 0x25, 0x01, 0x00, 0x73, 0x3D, 0x26, 0x01, 0x80, 0x64, 0x0E, 0x06,
|
0x14, 0x25, 0x01, 0x00, 0x74, 0x3E, 0x26, 0x01, 0x80, 0x64, 0x0E, 0x06,
|
||||||
0x05, 0x01, 0x82, 0x00, 0x08, 0x28, 0x57, 0x00, 0x04, 0x07, 0x25, 0x01,
|
0x05, 0x01, 0x82, 0x00, 0x08, 0x28, 0x58, 0x04, 0x07, 0x25, 0x01, 0x82,
|
||||||
0x82, 0x00, 0x08, 0x28, 0x25, 0x00, 0x00, 0x01, 0x00, 0x2F, 0x06, 0x05,
|
0x00, 0x08, 0x28, 0x25, 0x00, 0x00, 0x01, 0x00, 0x2F, 0x06, 0x05, 0x3A,
|
||||||
0x3A, 0xA9, 0x37, 0x04, 0x78, 0x26, 0x06, 0x04, 0x01, 0x01, 0x8C, 0x3D,
|
0xAA, 0x37, 0x04, 0x78, 0x26, 0x06, 0x04, 0x01, 0x01, 0x8D, 0x3E, 0x00,
|
||||||
0x00, 0x01, 0xBC, 0xA7, 0xBC, 0xA7, 0xBE, 0x81, 0x43, 0x26, 0x03, 0x00,
|
0x01, 0xBD, 0xA8, 0xBD, 0xA8, 0xBF, 0x82, 0x44, 0x26, 0x03, 0x00, 0xB4,
|
||||||
0xB3, 0x98, 0x98, 0x02, 0x00, 0x4A, 0x26, 0x55, 0x06, 0x0A, 0x01, 0x03,
|
0x99, 0x99, 0x02, 0x00, 0x4B, 0x26, 0x56, 0x06, 0x0A, 0x01, 0x03, 0xA6,
|
||||||
0xA5, 0x06, 0x02, 0x6F, 0x28, 0x25, 0x04, 0x03, 0x59, 0x87, 0x3C, 0x00,
|
0x06, 0x02, 0x70, 0x28, 0x25, 0x04, 0x03, 0x5A, 0x88, 0x3C, 0x00, 0x00,
|
||||||
0x00, 0x2F, 0x06, 0x0B, 0x83, 0x2E, 0x01, 0x14, 0x0D, 0x06, 0x02, 0x6F,
|
0x2F, 0x06, 0x0B, 0x84, 0x2E, 0x01, 0x14, 0x0D, 0x06, 0x02, 0x70, 0x28,
|
||||||
0x28, 0x04, 0x11, 0xCA, 0x01, 0x07, 0x17, 0x26, 0x01, 0x02, 0x0D, 0x06,
|
0x04, 0x11, 0xCB, 0x01, 0x07, 0x17, 0x26, 0x01, 0x02, 0x0D, 0x06, 0x06,
|
||||||
0x06, 0x06, 0x02, 0x6F, 0x28, 0x04, 0x70, 0x25, 0xBF, 0x01, 0x01, 0x0D,
|
0x06, 0x02, 0x70, 0x28, 0x04, 0x70, 0x25, 0xC0, 0x01, 0x01, 0x0D, 0x33,
|
||||||
0x33, 0x37, 0x06, 0x02, 0x5E, 0x28, 0x26, 0x01, 0x01, 0xC5, 0x36, 0xAF,
|
0x37, 0x06, 0x02, 0x5F, 0x28, 0x26, 0x01, 0x01, 0xC6, 0x36, 0xB0, 0x00,
|
||||||
0x00, 0x01, 0xB5, 0x01, 0x0B, 0x0E, 0x05, 0x02, 0x6F, 0x28, 0x26, 0x01,
|
0x01, 0xB6, 0x01, 0x0B, 0x0E, 0x05, 0x02, 0x70, 0x28, 0x26, 0x01, 0x03,
|
||||||
0x03, 0x0E, 0x06, 0x08, 0xBD, 0x06, 0x02, 0x65, 0x28, 0x43, 0x25, 0x00,
|
0x0E, 0x06, 0x08, 0xBE, 0x06, 0x02, 0x66, 0x28, 0x44, 0x25, 0x00, 0x44,
|
||||||
0x43, 0x54, 0xBD, 0xA7, 0x26, 0x06, 0x23, 0xBD, 0xA7, 0x26, 0x53, 0x26,
|
0x55, 0xBE, 0xA8, 0x26, 0x06, 0x23, 0xBE, 0xA8, 0x26, 0x54, 0x26, 0x06,
|
||||||
0x06, 0x18, 0x26, 0x01, 0x82, 0x00, 0x0F, 0x06, 0x05, 0x01, 0x82, 0x00,
|
0x18, 0x26, 0x01, 0x82, 0x00, 0x0F, 0x06, 0x05, 0x01, 0x82, 0x00, 0x04,
|
||||||
0x04, 0x01, 0x26, 0x03, 0x00, 0x81, 0x02, 0x00, 0xB3, 0x02, 0x00, 0x50,
|
0x01, 0x26, 0x03, 0x00, 0x82, 0x02, 0x00, 0xB4, 0x02, 0x00, 0x51, 0x04,
|
||||||
0x04, 0x65, 0x98, 0x51, 0x04, 0x5A, 0x98, 0x98, 0x52, 0x26, 0x06, 0x02,
|
0x65, 0x99, 0x52, 0x04, 0x5A, 0x99, 0x99, 0x53, 0x26, 0x06, 0x02, 0x35,
|
||||||
0x35, 0x00, 0x25, 0x2B, 0x00, 0x00, 0x76, 0x2C, 0x9E, 0x01, 0x7F, 0xAD,
|
0x00, 0x25, 0x2B, 0x00, 0x00, 0x77, 0x2C, 0x9F, 0x01, 0x7F, 0xAE, 0x26,
|
||||||
0x26, 0x55, 0x06, 0x02, 0x35, 0x28, 0x26, 0x05, 0x02, 0x6F, 0x28, 0x38,
|
0x56, 0x06, 0x02, 0x35, 0x28, 0x26, 0x05, 0x02, 0x70, 0x28, 0x38, 0x17,
|
||||||
0x17, 0x0D, 0x06, 0x02, 0x71, 0x28, 0x3B, 0x00, 0x00, 0x99, 0xB5, 0x01,
|
0x0D, 0x06, 0x02, 0x72, 0x28, 0x3B, 0x00, 0x00, 0x9A, 0xB6, 0x01, 0x14,
|
||||||
0x14, 0x0D, 0x06, 0x02, 0x6F, 0x28, 0x81, 0x01, 0x0C, 0x08, 0x01, 0x0C,
|
0x0D, 0x06, 0x02, 0x70, 0x28, 0x82, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0xB4,
|
||||||
0xB3, 0x98, 0x81, 0x26, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0x30, 0x05, 0x02,
|
0x99, 0x82, 0x26, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0x30, 0x05, 0x02, 0x62,
|
||||||
0x61, 0x28, 0x00, 0x00, 0xB6, 0x06, 0x02, 0x6F, 0x28, 0x06, 0x02, 0x63,
|
0x28, 0x00, 0x00, 0xB7, 0x06, 0x02, 0x70, 0x28, 0x06, 0x02, 0x64, 0x28,
|
||||||
0x28, 0x00, 0x0A, 0xB5, 0x01, 0x02, 0x0E, 0x05, 0x02, 0x6F, 0x28, 0xBC,
|
0x00, 0x0A, 0xB6, 0x01, 0x02, 0x0E, 0x05, 0x02, 0x70, 0x28, 0xBD, 0x03,
|
||||||
0x03, 0x00, 0x02, 0x00, 0x92, 0x2C, 0x0A, 0x02, 0x00, 0x91, 0x2C, 0x0F,
|
0x00, 0x02, 0x00, 0x93, 0x2C, 0x0A, 0x02, 0x00, 0x92, 0x2C, 0x0F, 0x37,
|
||||||
0x37, 0x06, 0x02, 0x70, 0x28, 0x02, 0x00, 0x90, 0x2C, 0x0D, 0x06, 0x02,
|
0x06, 0x02, 0x71, 0x28, 0x02, 0x00, 0x91, 0x2C, 0x0D, 0x06, 0x02, 0x69,
|
||||||
0x68, 0x28, 0x02, 0x00, 0x93, 0x3C, 0x89, 0x01, 0x20, 0xB3, 0x01, 0x00,
|
0x28, 0x02, 0x00, 0x94, 0x3C, 0x8A, 0x01, 0x20, 0xB4, 0x01, 0x00, 0x03,
|
||||||
0x03, 0x01, 0xBE, 0x03, 0x02, 0x02, 0x02, 0x01, 0x20, 0x0F, 0x06, 0x02,
|
0x01, 0xBF, 0x03, 0x02, 0x02, 0x02, 0x01, 0x20, 0x0F, 0x06, 0x02, 0x6E,
|
||||||
0x6D, 0x28, 0x81, 0x02, 0x02, 0xB3, 0x02, 0x02, 0x8B, 0x2E, 0x0E, 0x02,
|
0x28, 0x82, 0x02, 0x02, 0xB4, 0x02, 0x02, 0x8C, 0x2E, 0x0E, 0x02, 0x02,
|
||||||
0x02, 0x01, 0x00, 0x0F, 0x17, 0x06, 0x0B, 0x8A, 0x81, 0x02, 0x02, 0x30,
|
0x01, 0x00, 0x0F, 0x17, 0x06, 0x0B, 0x8B, 0x82, 0x02, 0x02, 0x30, 0x06,
|
||||||
0x06, 0x04, 0x01, 0x7F, 0x03, 0x01, 0x8A, 0x81, 0x02, 0x02, 0x31, 0x02,
|
0x04, 0x01, 0x7F, 0x03, 0x01, 0x8B, 0x82, 0x02, 0x02, 0x31, 0x02, 0x02,
|
||||||
0x02, 0x8B, 0x3D, 0x02, 0x00, 0x8F, 0x02, 0x01, 0x95, 0xBC, 0x26, 0xC0,
|
0x8C, 0x3E, 0x02, 0x00, 0x90, 0x02, 0x01, 0x96, 0xBD, 0x26, 0xC1, 0x56,
|
||||||
0x55, 0x06, 0x02, 0x5F, 0x28, 0x76, 0x02, 0x01, 0x95, 0xBE, 0x06, 0x02,
|
0x06, 0x02, 0x60, 0x28, 0x77, 0x02, 0x01, 0x96, 0xBF, 0x06, 0x02, 0x61,
|
||||||
0x60, 0x28, 0x26, 0x06, 0x81, 0x45, 0xBC, 0xA7, 0xA3, 0x03, 0x03, 0xA1,
|
0x28, 0x26, 0x06, 0x81, 0x45, 0xBD, 0xA8, 0xA4, 0x03, 0x03, 0xA2, 0x03,
|
||||||
0x03, 0x04, 0x9F, 0x03, 0x05, 0xA2, 0x03, 0x06, 0xA4, 0x03, 0x07, 0xA0,
|
0x04, 0xA0, 0x03, 0x05, 0xA3, 0x03, 0x06, 0xA5, 0x03, 0x07, 0xA1, 0x03,
|
||||||
0x03, 0x08, 0x27, 0x03, 0x09, 0x26, 0x06, 0x81, 0x18, 0xBC, 0x01, 0x00,
|
0x08, 0x27, 0x03, 0x09, 0x26, 0x06, 0x81, 0x18, 0xBD, 0x01, 0x00, 0x38,
|
||||||
0x38, 0x0E, 0x06, 0x0F, 0x25, 0x02, 0x03, 0x05, 0x02, 0x69, 0x28, 0x01,
|
0x0E, 0x06, 0x0F, 0x25, 0x02, 0x03, 0x05, 0x02, 0x6A, 0x28, 0x01, 0x00,
|
||||||
0x00, 0x03, 0x03, 0xBB, 0x04, 0x80, 0x7F, 0x01, 0x01, 0x38, 0x0E, 0x06,
|
0x03, 0x03, 0xBC, 0x04, 0x80, 0x7F, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x0F,
|
||||||
0x0F, 0x25, 0x02, 0x05, 0x05, 0x02, 0x69, 0x28, 0x01, 0x00, 0x03, 0x05,
|
0x25, 0x02, 0x05, 0x05, 0x02, 0x6A, 0x28, 0x01, 0x00, 0x03, 0x05, 0xBA,
|
||||||
0xB9, 0x04, 0x80, 0x6A, 0x01, 0x83, 0xFE, 0x01, 0x38, 0x0E, 0x06, 0x0F,
|
0x04, 0x80, 0x6A, 0x01, 0x83, 0xFE, 0x01, 0x38, 0x0E, 0x06, 0x0F, 0x25,
|
||||||
0x25, 0x02, 0x04, 0x05, 0x02, 0x69, 0x28, 0x01, 0x00, 0x03, 0x04, 0xBA,
|
0x02, 0x04, 0x05, 0x02, 0x6A, 0x28, 0x01, 0x00, 0x03, 0x04, 0xBB, 0x04,
|
||||||
0x04, 0x80, 0x53, 0x01, 0x0D, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x06,
|
0x80, 0x53, 0x01, 0x0D, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x06, 0x05,
|
||||||
0x05, 0x02, 0x69, 0x28, 0x01, 0x00, 0x03, 0x06, 0xB7, 0x04, 0x3F, 0x01,
|
0x02, 0x6A, 0x28, 0x01, 0x00, 0x03, 0x06, 0xB8, 0x04, 0x3F, 0x01, 0x0A,
|
||||||
0x0A, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x07, 0x05, 0x02, 0x69, 0x28,
|
0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x07, 0x05, 0x02, 0x6A, 0x28, 0x01,
|
||||||
0x01, 0x00, 0x03, 0x07, 0xB7, 0x04, 0x2B, 0x01, 0x0B, 0x38, 0x0E, 0x06,
|
0x00, 0x03, 0x07, 0xB8, 0x04, 0x2B, 0x01, 0x0B, 0x38, 0x0E, 0x06, 0x0E,
|
||||||
0x0E, 0x25, 0x02, 0x08, 0x05, 0x02, 0x69, 0x28, 0x01, 0x00, 0x03, 0x08,
|
0x25, 0x02, 0x08, 0x05, 0x02, 0x6A, 0x28, 0x01, 0x00, 0x03, 0x08, 0xB8,
|
||||||
0xB7, 0x04, 0x17, 0x01, 0x10, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x09,
|
0x04, 0x17, 0x01, 0x10, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x09, 0x05,
|
||||||
0x05, 0x02, 0x69, 0x28, 0x01, 0x00, 0x03, 0x09, 0xAB, 0x04, 0x03, 0x69,
|
0x02, 0x6A, 0x28, 0x01, 0x00, 0x03, 0x09, 0xAC, 0x04, 0x03, 0x6A, 0x28,
|
||||||
0x28, 0x25, 0x04, 0xFE, 0x64, 0x02, 0x04, 0x06, 0x0D, 0x02, 0x04, 0x01,
|
0x25, 0x04, 0xFE, 0x64, 0x02, 0x04, 0x06, 0x0D, 0x02, 0x04, 0x01, 0x05,
|
||||||
0x05, 0x0F, 0x06, 0x02, 0x66, 0x28, 0x01, 0x01, 0x85, 0x3D, 0x98, 0x98,
|
0x0F, 0x06, 0x02, 0x67, 0x28, 0x01, 0x01, 0x86, 0x3E, 0x99, 0x99, 0x02,
|
||||||
0x02, 0x01, 0x00, 0x04, 0xB5, 0x01, 0x0C, 0x0E, 0x05, 0x02, 0x6F, 0x28,
|
0x01, 0x00, 0x04, 0xB6, 0x01, 0x0C, 0x0E, 0x05, 0x02, 0x70, 0x28, 0xBF,
|
||||||
0xBE, 0x01, 0x03, 0x0E, 0x05, 0x02, 0x6A, 0x28, 0xBC, 0x26, 0x79, 0x3D,
|
0x01, 0x03, 0x0E, 0x05, 0x02, 0x6B, 0x28, 0xBD, 0x26, 0x7A, 0x3E, 0x26,
|
||||||
0x26, 0x01, 0x20, 0x10, 0x06, 0x02, 0x6A, 0x28, 0x3F, 0x43, 0x11, 0x01,
|
0x01, 0x20, 0x10, 0x06, 0x02, 0x6B, 0x28, 0x40, 0x44, 0x11, 0x01, 0x01,
|
||||||
0x01, 0x17, 0x05, 0x02, 0x6A, 0x28, 0xBE, 0x26, 0x01, 0x81, 0x05, 0x0F,
|
0x17, 0x05, 0x02, 0x6B, 0x28, 0xBF, 0x26, 0x01, 0x81, 0x05, 0x0F, 0x06,
|
||||||
0x06, 0x02, 0x6A, 0x28, 0x26, 0x7B, 0x3D, 0x7A, 0x43, 0xB3, 0x8F, 0x2C,
|
0x02, 0x6B, 0x28, 0x26, 0x7C, 0x3E, 0x7B, 0x44, 0xB4, 0x90, 0x2C, 0x01,
|
||||||
0x01, 0x86, 0x03, 0x10, 0x03, 0x00, 0x76, 0x2C, 0xC8, 0x03, 0x01, 0x01,
|
0x86, 0x03, 0x10, 0x03, 0x00, 0x77, 0x2C, 0xC9, 0x03, 0x01, 0x01, 0x02,
|
||||||
0x02, 0x03, 0x02, 0x02, 0x00, 0x06, 0x21, 0xBE, 0x26, 0x26, 0x01, 0x02,
|
0x03, 0x02, 0x02, 0x00, 0x06, 0x21, 0xBF, 0x26, 0x26, 0x01, 0x02, 0x0A,
|
||||||
0x0A, 0x43, 0x01, 0x06, 0x0F, 0x37, 0x06, 0x02, 0x6A, 0x28, 0x03, 0x02,
|
0x44, 0x01, 0x06, 0x0F, 0x37, 0x06, 0x02, 0x6B, 0x28, 0x03, 0x02, 0xBF,
|
||||||
0xBE, 0x02, 0x01, 0x01, 0x01, 0x0B, 0x01, 0x03, 0x08, 0x0E, 0x05, 0x02,
|
0x02, 0x01, 0x01, 0x01, 0x0B, 0x01, 0x03, 0x08, 0x0E, 0x05, 0x02, 0x6B,
|
||||||
0x6A, 0x28, 0x04, 0x08, 0x02, 0x01, 0x06, 0x04, 0x01, 0x00, 0x03, 0x02,
|
0x28, 0x04, 0x08, 0x02, 0x01, 0x06, 0x04, 0x01, 0x00, 0x03, 0x02, 0xBD,
|
||||||
0xBC, 0x26, 0x03, 0x03, 0x26, 0x01, 0x84, 0x00, 0x0F, 0x06, 0x02, 0x6B,
|
0x26, 0x03, 0x03, 0x26, 0x01, 0x84, 0x00, 0x0F, 0x06, 0x02, 0x6C, 0x28,
|
||||||
0x28, 0x81, 0x43, 0xB3, 0x02, 0x02, 0x02, 0x01, 0x02, 0x03, 0x4D, 0x26,
|
0x82, 0x44, 0xB4, 0x02, 0x02, 0x02, 0x01, 0x02, 0x03, 0x4E, 0x26, 0x06,
|
||||||
0x06, 0x01, 0x28, 0x25, 0x98, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0x02,
|
0x01, 0x28, 0x25, 0x99, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0x02, 0x00,
|
||||||
0x00, 0x94, 0x02, 0x01, 0x02, 0x00, 0x39, 0x26, 0x01, 0x00, 0x0E, 0x06,
|
0x95, 0x02, 0x01, 0x02, 0x00, 0x39, 0x26, 0x01, 0x00, 0x0E, 0x06, 0x02,
|
||||||
0x02, 0x5D, 0x00, 0xCC, 0x04, 0x74, 0x02, 0x01, 0x00, 0x03, 0x00, 0xBE,
|
0x5E, 0x00, 0xCD, 0x04, 0x74, 0x02, 0x01, 0x00, 0x03, 0x00, 0xBF, 0xA8,
|
||||||
0xA7, 0x26, 0x06, 0x80, 0x43, 0xBE, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x06,
|
0x26, 0x06, 0x80, 0x43, 0xBF, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x06, 0x25,
|
||||||
0x25, 0x01, 0x81, 0x7F, 0x04, 0x2E, 0x01, 0x80, 0x40, 0x38, 0x0E, 0x06,
|
0x01, 0x81, 0x7F, 0x04, 0x2E, 0x01, 0x80, 0x40, 0x38, 0x0E, 0x06, 0x07,
|
||||||
0x07, 0x25, 0x01, 0x83, 0xFE, 0x00, 0x04, 0x20, 0x01, 0x80, 0x41, 0x38,
|
0x25, 0x01, 0x83, 0xFE, 0x00, 0x04, 0x20, 0x01, 0x80, 0x41, 0x38, 0x0E,
|
||||||
0x0E, 0x06, 0x07, 0x25, 0x01, 0x84, 0x80, 0x00, 0x04, 0x12, 0x01, 0x80,
|
0x06, 0x07, 0x25, 0x01, 0x84, 0x80, 0x00, 0x04, 0x12, 0x01, 0x80, 0x42,
|
||||||
0x42, 0x38, 0x0E, 0x06, 0x07, 0x25, 0x01, 0x88, 0x80, 0x00, 0x04, 0x04,
|
0x38, 0x0E, 0x06, 0x07, 0x25, 0x01, 0x88, 0x80, 0x00, 0x04, 0x04, 0x01,
|
||||||
0x01, 0x00, 0x43, 0x25, 0x02, 0x00, 0x37, 0x03, 0x00, 0x04, 0xFF, 0x39,
|
0x00, 0x44, 0x25, 0x02, 0x00, 0x37, 0x03, 0x00, 0x04, 0xFF, 0x39, 0x99,
|
||||||
0x98, 0x76, 0x2C, 0xC6, 0x05, 0x09, 0x02, 0x00, 0x01, 0x83, 0xFF, 0x7F,
|
0x77, 0x2C, 0xC7, 0x05, 0x09, 0x02, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x17,
|
||||||
0x17, 0x03, 0x00, 0x8F, 0x2C, 0x01, 0x86, 0x03, 0x10, 0x06, 0x3A, 0xB8,
|
0x03, 0x00, 0x90, 0x2C, 0x01, 0x86, 0x03, 0x10, 0x06, 0x3A, 0xB9, 0x26,
|
||||||
0x26, 0x7E, 0x3C, 0x40, 0x25, 0x26, 0x01, 0x08, 0x0B, 0x37, 0x01, 0x8C,
|
0x7F, 0x3D, 0x41, 0x25, 0x26, 0x01, 0x08, 0x0B, 0x37, 0x01, 0x8C, 0x80,
|
||||||
0x80, 0x00, 0x37, 0x17, 0x02, 0x00, 0x17, 0x02, 0x00, 0x01, 0x8C, 0x80,
|
0x00, 0x37, 0x17, 0x02, 0x00, 0x17, 0x02, 0x00, 0x01, 0x8C, 0x80, 0x00,
|
||||||
0x00, 0x17, 0x06, 0x19, 0x26, 0x01, 0x81, 0x7F, 0x17, 0x06, 0x05, 0x01,
|
0x17, 0x06, 0x19, 0x26, 0x01, 0x81, 0x7F, 0x17, 0x06, 0x05, 0x01, 0x84,
|
||||||
0x84, 0x80, 0x00, 0x37, 0x26, 0x01, 0x83, 0xFE, 0x00, 0x17, 0x06, 0x05,
|
0x80, 0x00, 0x37, 0x26, 0x01, 0x83, 0xFE, 0x00, 0x17, 0x06, 0x05, 0x01,
|
||||||
0x01, 0x88, 0x80, 0x00, 0x37, 0x03, 0x00, 0x04, 0x09, 0x02, 0x00, 0x01,
|
0x88, 0x80, 0x00, 0x37, 0x03, 0x00, 0x04, 0x09, 0x02, 0x00, 0x01, 0x8C,
|
||||||
0x8C, 0x88, 0x01, 0x17, 0x03, 0x00, 0x16, 0xBC, 0xA7, 0x26, 0x06, 0x23,
|
0x88, 0x01, 0x17, 0x03, 0x00, 0x16, 0xBD, 0xA8, 0x26, 0x06, 0x23, 0xBD,
|
||||||
0xBC, 0xA7, 0x26, 0x15, 0x26, 0x06, 0x18, 0x26, 0x01, 0x82, 0x00, 0x0F,
|
0xA8, 0x26, 0x15, 0x26, 0x06, 0x18, 0x26, 0x01, 0x82, 0x00, 0x0F, 0x06,
|
||||||
0x06, 0x05, 0x01, 0x82, 0x00, 0x04, 0x01, 0x26, 0x03, 0x01, 0x81, 0x02,
|
0x05, 0x01, 0x82, 0x00, 0x04, 0x01, 0x26, 0x03, 0x01, 0x82, 0x02, 0x01,
|
||||||
0x01, 0xB3, 0x02, 0x01, 0x12, 0x04, 0x65, 0x98, 0x13, 0x04, 0x5A, 0x98,
|
0xB4, 0x02, 0x01, 0x12, 0x04, 0x65, 0x99, 0x13, 0x04, 0x5A, 0x99, 0x14,
|
||||||
0x14, 0x98, 0x02, 0x00, 0x2A, 0x00, 0x00, 0xB6, 0x26, 0x57, 0x06, 0x07,
|
0x99, 0x02, 0x00, 0x2A, 0x00, 0x00, 0xB7, 0x26, 0x58, 0x06, 0x07, 0x25,
|
||||||
0x25, 0x06, 0x02, 0x63, 0x28, 0x04, 0x74, 0x00, 0x00, 0xBF, 0x01, 0x03,
|
0x06, 0x02, 0x64, 0x28, 0x04, 0x74, 0x00, 0x00, 0xC0, 0x01, 0x03, 0xBE,
|
||||||
0xBD, 0x43, 0x25, 0x43, 0x00, 0x00, 0xBC, 0xC3, 0x00, 0x03, 0x01, 0x00,
|
0x44, 0x25, 0x44, 0x00, 0x00, 0xBD, 0xC4, 0x00, 0x03, 0x01, 0x00, 0x03,
|
||||||
0x03, 0x00, 0xBC, 0xA7, 0x26, 0x06, 0x32, 0xBE, 0x03, 0x01, 0xBE, 0x03,
|
0x00, 0xBD, 0xA8, 0x26, 0x06, 0x80, 0x50, 0xBF, 0x03, 0x01, 0xBF, 0x03,
|
||||||
0x02, 0x02, 0x01, 0x01, 0x02, 0x10, 0x02, 0x01, 0x01, 0x06, 0x0C, 0x17,
|
0x02, 0x02, 0x01, 0x01, 0x08, 0x0E, 0x06, 0x16, 0x02, 0x02, 0x01, 0x0F,
|
||||||
0x02, 0x02, 0x01, 0x01, 0x0E, 0x02, 0x02, 0x01, 0x03, 0x0E, 0x37, 0x17,
|
0x0C, 0x06, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x01, 0x10, 0x08, 0x0B, 0x02,
|
||||||
0x06, 0x11, 0x02, 0x00, 0x01, 0x01, 0x02, 0x02, 0x5A, 0x01, 0x02, 0x0B,
|
0x00, 0x37, 0x03, 0x00, 0x04, 0x2A, 0x02, 0x01, 0x01, 0x02, 0x10, 0x02,
|
||||||
0x02, 0x01, 0x08, 0x0B, 0x37, 0x03, 0x00, 0x04, 0x4B, 0x98, 0x02, 0x00,
|
0x01, 0x01, 0x06, 0x0C, 0x17, 0x02, 0x02, 0x01, 0x01, 0x0E, 0x02, 0x02,
|
||||||
0x00, 0x00, 0xBC, 0x01, 0x01, 0x0E, 0x05, 0x02, 0x62, 0x28, 0xBE, 0x01,
|
0x01, 0x03, 0x0E, 0x37, 0x17, 0x06, 0x11, 0x02, 0x00, 0x01, 0x01, 0x02,
|
||||||
0x08, 0x08, 0x7F, 0x2E, 0x0E, 0x05, 0x02, 0x62, 0x28, 0x00, 0x00, 0xBC,
|
0x02, 0x5B, 0x01, 0x02, 0x0B, 0x02, 0x01, 0x08, 0x0B, 0x37, 0x03, 0x00,
|
||||||
0x85, 0x2E, 0x05, 0x15, 0x01, 0x01, 0x0E, 0x05, 0x02, 0x66, 0x28, 0xBE,
|
0x04, 0xFF, 0x2C, 0x99, 0x02, 0x00, 0x00, 0x00, 0xBD, 0x01, 0x01, 0x0E,
|
||||||
0x01, 0x00, 0x0E, 0x05, 0x02, 0x66, 0x28, 0x01, 0x02, 0x85, 0x3D, 0x04,
|
0x05, 0x02, 0x63, 0x28, 0xBF, 0x01, 0x08, 0x08, 0x80, 0x2E, 0x0E, 0x05,
|
||||||
0x1C, 0x01, 0x19, 0x0E, 0x05, 0x02, 0x66, 0x28, 0xBE, 0x01, 0x18, 0x0E,
|
0x02, 0x63, 0x28, 0x00, 0x00, 0xBD, 0x86, 0x2E, 0x05, 0x15, 0x01, 0x01,
|
||||||
0x05, 0x02, 0x66, 0x28, 0x81, 0x01, 0x18, 0xB3, 0x86, 0x81, 0x01, 0x18,
|
0x0E, 0x05, 0x02, 0x67, 0x28, 0xBF, 0x01, 0x00, 0x0E, 0x05, 0x02, 0x67,
|
||||||
0x30, 0x05, 0x02, 0x66, 0x28, 0x00, 0x00, 0xBC, 0x06, 0x02, 0x67, 0x28,
|
0x28, 0x01, 0x02, 0x86, 0x3E, 0x04, 0x1C, 0x01, 0x19, 0x0E, 0x05, 0x02,
|
||||||
0x00, 0x00, 0x01, 0x02, 0x94, 0xBF, 0x01, 0x08, 0x0B, 0xBF, 0x08, 0x00,
|
0x67, 0x28, 0xBF, 0x01, 0x18, 0x0E, 0x05, 0x02, 0x67, 0x28, 0x82, 0x01,
|
||||||
0x00, 0x01, 0x03, 0x94, 0xBF, 0x01, 0x08, 0x0B, 0xBF, 0x08, 0x01, 0x08,
|
0x18, 0xB4, 0x87, 0x82, 0x01, 0x18, 0x30, 0x05, 0x02, 0x67, 0x28, 0x00,
|
||||||
0x0B, 0xBF, 0x08, 0x00, 0x00, 0x01, 0x01, 0x94, 0xBF, 0x00, 0x00, 0x3A,
|
0x00, 0xBD, 0x06, 0x02, 0x68, 0x28, 0x00, 0x00, 0x01, 0x02, 0x95, 0xC0,
|
||||||
0x26, 0x55, 0x05, 0x01, 0x00, 0x25, 0xCC, 0x04, 0x76, 0x02, 0x03, 0x00,
|
0x01, 0x08, 0x0B, 0xC0, 0x08, 0x00, 0x00, 0x01, 0x03, 0x95, 0xC0, 0x01,
|
||||||
0x8E, 0x2E, 0x03, 0x01, 0x01, 0x00, 0x26, 0x02, 0x01, 0x0A, 0x06, 0x10,
|
0x08, 0x0B, 0xC0, 0x08, 0x01, 0x08, 0x0B, 0xC0, 0x08, 0x00, 0x00, 0x01,
|
||||||
0x26, 0x01, 0x01, 0x0B, 0x8D, 0x08, 0x2C, 0x02, 0x00, 0x0E, 0x06, 0x01,
|
0x01, 0x95, 0xC0, 0x00, 0x00, 0x3A, 0x26, 0x56, 0x05, 0x01, 0x00, 0x25,
|
||||||
0x00, 0x59, 0x04, 0x6A, 0x25, 0x01, 0x7F, 0x00, 0x00, 0x01, 0x15, 0x84,
|
0xCD, 0x04, 0x76, 0x02, 0x03, 0x00, 0x8F, 0x2E, 0x03, 0x01, 0x01, 0x00,
|
||||||
0x3D, 0x43, 0x4F, 0x25, 0x4F, 0x25, 0x29, 0x00, 0x00, 0x01, 0x01, 0x43,
|
0x26, 0x02, 0x01, 0x0A, 0x06, 0x10, 0x26, 0x01, 0x01, 0x0B, 0x8E, 0x08,
|
||||||
0xC1, 0x00, 0x00, 0x43, 0x38, 0x94, 0x43, 0x26, 0x06, 0x05, 0xBF, 0x25,
|
0x2C, 0x02, 0x00, 0x0E, 0x06, 0x01, 0x00, 0x5A, 0x04, 0x6A, 0x25, 0x01,
|
||||||
0x5A, 0x04, 0x78, 0x25, 0x00, 0x00, 0x26, 0x01, 0x81, 0xAC, 0x00, 0x0E,
|
0x7F, 0x00, 0x00, 0x01, 0x15, 0x85, 0x3E, 0x44, 0x50, 0x25, 0x50, 0x25,
|
||||||
0x06, 0x04, 0x25, 0x01, 0x7F, 0x00, 0x97, 0x56, 0x00, 0x02, 0x03, 0x00,
|
0x29, 0x00, 0x00, 0x01, 0x01, 0x44, 0xC2, 0x00, 0x00, 0x44, 0x38, 0x95,
|
||||||
0x76, 0x2C, 0x97, 0x03, 0x01, 0x02, 0x01, 0x01, 0x0F, 0x17, 0x02, 0x01,
|
0x44, 0x26, 0x06, 0x05, 0xC0, 0x25, 0x5B, 0x04, 0x78, 0x25, 0x00, 0x00,
|
||||||
0x01, 0x04, 0x11, 0x01, 0x0F, 0x17, 0x02, 0x01, 0x01, 0x08, 0x11, 0x01,
|
0x26, 0x01, 0x81, 0xAC, 0x00, 0x0E, 0x06, 0x04, 0x25, 0x01, 0x7F, 0x00,
|
||||||
0x0F, 0x17, 0x01, 0x00, 0x38, 0x0E, 0x06, 0x10, 0x25, 0x01, 0x00, 0x01,
|
0x98, 0x57, 0x00, 0x02, 0x03, 0x00, 0x77, 0x2C, 0x98, 0x03, 0x01, 0x02,
|
||||||
0x18, 0x02, 0x00, 0x06, 0x03, 0x46, 0x04, 0x01, 0x47, 0x04, 0x80, 0x68,
|
0x01, 0x01, 0x0F, 0x17, 0x02, 0x01, 0x01, 0x04, 0x11, 0x01, 0x0F, 0x17,
|
||||||
0x01, 0x01, 0x38, 0x0E, 0x06, 0x10, 0x25, 0x01, 0x01, 0x01, 0x10, 0x02,
|
0x02, 0x01, 0x01, 0x08, 0x11, 0x01, 0x0F, 0x17, 0x01, 0x00, 0x38, 0x0E,
|
||||||
0x00, 0x06, 0x03, 0x46, 0x04, 0x01, 0x47, 0x04, 0x80, 0x52, 0x01, 0x02,
|
0x06, 0x10, 0x25, 0x01, 0x00, 0x01, 0x18, 0x02, 0x00, 0x06, 0x03, 0x47,
|
||||||
0x38, 0x0E, 0x06, 0x0F, 0x25, 0x01, 0x01, 0x01, 0x20, 0x02, 0x00, 0x06,
|
0x04, 0x01, 0x48, 0x04, 0x80, 0x68, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x10,
|
||||||
0x03, 0x46, 0x04, 0x01, 0x47, 0x04, 0x3D, 0x01, 0x03, 0x38, 0x0E, 0x06,
|
0x25, 0x01, 0x01, 0x01, 0x10, 0x02, 0x00, 0x06, 0x03, 0x47, 0x04, 0x01,
|
||||||
0x0E, 0x25, 0x25, 0x01, 0x10, 0x02, 0x00, 0x06, 0x03, 0x44, 0x04, 0x01,
|
0x48, 0x04, 0x80, 0x52, 0x01, 0x02, 0x38, 0x0E, 0x06, 0x0F, 0x25, 0x01,
|
||||||
0x45, 0x04, 0x29, 0x01, 0x04, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x25, 0x01,
|
0x01, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03, 0x47, 0x04, 0x01, 0x48, 0x04,
|
||||||
0x20, 0x02, 0x00, 0x06, 0x03, 0x44, 0x04, 0x01, 0x45, 0x04, 0x15, 0x01,
|
0x3D, 0x01, 0x03, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x25, 0x01, 0x10, 0x02,
|
||||||
0x05, 0x38, 0x0E, 0x06, 0x0C, 0x25, 0x25, 0x02, 0x00, 0x06, 0x03, 0x48,
|
0x00, 0x06, 0x03, 0x45, 0x04, 0x01, 0x46, 0x04, 0x29, 0x01, 0x04, 0x38,
|
||||||
0x04, 0x01, 0x49, 0x04, 0x03, 0x65, 0x28, 0x25, 0x00, 0x00, 0x97, 0x01,
|
0x0E, 0x06, 0x0E, 0x25, 0x25, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03, 0x45,
|
||||||
0x0C, 0x11, 0x01, 0x02, 0x0F, 0x00, 0x00, 0x97, 0x01, 0x0C, 0x11, 0x26,
|
0x04, 0x01, 0x46, 0x04, 0x15, 0x01, 0x05, 0x38, 0x0E, 0x06, 0x0C, 0x25,
|
||||||
0x58, 0x43, 0x01, 0x03, 0x0A, 0x17, 0x00, 0x00, 0x97, 0x01, 0x0C, 0x11,
|
0x25, 0x02, 0x00, 0x06, 0x03, 0x49, 0x04, 0x01, 0x4A, 0x04, 0x03, 0x66,
|
||||||
0x01, 0x01, 0x0E, 0x00, 0x00, 0x97, 0x01, 0x0C, 0x11, 0x57, 0x00, 0x00,
|
0x28, 0x25, 0x00, 0x00, 0x98, 0x01, 0x0C, 0x11, 0x01, 0x02, 0x0F, 0x00,
|
||||||
0x1B, 0x01, 0x00, 0x72, 0x2E, 0x26, 0x06, 0x1F, 0x01, 0x01, 0x38, 0x0E,
|
0x00, 0x98, 0x01, 0x0C, 0x11, 0x26, 0x59, 0x44, 0x01, 0x03, 0x0A, 0x17,
|
||||||
0x06, 0x06, 0x25, 0x01, 0x00, 0x9B, 0x04, 0x11, 0x01, 0x02, 0x38, 0x0E,
|
0x00, 0x00, 0x98, 0x01, 0x0C, 0x11, 0x01, 0x01, 0x0E, 0x00, 0x00, 0x98,
|
||||||
0x06, 0x0A, 0x25, 0x74, 0x2E, 0x06, 0x03, 0x01, 0x10, 0x37, 0x04, 0x01,
|
0x01, 0x0C, 0x11, 0x58, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x73, 0x2E, 0x26,
|
||||||
0x25, 0x04, 0x01, 0x25, 0x78, 0x2E, 0x05, 0x33, 0x2F, 0x06, 0x30, 0x83,
|
0x06, 0x1F, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01, 0x00, 0x9C,
|
||||||
0x2E, 0x01, 0x14, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01, 0x02, 0x37, 0x04,
|
0x04, 0x11, 0x01, 0x02, 0x38, 0x0E, 0x06, 0x0A, 0x25, 0x75, 0x2E, 0x06,
|
||||||
0x22, 0x01, 0x15, 0x38, 0x0E, 0x06, 0x09, 0x25, 0xAA, 0x06, 0x03, 0x01,
|
0x03, 0x01, 0x10, 0x37, 0x04, 0x01, 0x25, 0x04, 0x01, 0x25, 0x79, 0x2E,
|
||||||
0x7F, 0x9B, 0x04, 0x13, 0x01, 0x16, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01,
|
0x05, 0x33, 0x2F, 0x06, 0x30, 0x84, 0x2E, 0x01, 0x14, 0x38, 0x0E, 0x06,
|
||||||
0x01, 0x37, 0x04, 0x07, 0x25, 0x01, 0x04, 0x37, 0x01, 0x00, 0x25, 0x1A,
|
0x06, 0x25, 0x01, 0x02, 0x37, 0x04, 0x22, 0x01, 0x15, 0x38, 0x0E, 0x06,
|
||||||
0x06, 0x03, 0x01, 0x08, 0x37, 0x00, 0x00, 0x1B, 0x26, 0x05, 0x0F, 0x2F,
|
0x09, 0x25, 0xAB, 0x06, 0x03, 0x01, 0x7F, 0x9C, 0x04, 0x13, 0x01, 0x16,
|
||||||
0x06, 0x0C, 0x83, 0x2E, 0x01, 0x15, 0x0E, 0x06, 0x04, 0x25, 0xAA, 0x04,
|
0x38, 0x0E, 0x06, 0x06, 0x25, 0x01, 0x01, 0x37, 0x04, 0x07, 0x25, 0x01,
|
||||||
0x01, 0x20, 0x00, 0x00, 0xCA, 0x01, 0x07, 0x17, 0x01, 0x01, 0x0F, 0x06,
|
0x04, 0x37, 0x01, 0x00, 0x25, 0x1A, 0x06, 0x03, 0x01, 0x08, 0x37, 0x00,
|
||||||
0x02, 0x6F, 0x28, 0x00, 0x01, 0x03, 0x00, 0x29, 0x1A, 0x06, 0x05, 0x02,
|
0x00, 0x1B, 0x26, 0x05, 0x0F, 0x2F, 0x06, 0x0C, 0x84, 0x2E, 0x01, 0x15,
|
||||||
0x00, 0x84, 0x3D, 0x00, 0xCA, 0x25, 0x04, 0x74, 0x00, 0x01, 0x14, 0xCD,
|
0x0E, 0x06, 0x04, 0x25, 0xAB, 0x04, 0x01, 0x20, 0x00, 0x00, 0xCB, 0x01,
|
||||||
0x01, 0x01, 0xDA, 0x29, 0x26, 0x01, 0x00, 0xC5, 0x01, 0x16, 0xCD, 0xD3,
|
0x07, 0x17, 0x01, 0x01, 0x0F, 0x06, 0x02, 0x70, 0x28, 0x00, 0x01, 0x03,
|
||||||
0x29, 0x00, 0x00, 0x01, 0x0B, 0xDA, 0x4B, 0x26, 0x26, 0x01, 0x03, 0x08,
|
0x00, 0x29, 0x1A, 0x06, 0x05, 0x02, 0x00, 0x85, 0x3E, 0x00, 0xCB, 0x25,
|
||||||
0xD9, 0xD9, 0x18, 0x26, 0x55, 0x06, 0x02, 0x25, 0x00, 0xD9, 0x1D, 0x26,
|
0x04, 0x74, 0x00, 0x01, 0x14, 0xCE, 0x01, 0x01, 0xDB, 0x29, 0x26, 0x01,
|
||||||
0x06, 0x05, 0x81, 0x43, 0xD4, 0x04, 0x77, 0x25, 0x04, 0x6C, 0x00, 0x21,
|
0x00, 0xC6, 0x01, 0x16, 0xCE, 0xD4, 0x29, 0x00, 0x00, 0x01, 0x0B, 0xDB,
|
||||||
0x01, 0x0F, 0xDA, 0x26, 0x8F, 0x2C, 0x01, 0x86, 0x03, 0x10, 0x06, 0x0C,
|
0x4C, 0x26, 0x26, 0x01, 0x03, 0x08, 0xDA, 0xDA, 0x18, 0x26, 0x56, 0x06,
|
||||||
0x01, 0x04, 0x08, 0xD9, 0x7D, 0x2E, 0xDA, 0x75, 0x2E, 0xDA, 0x04, 0x02,
|
0x02, 0x25, 0x00, 0xDA, 0x1D, 0x26, 0x06, 0x05, 0x82, 0x44, 0xD5, 0x04,
|
||||||
0x5B, 0xD9, 0x26, 0xD8, 0x81, 0x43, 0xD4, 0x00, 0x02, 0xA1, 0xA3, 0x08,
|
0x77, 0x25, 0x04, 0x6C, 0x00, 0x21, 0x01, 0x0F, 0xDB, 0x26, 0x90, 0x2C,
|
||||||
0x9F, 0x08, 0xA2, 0x08, 0xA4, 0x08, 0xA0, 0x08, 0x27, 0x08, 0x03, 0x00,
|
0x01, 0x86, 0x03, 0x10, 0x06, 0x0C, 0x01, 0x04, 0x08, 0xDA, 0x7E, 0x2E,
|
||||||
0x01, 0x01, 0xDA, 0x01, 0x27, 0x8B, 0x2E, 0x08, 0x8E, 0x2E, 0x01, 0x01,
|
0xDB, 0x76, 0x2E, 0xDB, 0x04, 0x02, 0x5C, 0xDA, 0x26, 0xD9, 0x82, 0x44,
|
||||||
0x0B, 0x08, 0x02, 0x00, 0x06, 0x04, 0x5B, 0x02, 0x00, 0x08, 0x80, 0x2C,
|
0xD5, 0x00, 0x02, 0xA2, 0xA4, 0x08, 0xA0, 0x08, 0xA3, 0x08, 0xA5, 0x08,
|
||||||
0x38, 0x09, 0x26, 0x58, 0x06, 0x24, 0x02, 0x00, 0x05, 0x04, 0x43, 0x5B,
|
0xA1, 0x08, 0x27, 0x08, 0x03, 0x00, 0x01, 0x01, 0xDB, 0x01, 0x27, 0x8C,
|
||||||
0x43, 0x5C, 0x01, 0x04, 0x09, 0x26, 0x55, 0x06, 0x03, 0x25, 0x01, 0x00,
|
0x2E, 0x08, 0x8F, 0x2E, 0x01, 0x01, 0x0B, 0x08, 0x02, 0x00, 0x06, 0x04,
|
||||||
0x26, 0x01, 0x04, 0x08, 0x02, 0x00, 0x08, 0x03, 0x00, 0x43, 0x01, 0x04,
|
0x5C, 0x02, 0x00, 0x08, 0x81, 0x2C, 0x38, 0x09, 0x26, 0x59, 0x06, 0x24,
|
||||||
0x08, 0x38, 0x08, 0x43, 0x04, 0x03, 0x25, 0x01, 0x7F, 0x03, 0x01, 0xD9,
|
0x02, 0x00, 0x05, 0x04, 0x44, 0x5C, 0x44, 0x5D, 0x01, 0x04, 0x09, 0x26,
|
||||||
0x91, 0x2C, 0xD8, 0x77, 0x01, 0x04, 0x19, 0x77, 0x01, 0x04, 0x08, 0x01,
|
0x56, 0x06, 0x03, 0x25, 0x01, 0x00, 0x26, 0x01, 0x04, 0x08, 0x02, 0x00,
|
||||||
0x1C, 0x32, 0x77, 0x01, 0x20, 0xD4, 0x8A, 0x8B, 0x2E, 0xD6, 0x8E, 0x2E,
|
0x08, 0x03, 0x00, 0x44, 0x01, 0x04, 0x08, 0x38, 0x08, 0x44, 0x04, 0x03,
|
||||||
0x26, 0x01, 0x01, 0x0B, 0xD8, 0x8D, 0x43, 0x26, 0x06, 0x0F, 0x5A, 0x38,
|
0x25, 0x01, 0x7F, 0x03, 0x01, 0xDA, 0x92, 0x2C, 0xD9, 0x78, 0x01, 0x04,
|
||||||
0x2C, 0x26, 0xC4, 0x05, 0x02, 0x5F, 0x28, 0xD8, 0x43, 0x5B, 0x43, 0x04,
|
0x19, 0x78, 0x01, 0x04, 0x08, 0x01, 0x1C, 0x32, 0x78, 0x01, 0x20, 0xD5,
|
||||||
0x6E, 0x5D, 0x01, 0x01, 0xDA, 0x01, 0x00, 0xDA, 0x02, 0x00, 0x06, 0x81,
|
0x8B, 0x8C, 0x2E, 0xD7, 0x8F, 0x2E, 0x26, 0x01, 0x01, 0x0B, 0xD9, 0x8E,
|
||||||
0x46, 0x02, 0x00, 0xD8, 0xA1, 0x06, 0x0E, 0x01, 0x83, 0xFE, 0x01, 0xD8,
|
0x44, 0x26, 0x06, 0x0F, 0x5B, 0x38, 0x2C, 0x26, 0xC5, 0x05, 0x02, 0x60,
|
||||||
0x86, 0xA1, 0x01, 0x04, 0x09, 0x26, 0xD8, 0x5A, 0xD6, 0xA3, 0x06, 0x16,
|
0x28, 0xD9, 0x44, 0x5C, 0x44, 0x04, 0x6E, 0x5E, 0x01, 0x01, 0xDB, 0x01,
|
||||||
0x01, 0x00, 0xD8, 0x88, 0xA3, 0x01, 0x04, 0x09, 0x26, 0xD8, 0x01, 0x02,
|
0x00, 0xDB, 0x02, 0x00, 0x06, 0x81, 0x46, 0x02, 0x00, 0xD9, 0xA2, 0x06,
|
||||||
0x09, 0x26, 0xD8, 0x01, 0x00, 0xDA, 0x01, 0x03, 0x09, 0xD5, 0x9F, 0x06,
|
0x0E, 0x01, 0x83, 0xFE, 0x01, 0xD9, 0x87, 0xA2, 0x01, 0x04, 0x09, 0x26,
|
||||||
0x0C, 0x01, 0x01, 0xD8, 0x01, 0x01, 0xD8, 0x7F, 0x2E, 0x01, 0x08, 0x09,
|
0xD9, 0x5B, 0xD7, 0xA4, 0x06, 0x16, 0x01, 0x00, 0xD9, 0x89, 0xA4, 0x01,
|
||||||
0xDA, 0xA2, 0x06, 0x19, 0x01, 0x0D, 0xD8, 0xA2, 0x01, 0x04, 0x09, 0x26,
|
0x04, 0x09, 0x26, 0xD9, 0x01, 0x02, 0x09, 0x26, 0xD9, 0x01, 0x00, 0xDB,
|
||||||
0xD8, 0x01, 0x02, 0x09, 0xD8, 0x41, 0x06, 0x03, 0x01, 0x03, 0xD7, 0x42,
|
0x01, 0x03, 0x09, 0xD6, 0xA0, 0x06, 0x0C, 0x01, 0x01, 0xD9, 0x01, 0x01,
|
||||||
0x06, 0x03, 0x01, 0x01, 0xD7, 0xA4, 0x26, 0x06, 0x22, 0x01, 0x0A, 0xD8,
|
0xD9, 0x80, 0x2E, 0x01, 0x08, 0x09, 0xDB, 0xA3, 0x06, 0x19, 0x01, 0x0D,
|
||||||
0x01, 0x04, 0x09, 0x26, 0xD8, 0x5C, 0xD8, 0x3F, 0x01, 0x00, 0x26, 0x01,
|
0xD9, 0xA3, 0x01, 0x04, 0x09, 0x26, 0xD9, 0x01, 0x02, 0x09, 0xD9, 0x42,
|
||||||
0x20, 0x0A, 0x06, 0x0C, 0x9D, 0x11, 0x01, 0x01, 0x17, 0x06, 0x02, 0x26,
|
0x06, 0x03, 0x01, 0x03, 0xD8, 0x43, 0x06, 0x03, 0x01, 0x01, 0xD8, 0xA5,
|
||||||
0xD8, 0x59, 0x04, 0x6E, 0x5D, 0x04, 0x01, 0x25, 0xA0, 0x06, 0x0A, 0x01,
|
0x26, 0x06, 0x22, 0x01, 0x0A, 0xD9, 0x01, 0x04, 0x09, 0x26, 0xD9, 0x5D,
|
||||||
0x0B, 0xD8, 0x01, 0x02, 0xD8, 0x01, 0x82, 0x00, 0xD8, 0x27, 0x26, 0x06,
|
0xD9, 0x40, 0x01, 0x00, 0x26, 0x01, 0x20, 0x0A, 0x06, 0x0C, 0x9E, 0x11,
|
||||||
0x1F, 0x01, 0x10, 0xD8, 0x01, 0x04, 0x09, 0x26, 0xD8, 0x5C, 0xD8, 0x82,
|
0x01, 0x01, 0x17, 0x06, 0x02, 0x26, 0xD9, 0x5A, 0x04, 0x6E, 0x5E, 0x04,
|
||||||
0x2C, 0x01, 0x00, 0x9D, 0x0F, 0x06, 0x0A, 0x26, 0x1E, 0x26, 0xDA, 0x81,
|
0x01, 0x25, 0xA1, 0x06, 0x0A, 0x01, 0x0B, 0xD9, 0x01, 0x02, 0xD9, 0x01,
|
||||||
0x43, 0xD4, 0x59, 0x04, 0x72, 0x5D, 0x04, 0x01, 0x25, 0x02, 0x01, 0x55,
|
0x82, 0x00, 0xD9, 0x27, 0x26, 0x06, 0x1F, 0x01, 0x10, 0xD9, 0x01, 0x04,
|
||||||
0x05, 0x11, 0x01, 0x15, 0xD8, 0x02, 0x01, 0x26, 0xD8, 0x26, 0x06, 0x06,
|
0x09, 0x26, 0xD9, 0x5D, 0xD9, 0x83, 0x2C, 0x01, 0x00, 0x9E, 0x0F, 0x06,
|
||||||
0x5A, 0x01, 0x00, 0xDA, 0x04, 0x77, 0x25, 0x00, 0x00, 0x01, 0x10, 0xDA,
|
0x0A, 0x26, 0x1E, 0x26, 0xDB, 0x82, 0x44, 0xD5, 0x5A, 0x04, 0x72, 0x5E,
|
||||||
0x76, 0x2C, 0x26, 0xC9, 0x06, 0x0C, 0xA8, 0x23, 0x26, 0x5B, 0xD9, 0x26,
|
0x04, 0x01, 0x25, 0x02, 0x01, 0x56, 0x05, 0x11, 0x01, 0x15, 0xD9, 0x02,
|
||||||
0xD8, 0x81, 0x43, 0xD4, 0x04, 0x0D, 0x26, 0xC7, 0x43, 0xA8, 0x22, 0x26,
|
0x01, 0x26, 0xD9, 0x26, 0x06, 0x06, 0x5B, 0x01, 0x00, 0xDB, 0x04, 0x77,
|
||||||
0x59, 0xD9, 0x26, 0xDA, 0x81, 0x43, 0xD4, 0x00, 0x00, 0x99, 0x01, 0x14,
|
0x25, 0x00, 0x00, 0x01, 0x10, 0xDB, 0x77, 0x2C, 0x26, 0xCA, 0x06, 0x0C,
|
||||||
0xDA, 0x01, 0x0C, 0xD9, 0x81, 0x01, 0x0C, 0xD4, 0x00, 0x00, 0x4E, 0x26,
|
0xA9, 0x23, 0x26, 0x5C, 0xDA, 0x26, 0xD9, 0x82, 0x44, 0xD5, 0x04, 0x0D,
|
||||||
0x01, 0x00, 0x0E, 0x06, 0x02, 0x5D, 0x00, 0xCA, 0x25, 0x04, 0x73, 0x00,
|
0x26, 0xC8, 0x44, 0xA9, 0x22, 0x26, 0x5A, 0xDA, 0x26, 0xDB, 0x82, 0x44,
|
||||||
0x26, 0xD8, 0xD4, 0x00, 0x00, 0x26, 0xDA, 0xD4, 0x00, 0x01, 0x03, 0x00,
|
0xD5, 0x00, 0x00, 0x9A, 0x01, 0x14, 0xDB, 0x01, 0x0C, 0xDA, 0x82, 0x01,
|
||||||
0x40, 0x25, 0x26, 0x01, 0x10, 0x17, 0x06, 0x06, 0x01, 0x04, 0xDA, 0x02,
|
0x0C, 0xD5, 0x00, 0x00, 0x4F, 0x26, 0x01, 0x00, 0x0E, 0x06, 0x02, 0x5E,
|
||||||
0x00, 0xDA, 0x26, 0x01, 0x08, 0x17, 0x06, 0x06, 0x01, 0x03, 0xDA, 0x02,
|
0x00, 0xCB, 0x25, 0x04, 0x73, 0x00, 0x26, 0xD9, 0xD5, 0x00, 0x00, 0x26,
|
||||||
0x00, 0xDA, 0x26, 0x01, 0x20, 0x17, 0x06, 0x06, 0x01, 0x05, 0xDA, 0x02,
|
0xDB, 0xD5, 0x00, 0x01, 0x03, 0x00, 0x41, 0x25, 0x26, 0x01, 0x10, 0x17,
|
||||||
0x00, 0xDA, 0x26, 0x01, 0x80, 0x40, 0x17, 0x06, 0x06, 0x01, 0x06, 0xDA,
|
0x06, 0x06, 0x01, 0x04, 0xDB, 0x02, 0x00, 0xDB, 0x26, 0x01, 0x08, 0x17,
|
||||||
0x02, 0x00, 0xDA, 0x01, 0x04, 0x17, 0x06, 0x06, 0x01, 0x02, 0xDA, 0x02,
|
0x06, 0x06, 0x01, 0x03, 0xDB, 0x02, 0x00, 0xDB, 0x26, 0x01, 0x20, 0x17,
|
||||||
0x00, 0xDA, 0x00, 0x00, 0x26, 0x01, 0x08, 0x4C, 0xDA, 0xDA, 0x00, 0x00,
|
0x06, 0x06, 0x01, 0x05, 0xDB, 0x02, 0x00, 0xDB, 0x26, 0x01, 0x80, 0x40,
|
||||||
0x26, 0x01, 0x10, 0x4C, 0xDA, 0xD8, 0x00, 0x00, 0x26, 0x4F, 0x06, 0x02,
|
0x17, 0x06, 0x06, 0x01, 0x06, 0xDB, 0x02, 0x00, 0xDB, 0x01, 0x04, 0x17,
|
||||||
0x25, 0x00, 0xCA, 0x25, 0x04, 0x76
|
0x06, 0x06, 0x01, 0x02, 0xDB, 0x02, 0x00, 0xDB, 0x00, 0x00, 0x26, 0x01,
|
||||||
|
0x08, 0x4D, 0xDB, 0xDB, 0x00, 0x00, 0x26, 0x01, 0x10, 0x4D, 0xDB, 0xD9,
|
||||||
|
0x00, 0x00, 0x26, 0x50, 0x06, 0x02, 0x25, 0x00, 0xCB, 0x25, 0x04, 0x76
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint16_t t0_caddr[] = {
|
static const uint16_t t0_caddr[] = {
|
||||||
|
|
@ -827,58 +829,58 @@ static const uint16_t t0_caddr[] = {
|
||||||
803,
|
803,
|
||||||
817,
|
817,
|
||||||
823,
|
823,
|
||||||
883,
|
882,
|
||||||
902,
|
901,
|
||||||
937,
|
936,
|
||||||
986,
|
985,
|
||||||
1062,
|
1061,
|
||||||
1089,
|
1088,
|
||||||
1120,
|
1119,
|
||||||
1131,
|
1130,
|
||||||
1456,
|
1455,
|
||||||
1603,
|
1602,
|
||||||
1627,
|
1626,
|
||||||
1843,
|
1842,
|
||||||
1857,
|
1856,
|
||||||
1866,
|
1865,
|
||||||
1870,
|
1869,
|
||||||
1934,
|
1964,
|
||||||
1955,
|
1985,
|
||||||
2011,
|
2041,
|
||||||
2018,
|
2048,
|
||||||
2029,
|
2059,
|
||||||
2045,
|
2075,
|
||||||
2051,
|
2081,
|
||||||
2062,
|
2092,
|
||||||
2097,
|
2127,
|
||||||
2109,
|
2139,
|
||||||
2115,
|
2145,
|
||||||
2130,
|
2160,
|
||||||
2146,
|
2176,
|
||||||
2302,
|
2332,
|
||||||
2311,
|
2341,
|
||||||
2324,
|
2354,
|
||||||
2333,
|
2363,
|
||||||
2340,
|
2370,
|
||||||
2443,
|
2473,
|
||||||
2464,
|
2494,
|
||||||
2477,
|
2507,
|
||||||
2493,
|
2523,
|
||||||
2511,
|
2541,
|
||||||
2543,
|
2573,
|
||||||
2577,
|
2607,
|
||||||
2925,
|
2955,
|
||||||
2961,
|
2991,
|
||||||
2974,
|
3004,
|
||||||
2988,
|
3018,
|
||||||
2993,
|
3023,
|
||||||
2998,
|
3028,
|
||||||
3064,
|
3094,
|
||||||
3072,
|
3102,
|
||||||
3080
|
3110
|
||||||
};
|
};
|
||||||
|
|
||||||
#define T0_INTERPRETED 85
|
#define T0_INTERPRETED 86
|
||||||
|
|
||||||
#define T0_ENTER(ip, rp, slot) do { \
|
#define T0_ENTER(ip, rp, slot) do { \
|
||||||
const unsigned char *t0_newip; \
|
const unsigned char *t0_newip; \
|
||||||
|
|
@ -899,7 +901,7 @@ name(void *ctx) \
|
||||||
T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
|
T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
|
||||||
}
|
}
|
||||||
|
|
||||||
T0_DEFENTRY(br_ssl_hs_client_init_main, 166)
|
T0_DEFENTRY(br_ssl_hs_client_init_main, 167)
|
||||||
|
|
||||||
#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
|
#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
|
||||||
|
|
||||||
|
|
@ -1572,6 +1574,14 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 61: {
|
case 61: {
|
||||||
|
/* set32 */
|
||||||
|
|
||||||
|
size_t addr = (size_t)T0_POP();
|
||||||
|
*(uint32_t *)((unsigned char *)ENG + addr) = (uint32_t)T0_POP();
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 62: {
|
||||||
/* set8 */
|
/* set8 */
|
||||||
|
|
||||||
size_t addr = (size_t)T0_POP();
|
size_t addr = (size_t)T0_POP();
|
||||||
|
|
@ -1579,7 +1589,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 62: {
|
case 63: {
|
||||||
/* strlen */
|
/* strlen */
|
||||||
|
|
||||||
void *str = (unsigned char *)ENG + (size_t)T0_POP();
|
void *str = (unsigned char *)ENG + (size_t)T0_POP();
|
||||||
|
|
@ -1587,7 +1597,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 63: {
|
case 64: {
|
||||||
/* supported-curves */
|
/* supported-curves */
|
||||||
|
|
||||||
uint32_t x = ENG->iec == NULL ? 0 : ENG->iec->supported_curves;
|
uint32_t x = ENG->iec == NULL ? 0 : ENG->iec->supported_curves;
|
||||||
|
|
@ -1595,7 +1605,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 64: {
|
case 65: {
|
||||||
/* supported-hash-functions */
|
/* supported-hash-functions */
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
@ -1614,26 +1624,26 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 65: {
|
case 66: {
|
||||||
/* supports-ecdsa? */
|
/* supports-ecdsa? */
|
||||||
|
|
||||||
T0_PUSHi(-(ENG->iecdsa != 0));
|
T0_PUSHi(-(ENG->iecdsa != 0));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 66: {
|
case 67: {
|
||||||
/* supports-rsa-sign? */
|
/* supports-rsa-sign? */
|
||||||
|
|
||||||
T0_PUSHi(-(ENG->irsavrfy != 0));
|
T0_PUSHi(-(ENG->irsavrfy != 0));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 67: {
|
case 68: {
|
||||||
/* swap */
|
/* swap */
|
||||||
T0_SWAP();
|
T0_SWAP();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 68: {
|
case 69: {
|
||||||
/* switch-aesgcm-in */
|
/* switch-aesgcm-in */
|
||||||
|
|
||||||
int is_client, prf_id;
|
int is_client, prf_id;
|
||||||
|
|
@ -1647,7 +1657,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 69: {
|
case 70: {
|
||||||
/* switch-aesgcm-out */
|
/* switch-aesgcm-out */
|
||||||
|
|
||||||
int is_client, prf_id;
|
int is_client, prf_id;
|
||||||
|
|
@ -1661,7 +1671,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 70: {
|
case 71: {
|
||||||
/* switch-cbc-in */
|
/* switch-cbc-in */
|
||||||
|
|
||||||
int is_client, prf_id, mac_id, aes;
|
int is_client, prf_id, mac_id, aes;
|
||||||
|
|
@ -1677,7 +1687,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 71: {
|
case 72: {
|
||||||
/* switch-cbc-out */
|
/* switch-cbc-out */
|
||||||
|
|
||||||
int is_client, prf_id, mac_id, aes;
|
int is_client, prf_id, mac_id, aes;
|
||||||
|
|
@ -1693,7 +1703,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 72: {
|
case 73: {
|
||||||
/* switch-chapol-in */
|
/* switch-chapol-in */
|
||||||
|
|
||||||
int is_client, prf_id;
|
int is_client, prf_id;
|
||||||
|
|
@ -1704,7 +1714,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 73: {
|
case 74: {
|
||||||
/* switch-chapol-out */
|
/* switch-chapol-out */
|
||||||
|
|
||||||
int is_client, prf_id;
|
int is_client, prf_id;
|
||||||
|
|
@ -1715,7 +1725,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 74: {
|
case 75: {
|
||||||
/* test-protocol-name */
|
/* test-protocol-name */
|
||||||
|
|
||||||
size_t len = T0_POP();
|
size_t len = T0_POP();
|
||||||
|
|
@ -1734,7 +1744,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 75: {
|
case 76: {
|
||||||
/* total-chain-length */
|
/* total-chain-length */
|
||||||
|
|
||||||
size_t u;
|
size_t u;
|
||||||
|
|
@ -1748,7 +1758,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 76: {
|
case 77: {
|
||||||
/* u>> */
|
/* u>> */
|
||||||
|
|
||||||
int c = (int)T0_POPi();
|
int c = (int)T0_POPi();
|
||||||
|
|
@ -1757,7 +1767,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 77: {
|
case 78: {
|
||||||
/* verify-SKE-sig */
|
/* verify-SKE-sig */
|
||||||
|
|
||||||
size_t sig_len = T0_POP();
|
size_t sig_len = T0_POP();
|
||||||
|
|
@ -1768,7 +1778,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 78: {
|
case 79: {
|
||||||
/* write-blob-chunk */
|
/* write-blob-chunk */
|
||||||
|
|
||||||
size_t clen = ENG->hlen_out;
|
size_t clen = ENG->hlen_out;
|
||||||
|
|
@ -1792,7 +1802,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 79: {
|
case 80: {
|
||||||
/* write8-native */
|
/* write8-native */
|
||||||
|
|
||||||
unsigned char x;
|
unsigned char x;
|
||||||
|
|
@ -1811,7 +1821,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 80: {
|
case 81: {
|
||||||
/* x509-append */
|
/* x509-append */
|
||||||
|
|
||||||
const br_x509_class *xc;
|
const br_x509_class *xc;
|
||||||
|
|
@ -1823,7 +1833,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 81: {
|
case 82: {
|
||||||
/* x509-end-cert */
|
/* x509-end-cert */
|
||||||
|
|
||||||
const br_x509_class *xc;
|
const br_x509_class *xc;
|
||||||
|
|
@ -1833,7 +1843,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 82: {
|
case 83: {
|
||||||
/* x509-end-chain */
|
/* x509-end-chain */
|
||||||
|
|
||||||
const br_x509_class *xc;
|
const br_x509_class *xc;
|
||||||
|
|
@ -1843,7 +1853,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 83: {
|
case 84: {
|
||||||
/* x509-start-cert */
|
/* x509-start-cert */
|
||||||
|
|
||||||
const br_x509_class *xc;
|
const br_x509_class *xc;
|
||||||
|
|
@ -1853,7 +1863,7 @@ br_ssl_hs_client_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 84: {
|
case 85: {
|
||||||
/* x509-start-chain */
|
/* x509-start-chain */
|
||||||
|
|
||||||
const br_x509_class *xc;
|
const br_x509_class *xc;
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ make_pms_ecdh(br_ssl_client_context *ctx, unsigned ecdhe, int prf_id)
|
||||||
{
|
{
|
||||||
int curve;
|
int curve;
|
||||||
unsigned char key[66], point[133];
|
unsigned char key[66], point[133];
|
||||||
const unsigned char *generator, *order, *point_src;
|
const unsigned char *order, *point_src;
|
||||||
size_t glen, olen, point_len;
|
size_t glen, olen, point_len;
|
||||||
unsigned char mask;
|
unsigned char mask;
|
||||||
|
|
||||||
|
|
@ -271,7 +271,7 @@ make_pms_ecdh(br_ssl_client_context *ctx, unsigned ecdhe, int prf_id)
|
||||||
* Compute the common ECDH point, whose X coordinate is the
|
* Compute the common ECDH point, whose X coordinate is the
|
||||||
* pre-master secret.
|
* pre-master secret.
|
||||||
*/
|
*/
|
||||||
generator = ctx->eng.iec->generator(curve, &glen);
|
ctx->eng.iec->generator(curve, &glen);
|
||||||
if (glen != point_len) {
|
if (glen != point_len) {
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
return -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
|
|
@ -1023,7 +1023,7 @@ cc: get-client-chain ( auth_types -- ) {
|
||||||
\ - There is an explicit list of supported sign+hash.
|
\ - There is an explicit list of supported sign+hash.
|
||||||
\ - The ECDH flags must be adjusted for RSA/ECDSA
|
\ - The ECDH flags must be adjusted for RSA/ECDSA
|
||||||
\ support.
|
\ support.
|
||||||
read-list-sign-algos dup addr-hashes set16
|
read-list-sign-algos dup addr-hashes set32
|
||||||
|
|
||||||
\ Trim down the list depending on what hash functions
|
\ Trim down the list depending on what hash functions
|
||||||
\ we support (since the hashing itself is done by the SSL
|
\ we support (since the hashing itself is done by the SSL
|
||||||
|
|
|
||||||
|
|
@ -469,7 +469,7 @@ cc: read-chunk-native ( addr len -- addr len ) {
|
||||||
\ no_renegotiation has value 100, and we treat it
|
\ no_renegotiation has value 100, and we treat it
|
||||||
\ as a fatal alert.
|
\ as a fatal alert.
|
||||||
dup 100 = if 256 + fail then
|
dup 100 = if 256 + fail then
|
||||||
0= ret
|
0=
|
||||||
endof
|
endof
|
||||||
\ Fatal alert implies context termination.
|
\ Fatal alert implies context termination.
|
||||||
drop 256 + fail
|
drop 256 + fail
|
||||||
|
|
@ -1062,13 +1062,22 @@ cc: compute-Finished-inner ( from_client prf_id -- ) {
|
||||||
read16 open-elt
|
read16 open-elt
|
||||||
begin dup while
|
begin dup while
|
||||||
read8 { hash } read8 { sign }
|
read8 { hash } read8 { sign }
|
||||||
\ We keep the value if the signature is either 1 (RSA)
|
|
||||||
\ or 3 (ECDSA), and the hash is one of the SHA-* functions
|
\ If hash is 0x08 then this is a "new algorithm" identifier,
|
||||||
\ (2 to 6, from SHA-1 to SHA-512); we reject MD5.
|
\ and we set the corresponding bit if it is in the 0..15
|
||||||
hash 2 >= hash 6 <= and
|
\ range. Otherwise, we keep the value only if the signature
|
||||||
sign 1 = sign 3 = or
|
\ is either 1 (RSA) or 3 (ECDSA), and the hash is one of the
|
||||||
and if
|
\ SHA-* functions (2 to 6). Note that we reject MD5.
|
||||||
hashes 1 sign 1- 2 << hash + << or >hashes
|
hash 8 = if
|
||||||
|
sign 15 <= if
|
||||||
|
1 sign 16 + << hashes or >hashes
|
||||||
|
then
|
||||||
|
else
|
||||||
|
hash 2 >= hash 6 <= and
|
||||||
|
sign 1 = sign 3 = or
|
||||||
|
and if
|
||||||
|
hashes 1 sign 1- 2 << hash + << or >hashes
|
||||||
|
then
|
||||||
then
|
then
|
||||||
repeat
|
repeat
|
||||||
close-elt
|
close-elt
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,44 @@ do_static_ecdh(br_ssl_server_context *ctx, int prf_id)
|
||||||
do_ecdh(ctx, prf_id, cpoint, cpoint_len);
|
do_ecdh(ctx, prf_id, cpoint, cpoint_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
hash_data(br_ssl_server_context *ctx,
|
||||||
|
void *dst, int hash_id, const void *src, size_t len)
|
||||||
|
{
|
||||||
|
const br_hash_class *hf;
|
||||||
|
br_hash_compat_context hc;
|
||||||
|
|
||||||
|
if (hash_id == 0) {
|
||||||
|
unsigned char tmp[36];
|
||||||
|
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, br_md5_ID);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, tmp);
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, br_sha1_ID);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, tmp + 16);
|
||||||
|
memcpy(dst, tmp, 36);
|
||||||
|
return 36;
|
||||||
|
} else {
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, hash_id);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, dst);
|
||||||
|
return (hf->desc >> BR_HASHDESC_OUT_OFF) & BR_HASHDESC_OUT_MASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do the ECDHE key exchange (part 1: generation of transient key, and
|
* Do the ECDHE key exchange (part 1: generation of transient key, and
|
||||||
* computing of the point to send to the client). Returned value is the
|
* computing of the point to send to the client). Returned value is the
|
||||||
|
|
@ -234,12 +272,10 @@ do_static_ecdh(br_ssl_server_context *ctx, int prf_id)
|
||||||
static int
|
static int
|
||||||
do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
||||||
{
|
{
|
||||||
int hash;
|
unsigned algo_id;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
const unsigned char *order;
|
const unsigned char *order;
|
||||||
size_t olen, glen;
|
size_t olen, glen;
|
||||||
br_multihash_context mhc;
|
|
||||||
unsigned char head[4];
|
|
||||||
size_t hv_len, sig_len;
|
size_t hv_len, sig_len;
|
||||||
|
|
||||||
if (!((ctx->eng.iec->supported_curves >> curve) & 1)) {
|
if (!((ctx->eng.iec->supported_curves >> curve) & 1)) {
|
||||||
|
|
@ -268,55 +304,33 @@ do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
||||||
/*
|
/*
|
||||||
* Compute our ECDH point.
|
* Compute our ECDH point.
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
/* obsolete */
|
|
||||||
generator = ctx->eng.iec->generator(curve, &glen);
|
|
||||||
memcpy(ctx->eng.ecdhe_point, generator, glen);
|
|
||||||
ctx->eng.ecdhe_point_len = glen;
|
|
||||||
if (!ctx->eng.iec->mul(ctx->eng.ecdhe_point, glen,
|
|
||||||
ctx->ecdhe_key, olen, curve))
|
|
||||||
{
|
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
glen = ctx->eng.iec->mulgen(ctx->eng.ecdhe_point,
|
glen = ctx->eng.iec->mulgen(ctx->eng.ecdhe_point,
|
||||||
ctx->ecdhe_key, olen, curve);
|
ctx->ecdhe_key, olen, curve);
|
||||||
ctx->eng.ecdhe_point_len = glen;
|
ctx->eng.ecdhe_point_len = glen;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the signature.
|
* Assemble the message to be signed, and possibly hash it.
|
||||||
*/
|
*/
|
||||||
br_multihash_zero(&mhc);
|
memcpy(ctx->eng.pad, ctx->eng.client_random, 32);
|
||||||
br_multihash_copyimpl(&mhc, &ctx->eng.mhash);
|
memcpy(ctx->eng.pad + 32, ctx->eng.server_random, 32);
|
||||||
br_multihash_init(&mhc);
|
ctx->eng.pad[64 + 0] = 0x03;
|
||||||
br_multihash_update(&mhc,
|
ctx->eng.pad[64 + 1] = 0x00;
|
||||||
ctx->eng.client_random, sizeof ctx->eng.client_random);
|
ctx->eng.pad[64 + 2] = curve;
|
||||||
br_multihash_update(&mhc,
|
ctx->eng.pad[64 + 3] = ctx->eng.ecdhe_point_len;
|
||||||
ctx->eng.server_random, sizeof ctx->eng.server_random);
|
memcpy(ctx->eng.pad + 64 + 4,
|
||||||
head[0] = 3;
|
|
||||||
head[1] = 0;
|
|
||||||
head[2] = curve;
|
|
||||||
head[3] = ctx->eng.ecdhe_point_len;
|
|
||||||
br_multihash_update(&mhc, head, sizeof head);
|
|
||||||
br_multihash_update(&mhc,
|
|
||||||
ctx->eng.ecdhe_point, ctx->eng.ecdhe_point_len);
|
ctx->eng.ecdhe_point, ctx->eng.ecdhe_point_len);
|
||||||
hash = ctx->sign_hash_id;
|
hv_len = 64 + 4 + ctx->eng.ecdhe_point_len;
|
||||||
if (hash) {
|
algo_id = ctx->sign_hash_id;
|
||||||
hv_len = br_multihash_out(&mhc, hash, ctx->eng.pad);
|
if (algo_id >= (unsigned)0xFF00) {
|
||||||
|
hv_len = hash_data(ctx, ctx->eng.pad, algo_id & 0xFF,
|
||||||
|
ctx->eng.pad, hv_len);
|
||||||
if (hv_len == 0) {
|
if (hv_len == 0) {
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
return -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (!br_multihash_out(&mhc, br_md5_ID, ctx->eng.pad)
|
|
||||||
|| !br_multihash_out(&mhc,
|
|
||||||
br_sha1_ID, ctx->eng.pad + 16))
|
|
||||||
{
|
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
|
||||||
}
|
|
||||||
hv_len = 36;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sig_len = (*ctx->policy_vtable)->do_sign(ctx->policy_vtable,
|
sig_len = (*ctx->policy_vtable)->do_sign(ctx->policy_vtable,
|
||||||
hash, hv_len, ctx->eng.pad, sizeof ctx->eng.pad);
|
algo_id, ctx->eng.pad, hv_len, sizeof ctx->eng.pad);
|
||||||
return sig_len ? (int)sig_len : -BR_ERR_INVALID_ALGORITHM;
|
return sig_len ? (int)sig_len : -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -556,213 +570,217 @@ static const uint8_t t0_codeblock[] = {
|
||||||
0x2A, 0x03, 0x00, 0x09, 0x2A, 0x5B, 0x06, 0x02, 0x68, 0x2B, 0x02, 0x00,
|
0x2A, 0x03, 0x00, 0x09, 0x2A, 0x5B, 0x06, 0x02, 0x68, 0x2B, 0x02, 0x00,
|
||||||
0x00, 0x00, 0x9A, 0x01, 0x0F, 0x13, 0x00, 0x00, 0x74, 0x30, 0x01, 0x00,
|
0x00, 0x00, 0x9A, 0x01, 0x0F, 0x13, 0x00, 0x00, 0x74, 0x30, 0x01, 0x00,
|
||||||
0x3A, 0x0F, 0x06, 0x10, 0x29, 0x2A, 0x01, 0x01, 0x0E, 0x06, 0x03, 0x29,
|
0x3A, 0x0F, 0x06, 0x10, 0x29, 0x2A, 0x01, 0x01, 0x0E, 0x06, 0x03, 0x29,
|
||||||
0x01, 0x02, 0x74, 0x42, 0x01, 0x00, 0x04, 0x22, 0x01, 0x01, 0x3A, 0x0F,
|
0x01, 0x02, 0x74, 0x42, 0x01, 0x00, 0x04, 0x21, 0x01, 0x01, 0x3A, 0x0F,
|
||||||
0x06, 0x15, 0x29, 0x01, 0x00, 0x74, 0x42, 0x2A, 0x01, 0x80, 0x64, 0x0F,
|
0x06, 0x14, 0x29, 0x01, 0x00, 0x74, 0x42, 0x2A, 0x01, 0x80, 0x64, 0x0F,
|
||||||
0x06, 0x05, 0x01, 0x82, 0x00, 0x08, 0x2B, 0x5D, 0x00, 0x04, 0x07, 0x29,
|
0x06, 0x05, 0x01, 0x82, 0x00, 0x08, 0x2B, 0x5D, 0x04, 0x07, 0x29, 0x01,
|
||||||
0x01, 0x82, 0x00, 0x08, 0x2B, 0x29, 0x00, 0x00, 0x01, 0x00, 0x31, 0x06,
|
0x82, 0x00, 0x08, 0x2B, 0x29, 0x00, 0x00, 0x01, 0x00, 0x31, 0x06, 0x05,
|
||||||
0x05, 0x3D, 0xA6, 0x39, 0x04, 0x78, 0x2A, 0x06, 0x04, 0x01, 0x01, 0x8F,
|
0x3D, 0xA6, 0x39, 0x04, 0x78, 0x2A, 0x06, 0x04, 0x01, 0x01, 0x8F, 0x42,
|
||||||
0x42, 0x00, 0x00, 0x01, 0x1F, 0x13, 0x01, 0x12, 0x0F, 0x05, 0x02, 0x72,
|
0x00, 0x00, 0x01, 0x1F, 0x13, 0x01, 0x12, 0x0F, 0x05, 0x02, 0x72, 0x2B,
|
||||||
0x2B, 0x76, 0x2E, 0x2A, 0xC7, 0x05, 0x02, 0x71, 0x2B, 0xA5, 0x28, 0x00,
|
0x76, 0x2E, 0x2A, 0xC7, 0x05, 0x02, 0x71, 0x2B, 0xA5, 0x28, 0x00, 0x02,
|
||||||
0x02, 0x85, 0x2E, 0x05, 0x02, 0xB9, 0x00, 0xBD, 0xA4, 0xBD, 0xA4, 0x01,
|
0x85, 0x2E, 0x05, 0x02, 0xB9, 0x00, 0xBD, 0xA4, 0xBD, 0xA4, 0x01, 0x7E,
|
||||||
0x7E, 0x03, 0x00, 0x2A, 0x06, 0x17, 0xBF, 0x2A, 0x03, 0x01, 0x83, 0x47,
|
0x03, 0x00, 0x2A, 0x06, 0x17, 0xBF, 0x2A, 0x03, 0x01, 0x83, 0x47, 0xB3,
|
||||||
0xB3, 0x02, 0x01, 0x4F, 0x2A, 0x02, 0x00, 0x51, 0x06, 0x04, 0x03, 0x00,
|
0x02, 0x01, 0x4F, 0x2A, 0x02, 0x00, 0x51, 0x06, 0x04, 0x03, 0x00, 0x04,
|
||||||
0x04, 0x01, 0x29, 0x04, 0x66, 0x9B, 0x9B, 0x02, 0x00, 0x5F, 0x8A, 0x40,
|
0x01, 0x29, 0x04, 0x66, 0x9B, 0x9B, 0x02, 0x00, 0x5F, 0x8A, 0x40, 0x00,
|
||||||
0x00, 0x00, 0x31, 0x06, 0x0B, 0x86, 0x30, 0x01, 0x14, 0x0E, 0x06, 0x02,
|
0x00, 0x31, 0x06, 0x0B, 0x86, 0x30, 0x01, 0x14, 0x0E, 0x06, 0x02, 0x71,
|
||||||
0x71, 0x2B, 0x04, 0x11, 0xCB, 0x01, 0x07, 0x13, 0x2A, 0x01, 0x02, 0x0E,
|
0x2B, 0x04, 0x11, 0xCB, 0x01, 0x07, 0x13, 0x2A, 0x01, 0x02, 0x0E, 0x06,
|
||||||
0x06, 0x06, 0x06, 0x02, 0x71, 0x2B, 0x04, 0x70, 0x29, 0xC0, 0x01, 0x01,
|
0x06, 0x06, 0x02, 0x71, 0x2B, 0x04, 0x70, 0x29, 0xC0, 0x01, 0x01, 0x0E,
|
||||||
0x0E, 0x35, 0x39, 0x06, 0x02, 0x64, 0x2B, 0x2A, 0x01, 0x01, 0xC6, 0x38,
|
0x35, 0x39, 0x06, 0x02, 0x64, 0x2B, 0x2A, 0x01, 0x01, 0xC6, 0x38, 0xB2,
|
||||||
0xB2, 0x00, 0x01, 0xB7, 0x01, 0x0B, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0x2A,
|
0x00, 0x01, 0xB7, 0x01, 0x0B, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0x2A, 0x01,
|
||||||
0x01, 0x03, 0x0F, 0x06, 0x08, 0xBE, 0x06, 0x02, 0x68, 0x2B, 0x47, 0x29,
|
0x03, 0x0F, 0x06, 0x08, 0xBE, 0x06, 0x02, 0x68, 0x2B, 0x47, 0x29, 0x00,
|
||||||
0x00, 0x47, 0x5A, 0xBE, 0xA4, 0x2A, 0x06, 0x23, 0xBE, 0xA4, 0x2A, 0x59,
|
0x47, 0x5A, 0xBE, 0xA4, 0x2A, 0x06, 0x23, 0xBE, 0xA4, 0x2A, 0x59, 0x2A,
|
||||||
0x2A, 0x06, 0x18, 0x2A, 0x01, 0x82, 0x00, 0x10, 0x06, 0x05, 0x01, 0x82,
|
0x06, 0x18, 0x2A, 0x01, 0x82, 0x00, 0x10, 0x06, 0x05, 0x01, 0x82, 0x00,
|
||||||
0x00, 0x04, 0x01, 0x2A, 0x03, 0x00, 0x83, 0x02, 0x00, 0xB3, 0x02, 0x00,
|
0x04, 0x01, 0x2A, 0x03, 0x00, 0x83, 0x02, 0x00, 0xB3, 0x02, 0x00, 0x56,
|
||||||
0x56, 0x04, 0x65, 0x9B, 0x57, 0x04, 0x5A, 0x9B, 0x9B, 0x58, 0x2A, 0x06,
|
0x04, 0x65, 0x9B, 0x57, 0x04, 0x5A, 0x9B, 0x9B, 0x58, 0x2A, 0x06, 0x02,
|
||||||
0x02, 0x37, 0x00, 0x29, 0x2D, 0x00, 0x02, 0x2A, 0x01, 0x20, 0x13, 0x05,
|
0x37, 0x00, 0x29, 0x2D, 0x00, 0x02, 0x2A, 0x01, 0x20, 0x13, 0x05, 0x02,
|
||||||
0x02, 0x72, 0x2B, 0x01, 0x0F, 0x13, 0x03, 0x00, 0xAD, 0x93, 0x2E, 0x01,
|
0x72, 0x2B, 0x01, 0x0F, 0x13, 0x03, 0x00, 0xAD, 0x93, 0x2E, 0x01, 0x86,
|
||||||
0x86, 0x03, 0x11, 0x06, 0x23, 0xBD, 0x2A, 0x01, 0x81, 0x7F, 0x13, 0x5F,
|
0x03, 0x11, 0x06, 0x23, 0xBD, 0x2A, 0x01, 0x81, 0x7F, 0x13, 0x5F, 0x01,
|
||||||
0x01, 0x01, 0x12, 0x02, 0x00, 0x0F, 0x05, 0x02, 0x6A, 0x2B, 0x01, 0x08,
|
0x01, 0x12, 0x02, 0x00, 0x0F, 0x05, 0x02, 0x6A, 0x2B, 0x01, 0x08, 0x12,
|
||||||
0x12, 0x2A, 0x01, 0x02, 0x0B, 0x3A, 0x01, 0x06, 0x10, 0x39, 0x06, 0x02,
|
0x2A, 0x01, 0x02, 0x0B, 0x3A, 0x01, 0x06, 0x10, 0x39, 0x06, 0x02, 0x6C,
|
||||||
0x6C, 0x2B, 0x04, 0x0D, 0x02, 0x00, 0x01, 0x01, 0x0F, 0x06, 0x04, 0x01,
|
0x2B, 0x04, 0x0D, 0x02, 0x00, 0x01, 0x01, 0x0F, 0x06, 0x04, 0x01, 0x00,
|
||||||
0x00, 0x04, 0x02, 0x01, 0x02, 0x20, 0x05, 0x02, 0x6C, 0x2B, 0xBD, 0x2A,
|
0x04, 0x02, 0x01, 0x02, 0x20, 0x05, 0x02, 0x6C, 0x2B, 0xBD, 0x2A, 0x03,
|
||||||
0x03, 0x01, 0x2A, 0x01, 0x84, 0x00, 0x10, 0x06, 0x02, 0x6D, 0x2B, 0x83,
|
0x01, 0x2A, 0x01, 0x84, 0x00, 0x10, 0x06, 0x02, 0x6D, 0x2B, 0x83, 0x47,
|
||||||
0x47, 0xB3, 0x02, 0x01, 0x53, 0x2A, 0x06, 0x01, 0x2B, 0x29, 0x9B, 0x00,
|
0xB3, 0x02, 0x01, 0x53, 0x2A, 0x06, 0x01, 0x2B, 0x29, 0x9B, 0x00, 0x00,
|
||||||
0x00, 0x1D, 0xB7, 0x01, 0x0F, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0x00, 0x0A,
|
0x1D, 0xB7, 0x01, 0x0F, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0x00, 0x0A, 0xB7,
|
||||||
0xB7, 0x01, 0x01, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0xBD, 0x2A, 0x03, 0x00,
|
0x01, 0x01, 0x0F, 0x05, 0x02, 0x71, 0x2B, 0xBD, 0x2A, 0x03, 0x00, 0x77,
|
||||||
0x77, 0x40, 0x78, 0x01, 0x20, 0xB3, 0xBF, 0x2A, 0x01, 0x20, 0x10, 0x06,
|
0x40, 0x78, 0x01, 0x20, 0xB3, 0xBF, 0x2A, 0x01, 0x20, 0x10, 0x06, 0x02,
|
||||||
0x02, 0x70, 0x2B, 0x2A, 0x8E, 0x42, 0x8D, 0x47, 0xB3, 0x1A, 0x03, 0x01,
|
0x70, 0x2B, 0x2A, 0x8E, 0x42, 0x8D, 0x47, 0xB3, 0x1A, 0x03, 0x01, 0xBD,
|
||||||
0xBD, 0xA4, 0x01, 0x00, 0x03, 0x02, 0x01, 0x00, 0x03, 0x03, 0x81, 0xA0,
|
0xA4, 0x01, 0x00, 0x03, 0x02, 0x01, 0x00, 0x03, 0x03, 0x81, 0xA0, 0x17,
|
||||||
0x17, 0x3A, 0x08, 0x03, 0x04, 0x03, 0x05, 0x2A, 0x06, 0x80, 0x6D, 0xBD,
|
0x3A, 0x08, 0x03, 0x04, 0x03, 0x05, 0x2A, 0x06, 0x80, 0x6D, 0xBD, 0x2A,
|
||||||
0x2A, 0x03, 0x06, 0x02, 0x01, 0x06, 0x0A, 0x2A, 0x76, 0x2E, 0x0F, 0x06,
|
0x03, 0x06, 0x02, 0x01, 0x06, 0x0A, 0x2A, 0x76, 0x2E, 0x0F, 0x06, 0x04,
|
||||||
0x04, 0x01, 0x7F, 0x03, 0x03, 0x2A, 0x01, 0x81, 0x7F, 0x0F, 0x06, 0x0A,
|
0x01, 0x7F, 0x03, 0x03, 0x2A, 0x01, 0x81, 0x7F, 0x0F, 0x06, 0x0A, 0x88,
|
||||||
0x88, 0x30, 0x06, 0x02, 0x69, 0x2B, 0x01, 0x7F, 0x03, 0x02, 0x2A, 0x01,
|
0x30, 0x06, 0x02, 0x69, 0x2B, 0x01, 0x7F, 0x03, 0x02, 0x2A, 0x01, 0x81,
|
||||||
0x81, 0xAC, 0x00, 0x0F, 0x06, 0x11, 0x02, 0x00, 0x96, 0x2E, 0x11, 0x02,
|
0xAC, 0x00, 0x0F, 0x06, 0x11, 0x02, 0x00, 0x96, 0x2E, 0x11, 0x02, 0x00,
|
||||||
0x00, 0x95, 0x2E, 0x0B, 0x13, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00, 0xC1,
|
0x95, 0x2E, 0x0B, 0x13, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00, 0xC1, 0x2A,
|
||||||
0x2A, 0x5B, 0x06, 0x03, 0x29, 0x04, 0x26, 0x01, 0x00, 0xA2, 0x06, 0x0B,
|
0x5B, 0x06, 0x03, 0x29, 0x04, 0x26, 0x01, 0x00, 0xA2, 0x06, 0x0B, 0x01,
|
||||||
0x01, 0x02, 0x0C, 0x79, 0x08, 0x02, 0x06, 0x47, 0x40, 0x04, 0x16, 0x29,
|
0x02, 0x0C, 0x79, 0x08, 0x02, 0x06, 0x47, 0x40, 0x04, 0x16, 0x29, 0x02,
|
||||||
0x02, 0x05, 0x02, 0x04, 0x11, 0x06, 0x02, 0x67, 0x2B, 0x02, 0x06, 0x02,
|
0x05, 0x02, 0x04, 0x11, 0x06, 0x02, 0x67, 0x2B, 0x02, 0x06, 0x02, 0x05,
|
||||||
0x05, 0x40, 0x02, 0x05, 0x01, 0x04, 0x08, 0x03, 0x05, 0x04, 0xFF, 0x0F,
|
0x40, 0x02, 0x05, 0x01, 0x04, 0x08, 0x03, 0x05, 0x04, 0xFF, 0x0F, 0x29,
|
||||||
0x29, 0x01, 0x00, 0x03, 0x07, 0xBF, 0xA4, 0x2A, 0x06, 0x09, 0xBF, 0x05,
|
0x01, 0x00, 0x03, 0x07, 0xBF, 0xA4, 0x2A, 0x06, 0x09, 0xBF, 0x05, 0x04,
|
||||||
0x04, 0x01, 0x7F, 0x03, 0x07, 0x04, 0x74, 0x9B, 0x01, 0x00, 0x8B, 0x42,
|
0x01, 0x7F, 0x03, 0x07, 0x04, 0x74, 0x9B, 0x01, 0x00, 0x8B, 0x42, 0x01,
|
||||||
0x01, 0x88, 0x04, 0x80, 0x40, 0x01, 0x84, 0x80, 0x80, 0x00, 0x7C, 0x41,
|
0x88, 0x04, 0x80, 0x41, 0x01, 0x84, 0x80, 0x80, 0x00, 0x7C, 0x41, 0x2A,
|
||||||
0x2A, 0x06, 0x80, 0x4E, 0xBD, 0xA4, 0x2A, 0x06, 0x80, 0x47, 0xBD, 0x01,
|
0x06, 0x80, 0x4E, 0xBD, 0xA4, 0x2A, 0x06, 0x80, 0x47, 0xBD, 0x01, 0x00,
|
||||||
0x00, 0x3A, 0x0F, 0x06, 0x04, 0x29, 0xB6, 0x04, 0x39, 0x01, 0x01, 0x3A,
|
0x3A, 0x0F, 0x06, 0x04, 0x29, 0xB6, 0x04, 0x39, 0x01, 0x01, 0x3A, 0x0F,
|
||||||
0x0F, 0x06, 0x04, 0x29, 0xB4, 0x04, 0x2F, 0x01, 0x83, 0xFE, 0x01, 0x3A,
|
0x06, 0x04, 0x29, 0xB4, 0x04, 0x2F, 0x01, 0x83, 0xFE, 0x01, 0x3A, 0x0F,
|
||||||
0x0F, 0x06, 0x04, 0x29, 0xB5, 0x04, 0x23, 0x01, 0x0D, 0x3A, 0x0F, 0x06,
|
0x06, 0x04, 0x29, 0xB5, 0x04, 0x23, 0x01, 0x0D, 0x3A, 0x0F, 0x06, 0x04,
|
||||||
0x04, 0x29, 0xBB, 0x04, 0x19, 0x01, 0x0A, 0x3A, 0x0F, 0x06, 0x04, 0x29,
|
0x29, 0xBB, 0x04, 0x19, 0x01, 0x0A, 0x3A, 0x0F, 0x06, 0x04, 0x29, 0xBC,
|
||||||
0xBC, 0x04, 0x0F, 0x01, 0x10, 0x3A, 0x0F, 0x06, 0x04, 0x29, 0xA9, 0x04,
|
0x04, 0x0F, 0x01, 0x10, 0x3A, 0x0F, 0x06, 0x04, 0x29, 0xA9, 0x04, 0x05,
|
||||||
0x05, 0x29, 0xB9, 0x01, 0x00, 0x29, 0x04, 0xFF, 0x35, 0x9B, 0x9B, 0x02,
|
0x29, 0xB9, 0x01, 0x00, 0x29, 0x04, 0xFF, 0x35, 0x9B, 0x9B, 0x02, 0x01,
|
||||||
0x01, 0x02, 0x03, 0x13, 0x03, 0x01, 0x02, 0x00, 0x5B, 0x06, 0x08, 0x77,
|
0x02, 0x03, 0x13, 0x03, 0x01, 0x02, 0x00, 0x5B, 0x06, 0x08, 0x77, 0x2E,
|
||||||
0x2E, 0x97, 0x40, 0x01, 0x80, 0x56, 0xA1, 0x95, 0x2E, 0x2A, 0x02, 0x00,
|
0x97, 0x40, 0x01, 0x80, 0x56, 0xA1, 0x95, 0x2E, 0x2A, 0x02, 0x00, 0x10,
|
||||||
0x10, 0x06, 0x03, 0x29, 0x02, 0x00, 0x2A, 0x01, 0x86, 0x00, 0x0B, 0x06,
|
0x06, 0x03, 0x29, 0x02, 0x00, 0x2A, 0x01, 0x86, 0x00, 0x0B, 0x06, 0x02,
|
||||||
0x02, 0x6B, 0x2B, 0x02, 0x00, 0x96, 0x2E, 0x0B, 0x06, 0x04, 0x01, 0x80,
|
0x6B, 0x2B, 0x02, 0x00, 0x96, 0x2E, 0x0B, 0x06, 0x04, 0x01, 0x80, 0x46,
|
||||||
0x46, 0xA1, 0x02, 0x01, 0x06, 0x10, 0x93, 0x2E, 0x02, 0x00, 0x0D, 0x06,
|
0xA1, 0x02, 0x01, 0x06, 0x10, 0x93, 0x2E, 0x02, 0x00, 0x0D, 0x06, 0x05,
|
||||||
0x05, 0x29, 0x93, 0x2E, 0x04, 0x04, 0x01, 0x00, 0x03, 0x01, 0x2A, 0x93,
|
0x29, 0x93, 0x2E, 0x04, 0x04, 0x01, 0x00, 0x03, 0x01, 0x2A, 0x93, 0x40,
|
||||||
0x40, 0x2A, 0x94, 0x40, 0x2A, 0x97, 0x40, 0x01, 0x86, 0x03, 0x11, 0x03,
|
0x2A, 0x94, 0x40, 0x2A, 0x97, 0x40, 0x01, 0x86, 0x03, 0x11, 0x03, 0x08,
|
||||||
0x08, 0x02, 0x02, 0x06, 0x04, 0x01, 0x02, 0x88, 0x42, 0x02, 0x07, 0x05,
|
0x02, 0x02, 0x06, 0x04, 0x01, 0x02, 0x88, 0x42, 0x02, 0x07, 0x05, 0x03,
|
||||||
0x03, 0x01, 0x28, 0xA1, 0x44, 0x29, 0x01, 0x82, 0x01, 0x07, 0x80, 0x2E,
|
0x01, 0x28, 0xA1, 0x44, 0x29, 0x01, 0x82, 0x01, 0x07, 0x01, 0xFC, 0x80,
|
||||||
0x13, 0x2A, 0x80, 0x40, 0x2A, 0x01, 0x81, 0x7F, 0x13, 0x5C, 0x37, 0x47,
|
0x00, 0x39, 0x80, 0x2F, 0x13, 0x2A, 0x80, 0x41, 0x2A, 0x01, 0x81, 0x7F,
|
||||||
0x01, 0x08, 0x12, 0x5C, 0x01, 0x02, 0x13, 0x39, 0x01, 0x0C, 0x0C, 0x03,
|
0x13, 0x5C, 0x37, 0x47, 0x01, 0x08, 0x12, 0x5C, 0x01, 0x02, 0x13, 0x39,
|
||||||
0x09, 0x7C, 0x2F, 0x43, 0x13, 0x2A, 0x7C, 0x41, 0x05, 0x04, 0x01, 0x00,
|
0x01, 0x0C, 0x0C, 0x03, 0x09, 0x7C, 0x2F, 0x43, 0x13, 0x2A, 0x7C, 0x41,
|
||||||
0x03, 0x09, 0x02, 0x01, 0x06, 0x03, 0x01, 0x7F, 0x00, 0x8D, 0x01, 0x20,
|
0x05, 0x04, 0x01, 0x00, 0x03, 0x09, 0x02, 0x01, 0x06, 0x03, 0x01, 0x7F,
|
||||||
0x34, 0x01, 0x20, 0x8E, 0x42, 0x79, 0x2A, 0x03, 0x05, 0x2A, 0x02, 0x04,
|
0x00, 0x8D, 0x01, 0x20, 0x34, 0x01, 0x20, 0x8E, 0x42, 0x79, 0x2A, 0x03,
|
||||||
0x0B, 0x06, 0x80, 0x49, 0x2A, 0x2E, 0x2A, 0x9A, 0x2A, 0x01, 0x0C, 0x12,
|
0x05, 0x2A, 0x02, 0x04, 0x0B, 0x06, 0x80, 0x49, 0x2A, 0x2E, 0x2A, 0x9A,
|
||||||
0x2A, 0x01, 0x01, 0x0F, 0x47, 0x01, 0x02, 0x0F, 0x39, 0x06, 0x0A, 0x2A,
|
0x2A, 0x01, 0x0C, 0x12, 0x2A, 0x01, 0x01, 0x0F, 0x47, 0x01, 0x02, 0x0F,
|
||||||
0x02, 0x09, 0x13, 0x05, 0x04, 0x63, 0x01, 0x00, 0x2A, 0x02, 0x08, 0x05,
|
0x39, 0x06, 0x0A, 0x2A, 0x02, 0x09, 0x13, 0x05, 0x04, 0x63, 0x01, 0x00,
|
||||||
0x0E, 0x2A, 0x01, 0x81, 0x70, 0x13, 0x01, 0x20, 0x0E, 0x06, 0x04, 0x63,
|
0x2A, 0x02, 0x08, 0x05, 0x0E, 0x2A, 0x01, 0x81, 0x70, 0x13, 0x01, 0x20,
|
||||||
0x01, 0x00, 0x2A, 0x2A, 0x06, 0x10, 0x02, 0x05, 0x61, 0x40, 0x02, 0x05,
|
0x0E, 0x06, 0x04, 0x63, 0x01, 0x00, 0x2A, 0x2A, 0x06, 0x10, 0x02, 0x05,
|
||||||
0x40, 0x02, 0x05, 0x01, 0x04, 0x08, 0x03, 0x05, 0x04, 0x01, 0x63, 0x01,
|
0x61, 0x40, 0x02, 0x05, 0x40, 0x02, 0x05, 0x01, 0x04, 0x08, 0x03, 0x05,
|
||||||
0x04, 0x08, 0x04, 0xFF, 0x30, 0x29, 0x02, 0x05, 0x79, 0x09, 0x01, 0x02,
|
0x04, 0x01, 0x63, 0x01, 0x04, 0x08, 0x04, 0xFF, 0x30, 0x29, 0x02, 0x05,
|
||||||
0x12, 0x2A, 0x05, 0x03, 0x01, 0x28, 0xA1, 0x7A, 0x42, 0x8A, 0x2E, 0x01,
|
0x79, 0x09, 0x01, 0x02, 0x12, 0x2A, 0x05, 0x03, 0x01, 0x28, 0xA1, 0x7A,
|
||||||
0x83, 0xFF, 0x7F, 0x0F, 0x06, 0x0D, 0x01, 0x03, 0xA2, 0x06, 0x04, 0x01,
|
0x42, 0x8A, 0x2E, 0x01, 0x83, 0xFF, 0x7F, 0x0F, 0x06, 0x0D, 0x01, 0x03,
|
||||||
0x80, 0x78, 0xA1, 0x01, 0x00, 0x8A, 0x40, 0x18, 0x05, 0x03, 0x01, 0x28,
|
0xA2, 0x06, 0x04, 0x01, 0x80, 0x78, 0xA1, 0x01, 0x00, 0x8A, 0x40, 0x18,
|
||||||
0xA1, 0x01, 0x00, 0x00, 0x00, 0xB1, 0xB0, 0x00, 0x04, 0x76, 0x2E, 0xCA,
|
0x05, 0x03, 0x01, 0x28, 0xA1, 0x01, 0x00, 0x00, 0x00, 0xB1, 0xB0, 0x00,
|
||||||
0x06, 0x16, 0xBD, 0x2A, 0x01, 0x84, 0x00, 0x10, 0x06, 0x02, 0x6D, 0x2B,
|
0x04, 0x76, 0x2E, 0xCA, 0x06, 0x16, 0xBD, 0x2A, 0x01, 0x84, 0x00, 0x10,
|
||||||
0x2A, 0x03, 0x00, 0x83, 0x47, 0xB3, 0x02, 0x00, 0x76, 0x2E, 0xA5, 0x27,
|
0x06, 0x02, 0x6D, 0x2B, 0x2A, 0x03, 0x00, 0x83, 0x47, 0xB3, 0x02, 0x00,
|
||||||
0x76, 0x2E, 0x2A, 0xC8, 0x47, 0xC7, 0x03, 0x01, 0x03, 0x02, 0x02, 0x01,
|
0x76, 0x2E, 0xA5, 0x27, 0x76, 0x2E, 0x2A, 0xC8, 0x47, 0xC7, 0x03, 0x01,
|
||||||
0x02, 0x02, 0x39, 0x06, 0x14, 0xBF, 0x2A, 0x03, 0x03, 0x83, 0x47, 0xB3,
|
0x03, 0x02, 0x02, 0x01, 0x02, 0x02, 0x39, 0x06, 0x14, 0xBF, 0x2A, 0x03,
|
||||||
0x02, 0x03, 0x76, 0x2E, 0xA5, 0x02, 0x02, 0x06, 0x03, 0x26, 0x04, 0x01,
|
0x03, 0x83, 0x47, 0xB3, 0x02, 0x03, 0x76, 0x2E, 0xA5, 0x02, 0x02, 0x06,
|
||||||
0x24, 0x9B, 0x00, 0x00, 0xB7, 0x01, 0x10, 0x0F, 0x05, 0x02, 0x71, 0x2B,
|
0x03, 0x26, 0x04, 0x01, 0x24, 0x9B, 0x00, 0x00, 0xB7, 0x01, 0x10, 0x0F,
|
||||||
0x00, 0x00, 0x9C, 0xB7, 0x01, 0x14, 0x0E, 0x06, 0x02, 0x71, 0x2B, 0x83,
|
0x05, 0x02, 0x71, 0x2B, 0x00, 0x00, 0x9C, 0xB7, 0x01, 0x14, 0x0E, 0x06,
|
||||||
0x01, 0x0C, 0x08, 0x01, 0x0C, 0xB3, 0x9B, 0x83, 0x2A, 0x01, 0x0C, 0x08,
|
0x02, 0x71, 0x2B, 0x83, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0xB3, 0x9B, 0x83,
|
||||||
0x01, 0x0C, 0x32, 0x05, 0x02, 0x65, 0x2B, 0x00, 0x02, 0x03, 0x00, 0x03,
|
0x2A, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0x32, 0x05, 0x02, 0x65, 0x2B, 0x00,
|
||||||
0x01, 0x02, 0x00, 0x98, 0x02, 0x01, 0x02, 0x00, 0x3C, 0x2A, 0x01, 0x00,
|
0x02, 0x03, 0x00, 0x03, 0x01, 0x02, 0x00, 0x98, 0x02, 0x01, 0x02, 0x00,
|
||||||
0x0F, 0x06, 0x02, 0x63, 0x00, 0xCD, 0x04, 0x74, 0x00, 0xBD, 0x01, 0x01,
|
0x3C, 0x2A, 0x01, 0x00, 0x0F, 0x06, 0x02, 0x63, 0x00, 0xCD, 0x04, 0x74,
|
||||||
0x0E, 0x06, 0x02, 0x66, 0x2B, 0xBF, 0x2A, 0x2A, 0x5D, 0x47, 0x01, 0x05,
|
0x00, 0xBD, 0x01, 0x01, 0x0E, 0x06, 0x02, 0x66, 0x2B, 0xBF, 0x2A, 0x2A,
|
||||||
0x11, 0x39, 0x06, 0x02, 0x66, 0x2B, 0x01, 0x08, 0x08, 0x2A, 0x82, 0x30,
|
0x5D, 0x47, 0x01, 0x05, 0x11, 0x39, 0x06, 0x02, 0x66, 0x2B, 0x01, 0x08,
|
||||||
0x0B, 0x06, 0x0D, 0x2A, 0x01, 0x01, 0x47, 0x0C, 0x3F, 0x2A, 0x82, 0x42,
|
0x08, 0x2A, 0x82, 0x30, 0x0B, 0x06, 0x0D, 0x2A, 0x01, 0x01, 0x47, 0x0C,
|
||||||
0x84, 0x42, 0x04, 0x01, 0x29, 0x00, 0x00, 0xBD, 0x88, 0x30, 0x01, 0x00,
|
0x3F, 0x2A, 0x82, 0x42, 0x84, 0x42, 0x04, 0x01, 0x29, 0x00, 0x00, 0xBD,
|
||||||
0x3A, 0x0F, 0x06, 0x13, 0x29, 0x01, 0x01, 0x0F, 0x05, 0x02, 0x69, 0x2B,
|
0x88, 0x30, 0x01, 0x00, 0x3A, 0x0F, 0x06, 0x13, 0x29, 0x01, 0x01, 0x0F,
|
||||||
0xBF, 0x06, 0x02, 0x69, 0x2B, 0x01, 0x02, 0x88, 0x42, 0x04, 0x28, 0x01,
|
0x05, 0x02, 0x69, 0x2B, 0xBF, 0x06, 0x02, 0x69, 0x2B, 0x01, 0x02, 0x88,
|
||||||
0x02, 0x3A, 0x0F, 0x06, 0x1F, 0x29, 0x01, 0x0D, 0x0F, 0x05, 0x02, 0x69,
|
0x42, 0x04, 0x28, 0x01, 0x02, 0x3A, 0x0F, 0x06, 0x1F, 0x29, 0x01, 0x0D,
|
||||||
0x2B, 0xBF, 0x01, 0x0C, 0x0F, 0x05, 0x02, 0x69, 0x2B, 0x83, 0x01, 0x0C,
|
0x0F, 0x05, 0x02, 0x69, 0x2B, 0xBF, 0x01, 0x0C, 0x0F, 0x05, 0x02, 0x69,
|
||||||
0xB3, 0x89, 0x83, 0x01, 0x0C, 0x32, 0x05, 0x02, 0x69, 0x2B, 0x04, 0x03,
|
0x2B, 0x83, 0x01, 0x0C, 0xB3, 0x89, 0x83, 0x01, 0x0C, 0x32, 0x05, 0x02,
|
||||||
0x69, 0x2B, 0x29, 0x00, 0x00, 0xBD, 0xA4, 0xBD, 0xA4, 0x2A, 0x06, 0x1D,
|
0x69, 0x2B, 0x04, 0x03, 0x69, 0x2B, 0x29, 0x00, 0x00, 0xBD, 0xA4, 0xBD,
|
||||||
0xBF, 0x06, 0x03, 0xB9, 0x04, 0x15, 0xBD, 0x2A, 0x01, 0x81, 0x7F, 0x0D,
|
0xA4, 0x2A, 0x06, 0x1D, 0xBF, 0x06, 0x03, 0xB9, 0x04, 0x15, 0xBD, 0x2A,
|
||||||
0x06, 0x0C, 0x2A, 0x8B, 0x08, 0x01, 0x00, 0x47, 0x42, 0x8B, 0x47, 0xB3,
|
0x01, 0x81, 0x7F, 0x0D, 0x06, 0x0C, 0x2A, 0x8B, 0x08, 0x01, 0x00, 0x47,
|
||||||
0x04, 0x01, 0xC5, 0x04, 0x60, 0x9B, 0x9B, 0x00, 0x00, 0xB8, 0x2A, 0x5D,
|
0x42, 0x8B, 0x47, 0xB3, 0x04, 0x01, 0xC5, 0x04, 0x60, 0x9B, 0x9B, 0x00,
|
||||||
0x06, 0x07, 0x29, 0x06, 0x02, 0x67, 0x2B, 0x04, 0x74, 0x00, 0x00, 0xC0,
|
0x00, 0xB8, 0x2A, 0x5D, 0x06, 0x07, 0x29, 0x06, 0x02, 0x67, 0x2B, 0x04,
|
||||||
0x01, 0x03, 0xBE, 0x47, 0x29, 0x47, 0x00, 0x00, 0xBD, 0xC5, 0x00, 0x03,
|
0x74, 0x00, 0x00, 0xC0, 0x01, 0x03, 0xBE, 0x47, 0x29, 0x47, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x03, 0x00, 0xBD, 0xA4, 0x2A, 0x06, 0x32, 0xBF, 0x03, 0x01,
|
0xBD, 0xC5, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00, 0xBD, 0xA4, 0x2A, 0x06,
|
||||||
0xBF, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x11, 0x02, 0x01, 0x01, 0x06,
|
0x80, 0x50, 0xBF, 0x03, 0x01, 0xBF, 0x03, 0x02, 0x02, 0x01, 0x01, 0x08,
|
||||||
0x0D, 0x13, 0x02, 0x02, 0x01, 0x01, 0x0F, 0x02, 0x02, 0x01, 0x03, 0x0F,
|
0x0F, 0x06, 0x16, 0x02, 0x02, 0x01, 0x0F, 0x0D, 0x06, 0x0D, 0x01, 0x01,
|
||||||
0x39, 0x13, 0x06, 0x11, 0x02, 0x00, 0x01, 0x01, 0x02, 0x02, 0x60, 0x01,
|
0x02, 0x02, 0x01, 0x10, 0x08, 0x0C, 0x02, 0x00, 0x39, 0x03, 0x00, 0x04,
|
||||||
0x02, 0x0C, 0x02, 0x01, 0x08, 0x0C, 0x39, 0x03, 0x00, 0x04, 0x4B, 0x9B,
|
0x2A, 0x02, 0x01, 0x01, 0x02, 0x11, 0x02, 0x01, 0x01, 0x06, 0x0D, 0x13,
|
||||||
0x02, 0x00, 0x00, 0x00, 0xBD, 0xA4, 0xBA, 0x80, 0x40, 0x9B, 0x00, 0x00,
|
0x02, 0x02, 0x01, 0x01, 0x0F, 0x02, 0x02, 0x01, 0x03, 0x0F, 0x39, 0x13,
|
||||||
0xBD, 0xA4, 0xBD, 0xA4, 0x01, 0x00, 0x7C, 0x41, 0x2A, 0x06, 0x15, 0xBD,
|
0x06, 0x11, 0x02, 0x00, 0x01, 0x01, 0x02, 0x02, 0x60, 0x01, 0x02, 0x0C,
|
||||||
0x2A, 0x01, 0x20, 0x0B, 0x06, 0x0B, 0x01, 0x01, 0x47, 0x0C, 0x7C, 0x2F,
|
0x02, 0x01, 0x08, 0x0C, 0x39, 0x03, 0x00, 0x04, 0xFF, 0x2C, 0x9B, 0x02,
|
||||||
0x39, 0x7C, 0x41, 0x04, 0x01, 0x29, 0x04, 0x68, 0x9B, 0x9B, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0xBD, 0xA4, 0xBA, 0x80, 0x41, 0x9B, 0x00, 0x00, 0xBD,
|
||||||
0x01, 0x02, 0x98, 0xC0, 0x01, 0x08, 0x0C, 0xC0, 0x08, 0x00, 0x00, 0x01,
|
0xA4, 0xBD, 0xA4, 0x01, 0x00, 0x7C, 0x41, 0x2A, 0x06, 0x15, 0xBD, 0x2A,
|
||||||
0x03, 0x98, 0xC0, 0x01, 0x08, 0x0C, 0xC0, 0x08, 0x01, 0x08, 0x0C, 0xC0,
|
0x01, 0x20, 0x0B, 0x06, 0x0B, 0x01, 0x01, 0x47, 0x0C, 0x7C, 0x2F, 0x39,
|
||||||
0x08, 0x00, 0x00, 0x01, 0x01, 0x98, 0xC0, 0x00, 0x00, 0x3D, 0x2A, 0x5B,
|
0x7C, 0x41, 0x04, 0x01, 0x29, 0x04, 0x68, 0x9B, 0x9B, 0x00, 0x00, 0x01,
|
||||||
0x05, 0x01, 0x00, 0x29, 0xCD, 0x04, 0x76, 0x02, 0x03, 0x00, 0x92, 0x30,
|
0x02, 0x98, 0xC0, 0x01, 0x08, 0x0C, 0xC0, 0x08, 0x00, 0x00, 0x01, 0x03,
|
||||||
0x03, 0x01, 0x01, 0x00, 0x2A, 0x02, 0x01, 0x0B, 0x06, 0x10, 0x2A, 0x01,
|
0x98, 0xC0, 0x01, 0x08, 0x0C, 0xC0, 0x08, 0x01, 0x08, 0x0C, 0xC0, 0x08,
|
||||||
0x01, 0x0C, 0x91, 0x08, 0x2E, 0x02, 0x00, 0x0F, 0x06, 0x01, 0x00, 0x5F,
|
0x00, 0x00, 0x01, 0x01, 0x98, 0xC0, 0x00, 0x00, 0x3D, 0x2A, 0x5B, 0x05,
|
||||||
0x04, 0x6A, 0x29, 0x01, 0x7F, 0x00, 0x00, 0x2C, 0x19, 0x38, 0x06, 0x04,
|
0x01, 0x00, 0x29, 0xCD, 0x04, 0x76, 0x02, 0x03, 0x00, 0x92, 0x30, 0x03,
|
||||||
0xCB, 0x29, 0x04, 0x78, 0x01, 0x16, 0x87, 0x42, 0x01, 0x00, 0xDE, 0x01,
|
0x01, 0x01, 0x00, 0x2A, 0x02, 0x01, 0x0B, 0x06, 0x10, 0x2A, 0x01, 0x01,
|
||||||
0x00, 0xDD, 0x2C, 0x01, 0x17, 0x87, 0x42, 0x00, 0x00, 0x01, 0x15, 0x87,
|
0x0C, 0x91, 0x08, 0x2E, 0x02, 0x00, 0x0F, 0x06, 0x01, 0x00, 0x5F, 0x04,
|
||||||
0x42, 0x47, 0x55, 0x29, 0x55, 0x29, 0x2C, 0x00, 0x00, 0x01, 0x01, 0x47,
|
0x6A, 0x29, 0x01, 0x7F, 0x00, 0x00, 0x2C, 0x19, 0x38, 0x06, 0x04, 0xCB,
|
||||||
0xC3, 0x00, 0x00, 0x47, 0x3A, 0x98, 0x47, 0x2A, 0x06, 0x05, 0xC0, 0x29,
|
0x29, 0x04, 0x78, 0x01, 0x16, 0x87, 0x42, 0x01, 0x00, 0xDE, 0x01, 0x00,
|
||||||
0x60, 0x04, 0x78, 0x29, 0x00, 0x02, 0x03, 0x00, 0x76, 0x2E, 0x9A, 0x03,
|
0xDD, 0x2C, 0x01, 0x17, 0x87, 0x42, 0x00, 0x00, 0x01, 0x15, 0x87, 0x42,
|
||||||
0x01, 0x02, 0x01, 0x01, 0x0F, 0x13, 0x02, 0x01, 0x01, 0x04, 0x12, 0x01,
|
0x47, 0x55, 0x29, 0x55, 0x29, 0x2C, 0x00, 0x00, 0x01, 0x01, 0x47, 0xC3,
|
||||||
0x0F, 0x13, 0x02, 0x01, 0x01, 0x08, 0x12, 0x01, 0x0F, 0x13, 0x01, 0x00,
|
0x00, 0x00, 0x47, 0x3A, 0x98, 0x47, 0x2A, 0x06, 0x05, 0xC0, 0x29, 0x60,
|
||||||
0x3A, 0x0F, 0x06, 0x10, 0x29, 0x01, 0x00, 0x01, 0x18, 0x02, 0x00, 0x06,
|
0x04, 0x78, 0x29, 0x00, 0x02, 0x03, 0x00, 0x76, 0x2E, 0x9A, 0x03, 0x01,
|
||||||
0x03, 0x4A, 0x04, 0x01, 0x4B, 0x04, 0x80, 0x68, 0x01, 0x01, 0x3A, 0x0F,
|
0x02, 0x01, 0x01, 0x0F, 0x13, 0x02, 0x01, 0x01, 0x04, 0x12, 0x01, 0x0F,
|
||||||
0x06, 0x10, 0x29, 0x01, 0x01, 0x01, 0x10, 0x02, 0x00, 0x06, 0x03, 0x4A,
|
0x13, 0x02, 0x01, 0x01, 0x08, 0x12, 0x01, 0x0F, 0x13, 0x01, 0x00, 0x3A,
|
||||||
0x04, 0x01, 0x4B, 0x04, 0x80, 0x52, 0x01, 0x02, 0x3A, 0x0F, 0x06, 0x0F,
|
0x0F, 0x06, 0x10, 0x29, 0x01, 0x00, 0x01, 0x18, 0x02, 0x00, 0x06, 0x03,
|
||||||
0x29, 0x01, 0x01, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03, 0x4A, 0x04, 0x01,
|
0x4A, 0x04, 0x01, 0x4B, 0x04, 0x80, 0x68, 0x01, 0x01, 0x3A, 0x0F, 0x06,
|
||||||
0x4B, 0x04, 0x3D, 0x01, 0x03, 0x3A, 0x0F, 0x06, 0x0E, 0x29, 0x29, 0x01,
|
0x10, 0x29, 0x01, 0x01, 0x01, 0x10, 0x02, 0x00, 0x06, 0x03, 0x4A, 0x04,
|
||||||
0x10, 0x02, 0x00, 0x06, 0x03, 0x48, 0x04, 0x01, 0x49, 0x04, 0x29, 0x01,
|
0x01, 0x4B, 0x04, 0x80, 0x52, 0x01, 0x02, 0x3A, 0x0F, 0x06, 0x0F, 0x29,
|
||||||
0x04, 0x3A, 0x0F, 0x06, 0x0E, 0x29, 0x29, 0x01, 0x20, 0x02, 0x00, 0x06,
|
0x01, 0x01, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03, 0x4A, 0x04, 0x01, 0x4B,
|
||||||
0x03, 0x48, 0x04, 0x01, 0x49, 0x04, 0x15, 0x01, 0x05, 0x3A, 0x0F, 0x06,
|
0x04, 0x3D, 0x01, 0x03, 0x3A, 0x0F, 0x06, 0x0E, 0x29, 0x29, 0x01, 0x10,
|
||||||
0x0C, 0x29, 0x29, 0x02, 0x00, 0x06, 0x03, 0x4C, 0x04, 0x01, 0x4D, 0x04,
|
0x02, 0x00, 0x06, 0x03, 0x48, 0x04, 0x01, 0x49, 0x04, 0x29, 0x01, 0x04,
|
||||||
0x03, 0x68, 0x2B, 0x29, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x01, 0x02,
|
0x3A, 0x0F, 0x06, 0x0E, 0x29, 0x29, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03,
|
||||||
0x10, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x2A, 0x5E, 0x47, 0x01, 0x03,
|
0x48, 0x04, 0x01, 0x49, 0x04, 0x15, 0x01, 0x05, 0x3A, 0x0F, 0x06, 0x0C,
|
||||||
0x0B, 0x13, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x01, 0x01, 0x0F, 0x00,
|
0x29, 0x29, 0x02, 0x00, 0x06, 0x03, 0x4C, 0x04, 0x01, 0x4D, 0x04, 0x03,
|
||||||
0x00, 0x9A, 0x01, 0x0C, 0x12, 0x5D, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x73,
|
0x68, 0x2B, 0x29, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x01, 0x02, 0x10,
|
||||||
0x30, 0x2A, 0x06, 0x1F, 0x01, 0x01, 0x3A, 0x0F, 0x06, 0x06, 0x29, 0x01,
|
0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x2A, 0x5E, 0x47, 0x01, 0x03, 0x0B,
|
||||||
0x00, 0x9E, 0x04, 0x11, 0x01, 0x02, 0x3A, 0x0F, 0x06, 0x0A, 0x29, 0x75,
|
0x13, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x12, 0x01, 0x01, 0x0F, 0x00, 0x00,
|
||||||
0x30, 0x06, 0x03, 0x01, 0x10, 0x39, 0x04, 0x01, 0x29, 0x04, 0x01, 0x29,
|
0x9A, 0x01, 0x0C, 0x12, 0x5D, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x73, 0x30,
|
||||||
0x7B, 0x30, 0x05, 0x33, 0x31, 0x06, 0x30, 0x86, 0x30, 0x01, 0x14, 0x3A,
|
0x2A, 0x06, 0x1F, 0x01, 0x01, 0x3A, 0x0F, 0x06, 0x06, 0x29, 0x01, 0x00,
|
||||||
0x0F, 0x06, 0x06, 0x29, 0x01, 0x02, 0x39, 0x04, 0x22, 0x01, 0x15, 0x3A,
|
0x9E, 0x04, 0x11, 0x01, 0x02, 0x3A, 0x0F, 0x06, 0x0A, 0x29, 0x75, 0x30,
|
||||||
0x0F, 0x06, 0x09, 0x29, 0xA7, 0x06, 0x03, 0x01, 0x7F, 0x9E, 0x04, 0x13,
|
0x06, 0x03, 0x01, 0x10, 0x39, 0x04, 0x01, 0x29, 0x04, 0x01, 0x29, 0x7B,
|
||||||
0x01, 0x16, 0x3A, 0x0F, 0x06, 0x06, 0x29, 0x01, 0x01, 0x39, 0x04, 0x07,
|
0x30, 0x05, 0x33, 0x31, 0x06, 0x30, 0x86, 0x30, 0x01, 0x14, 0x3A, 0x0F,
|
||||||
0x29, 0x01, 0x04, 0x39, 0x01, 0x00, 0x29, 0x19, 0x06, 0x03, 0x01, 0x08,
|
0x06, 0x06, 0x29, 0x01, 0x02, 0x39, 0x04, 0x22, 0x01, 0x15, 0x3A, 0x0F,
|
||||||
0x39, 0x00, 0x00, 0x1B, 0x2A, 0x05, 0x0F, 0x31, 0x06, 0x0C, 0x86, 0x30,
|
0x06, 0x09, 0x29, 0xA7, 0x06, 0x03, 0x01, 0x7F, 0x9E, 0x04, 0x13, 0x01,
|
||||||
0x01, 0x15, 0x0F, 0x06, 0x04, 0x29, 0xA7, 0x04, 0x01, 0x23, 0x00, 0x00,
|
0x16, 0x3A, 0x0F, 0x06, 0x06, 0x29, 0x01, 0x01, 0x39, 0x04, 0x07, 0x29,
|
||||||
0xCB, 0x01, 0x07, 0x13, 0x01, 0x01, 0x10, 0x06, 0x02, 0x71, 0x2B, 0x00,
|
0x01, 0x04, 0x39, 0x01, 0x00, 0x29, 0x19, 0x06, 0x03, 0x01, 0x08, 0x39,
|
||||||
0x01, 0x03, 0x00, 0x2C, 0x19, 0x06, 0x05, 0x02, 0x00, 0x87, 0x42, 0x00,
|
0x00, 0x00, 0x1B, 0x2A, 0x05, 0x0F, 0x31, 0x06, 0x0C, 0x86, 0x30, 0x01,
|
||||||
0xCB, 0x29, 0x04, 0x74, 0x00, 0x01, 0x14, 0xCE, 0x01, 0x01, 0xDE, 0x2C,
|
0x15, 0x0F, 0x06, 0x04, 0x29, 0xA7, 0x04, 0x01, 0x23, 0x00, 0x00, 0xCB,
|
||||||
0x2A, 0x01, 0x00, 0xC6, 0x01, 0x16, 0xCE, 0xD2, 0x2C, 0x00, 0x00, 0x01,
|
0x01, 0x07, 0x13, 0x01, 0x01, 0x10, 0x06, 0x02, 0x71, 0x2B, 0x00, 0x01,
|
||||||
0x0B, 0xDE, 0x50, 0x2A, 0x2A, 0x01, 0x03, 0x08, 0xDD, 0xDD, 0x14, 0x2A,
|
0x03, 0x00, 0x2C, 0x19, 0x06, 0x05, 0x02, 0x00, 0x87, 0x42, 0x00, 0xCB,
|
||||||
0x5B, 0x06, 0x02, 0x29, 0x00, 0xDD, 0x1E, 0x2A, 0x06, 0x05, 0x83, 0x47,
|
0x29, 0x04, 0x74, 0x00, 0x01, 0x14, 0xCE, 0x01, 0x01, 0xDE, 0x2C, 0x2A,
|
||||||
0xD6, 0x04, 0x77, 0x29, 0x04, 0x6C, 0x00, 0x01, 0x00, 0xD8, 0x93, 0x2E,
|
0x01, 0x00, 0xC6, 0x01, 0x16, 0xCE, 0xD2, 0x2C, 0x00, 0x00, 0x01, 0x0B,
|
||||||
0x01, 0x86, 0x03, 0x11, 0x06, 0x05, 0x61, 0x01, 0x00, 0xD9, 0x08, 0x4E,
|
0xDE, 0x50, 0x2A, 0x2A, 0x01, 0x03, 0x08, 0xDD, 0xDD, 0x14, 0x2A, 0x5B,
|
||||||
0x08, 0x01, 0x03, 0x08, 0x01, 0x0D, 0xDE, 0xDD, 0x01, 0x00, 0xD8, 0xDE,
|
0x06, 0x02, 0x29, 0x00, 0xDD, 0x1E, 0x2A, 0x06, 0x05, 0x83, 0x47, 0xD6,
|
||||||
0x01, 0x01, 0xD8, 0x29, 0x93, 0x2E, 0x01, 0x86, 0x03, 0x11, 0x06, 0x08,
|
0x04, 0x77, 0x29, 0x04, 0x6C, 0x00, 0x01, 0x00, 0xD8, 0x93, 0x2E, 0x01,
|
||||||
0x01, 0x00, 0xD9, 0xDC, 0x01, 0x01, 0xD9, 0x29, 0x4E, 0xDC, 0x16, 0x15,
|
0x86, 0x03, 0x11, 0x06, 0x05, 0x61, 0x01, 0x00, 0xD9, 0x08, 0x4E, 0x08,
|
||||||
0x2A, 0x5B, 0x06, 0x02, 0x29, 0x00, 0xDC, 0x1F, 0x2A, 0x06, 0x05, 0x83,
|
0x01, 0x03, 0x08, 0x01, 0x0D, 0xDE, 0xDD, 0x01, 0x00, 0xD8, 0xDE, 0x01,
|
||||||
0x47, 0xD6, 0x04, 0x77, 0x29, 0x04, 0x6C, 0x00, 0x9C, 0x01, 0x14, 0xDE,
|
0x01, 0xD8, 0x29, 0x93, 0x2E, 0x01, 0x86, 0x03, 0x11, 0x06, 0x08, 0x01,
|
||||||
0x01, 0x0C, 0xDD, 0x83, 0x01, 0x0C, 0xD6, 0x00, 0x04, 0x03, 0x00, 0x01,
|
0x00, 0xD9, 0xDC, 0x01, 0x01, 0xD9, 0x29, 0x4E, 0xDC, 0x16, 0x15, 0x2A,
|
||||||
0x02, 0xDE, 0x01, 0x80, 0x46, 0x88, 0x30, 0x01, 0x02, 0x0F, 0x06, 0x0C,
|
0x5B, 0x06, 0x02, 0x29, 0x00, 0xDC, 0x1F, 0x2A, 0x06, 0x05, 0x83, 0x47,
|
||||||
0x02, 0x00, 0x06, 0x04, 0x01, 0x05, 0x04, 0x02, 0x01, 0x1D, 0x04, 0x02,
|
0xD6, 0x04, 0x77, 0x29, 0x04, 0x6C, 0x00, 0x9C, 0x01, 0x14, 0xDE, 0x01,
|
||||||
0x01, 0x00, 0x03, 0x01, 0x84, 0x30, 0x06, 0x04, 0x01, 0x05, 0x04, 0x02,
|
0x0C, 0xDD, 0x83, 0x01, 0x0C, 0xD6, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02,
|
||||||
0x01, 0x00, 0x03, 0x02, 0x8A, 0x2E, 0x2A, 0x06, 0x05, 0x60, 0x21, 0x01,
|
0xDE, 0x01, 0x80, 0x46, 0x88, 0x30, 0x01, 0x02, 0x0F, 0x06, 0x0C, 0x02,
|
||||||
0x07, 0x08, 0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x02, 0x03, 0x08,
|
0x00, 0x06, 0x04, 0x01, 0x05, 0x04, 0x02, 0x01, 0x1D, 0x04, 0x02, 0x01,
|
||||||
0x2A, 0x06, 0x03, 0x01, 0x02, 0x08, 0x08, 0xDD, 0x93, 0x2E, 0xDC, 0x8C,
|
0x00, 0x03, 0x01, 0x84, 0x30, 0x06, 0x04, 0x01, 0x05, 0x04, 0x02, 0x01,
|
||||||
0x01, 0x04, 0x17, 0x8C, 0x01, 0x04, 0x08, 0x01, 0x1C, 0x34, 0x8C, 0x01,
|
0x00, 0x03, 0x02, 0x8A, 0x2E, 0x2A, 0x06, 0x05, 0x60, 0x21, 0x01, 0x07,
|
||||||
0x20, 0xD6, 0x01, 0x20, 0xDE, 0x8D, 0x01, 0x20, 0xD6, 0x76, 0x2E, 0xDC,
|
0x08, 0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x02, 0x03, 0x08, 0x2A,
|
||||||
0x01, 0x00, 0xDE, 0x02, 0x01, 0x02, 0x02, 0x08, 0x02, 0x03, 0x08, 0x2A,
|
0x06, 0x03, 0x01, 0x02, 0x08, 0x08, 0xDD, 0x93, 0x2E, 0xDC, 0x8C, 0x01,
|
||||||
0x06, 0x80, 0x40, 0xDC, 0x02, 0x01, 0x2A, 0x06, 0x10, 0x01, 0x83, 0xFE,
|
0x04, 0x17, 0x8C, 0x01, 0x04, 0x08, 0x01, 0x1C, 0x34, 0x8C, 0x01, 0x20,
|
||||||
0x01, 0xDC, 0x01, 0x04, 0x09, 0x2A, 0xDC, 0x60, 0x89, 0x47, 0xD7, 0x04,
|
0xD6, 0x01, 0x20, 0xDE, 0x8D, 0x01, 0x20, 0xD6, 0x76, 0x2E, 0xDC, 0x01,
|
||||||
0x01, 0x29, 0x02, 0x02, 0x06, 0x0C, 0x01, 0x01, 0xDC, 0x01, 0x01, 0xDC,
|
0x00, 0xDE, 0x02, 0x01, 0x02, 0x02, 0x08, 0x02, 0x03, 0x08, 0x2A, 0x06,
|
||||||
0x84, 0x30, 0x01, 0x08, 0x09, 0xDE, 0x02, 0x03, 0x2A, 0x06, 0x11, 0x01,
|
0x80, 0x40, 0xDC, 0x02, 0x01, 0x2A, 0x06, 0x10, 0x01, 0x83, 0xFE, 0x01,
|
||||||
0x10, 0xDC, 0x01, 0x04, 0x09, 0x2A, 0xDC, 0x62, 0x2A, 0xDC, 0x60, 0x83,
|
0xDC, 0x01, 0x04, 0x09, 0x2A, 0xDC, 0x60, 0x89, 0x47, 0xD7, 0x04, 0x01,
|
||||||
0x47, 0xD7, 0x04, 0x01, 0x29, 0x04, 0x01, 0x29, 0x00, 0x00, 0x01, 0x0E,
|
0x29, 0x02, 0x02, 0x06, 0x0C, 0x01, 0x01, 0xDC, 0x01, 0x01, 0xDC, 0x84,
|
||||||
0xDE, 0x01, 0x00, 0xDD, 0x00, 0x03, 0x76, 0x2E, 0xC8, 0x05, 0x01, 0x00,
|
0x30, 0x01, 0x08, 0x09, 0xDE, 0x02, 0x03, 0x2A, 0x06, 0x11, 0x01, 0x10,
|
||||||
0x7C, 0x2F, 0x01, 0x00, 0xA0, 0x12, 0x01, 0x01, 0x13, 0x5D, 0x06, 0x03,
|
0xDC, 0x01, 0x04, 0x09, 0x2A, 0xDC, 0x62, 0x2A, 0xDC, 0x60, 0x83, 0x47,
|
||||||
0x5F, 0x04, 0x75, 0x03, 0x00, 0x29, 0x02, 0x00, 0x25, 0x2A, 0x5B, 0x06,
|
0xD7, 0x04, 0x01, 0x29, 0x04, 0x01, 0x29, 0x00, 0x00, 0x01, 0x0E, 0xDE,
|
||||||
0x02, 0x37, 0x2B, 0x03, 0x01, 0x93, 0x2E, 0x01, 0x86, 0x03, 0x11, 0x03,
|
0x01, 0x00, 0xDD, 0x00, 0x03, 0x76, 0x2E, 0xC8, 0x05, 0x01, 0x00, 0x7C,
|
||||||
0x02, 0x01, 0x0C, 0xDE, 0x02, 0x01, 0x7E, 0x30, 0x08, 0x02, 0x02, 0x01,
|
0x2F, 0x01, 0x00, 0xA0, 0x12, 0x01, 0x01, 0x13, 0x5D, 0x06, 0x03, 0x5F,
|
||||||
0x02, 0x13, 0x08, 0x01, 0x06, 0x08, 0xDD, 0x01, 0x03, 0xDE, 0x02, 0x00,
|
0x04, 0x75, 0x03, 0x00, 0x29, 0x02, 0x00, 0x25, 0x2A, 0x5B, 0x06, 0x02,
|
||||||
0xDC, 0x7D, 0x7E, 0x30, 0xD7, 0x02, 0x02, 0x06, 0x0D, 0x90, 0x30, 0xDE,
|
0x37, 0x2B, 0x03, 0x01, 0x93, 0x2E, 0x01, 0x86, 0x03, 0x11, 0x03, 0x02,
|
||||||
0x76, 0x2E, 0xC9, 0x01, 0x01, 0x0C, 0x01, 0x03, 0x08, 0xDE, 0x02, 0x01,
|
0x01, 0x0C, 0xDE, 0x02, 0x01, 0x7E, 0x30, 0x08, 0x02, 0x02, 0x01, 0x02,
|
||||||
0xDC, 0x83, 0x02, 0x01, 0xD6, 0x00, 0x00, 0x54, 0x2A, 0x01, 0x00, 0x0F,
|
0x13, 0x08, 0x01, 0x06, 0x08, 0xDD, 0x01, 0x03, 0xDE, 0x02, 0x00, 0xDC,
|
||||||
0x06, 0x02, 0x63, 0x00, 0xCB, 0x29, 0x04, 0x73, 0x00, 0x2A, 0xDE, 0xD6,
|
0x7D, 0x7E, 0x30, 0xD7, 0x02, 0x02, 0x06, 0x1C, 0x90, 0x2E, 0x2A, 0x01,
|
||||||
0x00, 0x00, 0x01, 0x00, 0x76, 0x2E, 0xC7, 0x06, 0x0C, 0x61, 0x3A, 0x06,
|
0x83, 0xFE, 0x00, 0x0B, 0x06, 0x03, 0xDC, 0x04, 0x0F, 0x01, 0x81, 0x7F,
|
||||||
0x08, 0x01, 0x80, 0x41, 0xDE, 0x01, 0x80, 0x42, 0xDE, 0x46, 0x06, 0x07,
|
0x13, 0xDE, 0x76, 0x2E, 0xC9, 0x01, 0x01, 0x0C, 0x01, 0x03, 0x08, 0xDE,
|
||||||
0x5F, 0x3A, 0x06, 0x03, 0x01, 0x01, 0xDE, 0x45, 0x06, 0x08, 0x5F, 0x3A,
|
0x02, 0x01, 0xDC, 0x83, 0x02, 0x01, 0xD6, 0x00, 0x00, 0x54, 0x2A, 0x01,
|
||||||
0x06, 0x04, 0x01, 0x80, 0x40, 0xDE, 0x47, 0x29, 0x00, 0x01, 0x01, 0x00,
|
0x00, 0x0F, 0x06, 0x02, 0x63, 0x00, 0xCB, 0x29, 0x04, 0x73, 0x00, 0x2A,
|
||||||
0x03, 0x00, 0x46, 0x45, 0x39, 0x05, 0x14, 0x01, 0x01, 0x01, 0x80, 0x7C,
|
0xDE, 0xD6, 0x00, 0x00, 0x01, 0x00, 0x76, 0x2E, 0xC7, 0x06, 0x0C, 0x61,
|
||||||
0xDA, 0x03, 0x00, 0x01, 0x03, 0x01, 0x80, 0x7C, 0xDA, 0x02, 0x00, 0x08,
|
0x3A, 0x06, 0x08, 0x01, 0x80, 0x41, 0xDE, 0x01, 0x80, 0x42, 0xDE, 0x46,
|
||||||
0x47, 0x29, 0x00, 0x46, 0x06, 0x07, 0x01, 0x01, 0x44, 0x29, 0xDA, 0x03,
|
0x06, 0x07, 0x5F, 0x3A, 0x06, 0x03, 0x01, 0x01, 0xDE, 0x45, 0x06, 0x08,
|
||||||
0x00, 0x45, 0x06, 0x0A, 0x01, 0x03, 0x44, 0x29, 0xDA, 0x02, 0x00, 0x08,
|
0x5F, 0x3A, 0x06, 0x04, 0x01, 0x80, 0x40, 0xDE, 0x47, 0x29, 0x00, 0x01,
|
||||||
0x03, 0x00, 0x29, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x04, 0xDB,
|
0x01, 0x00, 0x03, 0x00, 0x46, 0x45, 0x39, 0x05, 0x14, 0x01, 0x01, 0x01,
|
||||||
0x01, 0x05, 0xDB, 0x01, 0x06, 0xDB, 0x01, 0x03, 0xDB, 0x01, 0x02, 0xDB,
|
0x80, 0x7C, 0xDA, 0x03, 0x00, 0x01, 0x03, 0x01, 0x80, 0x7C, 0xDA, 0x02,
|
||||||
0x0A, 0x63, 0x00, 0x01, 0x03, 0x00, 0x3A, 0x01, 0x01, 0x02, 0x00, 0x0C,
|
0x00, 0x08, 0x47, 0x29, 0x00, 0x46, 0x06, 0x07, 0x01, 0x01, 0x44, 0x29,
|
||||||
0x13, 0x05, 0x01, 0x00, 0x61, 0x01, 0x03, 0x3B, 0x06, 0x07, 0x02, 0x00,
|
0xDA, 0x03, 0x00, 0x45, 0x06, 0x0A, 0x01, 0x03, 0x44, 0x29, 0xDA, 0x02,
|
||||||
0xDE, 0x01, 0x02, 0x3B, 0xDE, 0x00, 0x00, 0x2A, 0x01, 0x08, 0x52, 0xDE,
|
0x00, 0x08, 0x03, 0x00, 0x29, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
|
||||||
0xDE, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x52, 0xDE, 0xDC, 0x00, 0x00, 0x2A,
|
0x04, 0xDB, 0x01, 0x05, 0xDB, 0x01, 0x06, 0xDB, 0x01, 0x03, 0xDB, 0x01,
|
||||||
0x55, 0x06, 0x02, 0x29, 0x00, 0xCB, 0x29, 0x04, 0x76
|
0x02, 0xDB, 0x0A, 0x63, 0x00, 0x01, 0x03, 0x00, 0x3A, 0x01, 0x01, 0x02,
|
||||||
|
0x00, 0x0C, 0x13, 0x05, 0x01, 0x00, 0x61, 0x01, 0x03, 0x3B, 0x06, 0x07,
|
||||||
|
0x02, 0x00, 0xDE, 0x01, 0x02, 0x3B, 0xDE, 0x00, 0x00, 0x2A, 0x01, 0x08,
|
||||||
|
0x52, 0xDE, 0xDE, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x52, 0xDE, 0xDC, 0x00,
|
||||||
|
0x00, 0x2A, 0x55, 0x06, 0x02, 0x29, 0x00, 0xCB, 0x29, 0x04, 0x76
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint16_t t0_caddr[] = {
|
static const uint16_t t0_caddr[] = {
|
||||||
|
|
@ -842,62 +860,62 @@ static const uint16_t t0_caddr[] = {
|
||||||
624,
|
624,
|
||||||
638,
|
638,
|
||||||
644,
|
644,
|
||||||
704,
|
703,
|
||||||
723,
|
722,
|
||||||
745,
|
744,
|
||||||
794,
|
793,
|
||||||
843,
|
842,
|
||||||
919,
|
918,
|
||||||
1021,
|
1020,
|
||||||
1032,
|
1031,
|
||||||
1613,
|
|
||||||
1617,
|
1617,
|
||||||
1684,
|
1621,
|
||||||
1694,
|
1688,
|
||||||
1725,
|
1698,
|
||||||
1749,
|
1729,
|
||||||
1795,
|
1753,
|
||||||
1865,
|
1799,
|
||||||
1905,
|
1869,
|
||||||
1919,
|
1909,
|
||||||
1928,
|
1923,
|
||||||
1932,
|
1932,
|
||||||
1996,
|
1936,
|
||||||
2004,
|
2031,
|
||||||
2040,
|
2039,
|
||||||
2051,
|
2075,
|
||||||
2067,
|
2086,
|
||||||
2073,
|
2102,
|
||||||
2084,
|
2108,
|
||||||
2119,
|
2119,
|
||||||
2145,
|
2154,
|
||||||
2157,
|
2180,
|
||||||
2163,
|
2192,
|
||||||
2178,
|
2198,
|
||||||
2334,
|
2213,
|
||||||
2343,
|
2369,
|
||||||
2356,
|
2378,
|
||||||
2365,
|
2391,
|
||||||
2372,
|
2400,
|
||||||
2475,
|
2407,
|
||||||
2496,
|
2510,
|
||||||
2509,
|
2531,
|
||||||
2525,
|
2544,
|
||||||
2543,
|
2560,
|
||||||
2575,
|
2578,
|
||||||
2648,
|
2610,
|
||||||
2661,
|
2683,
|
||||||
2842,
|
2696,
|
||||||
2850,
|
2877,
|
||||||
2947,
|
2885,
|
||||||
2961,
|
2997,
|
||||||
2966,
|
3011,
|
||||||
3010,
|
3016,
|
||||||
3067,
|
3060,
|
||||||
3088,
|
3117,
|
||||||
3115,
|
3138,
|
||||||
3123,
|
3165,
|
||||||
3131
|
3173,
|
||||||
|
3181
|
||||||
};
|
};
|
||||||
|
|
||||||
#define T0_INTERPRETED 91
|
#define T0_INTERPRETED 91
|
||||||
|
|
@ -1195,7 +1213,7 @@ br_ssl_hs_server_run(void *t0ctx)
|
||||||
x = (*CTX->policy_vtable)->choose(
|
x = (*CTX->policy_vtable)->choose(
|
||||||
CTX->policy_vtable, CTX, &choices);
|
CTX->policy_vtable, CTX, &choices);
|
||||||
ENG->session.cipher_suite = choices.cipher_suite;
|
ENG->session.cipher_suite = choices.cipher_suite;
|
||||||
CTX->sign_hash_id = choices.hash_id;
|
CTX->sign_hash_id = choices.algo_id;
|
||||||
ENG->chain = choices.chain;
|
ENG->chain = choices.chain;
|
||||||
ENG->chain_len = choices.chain_len;
|
ENG->chain_len = choices.chain_len;
|
||||||
T0_PUSHi(-(x != 0));
|
T0_PUSHi(-(x != 0));
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,44 @@ do_static_ecdh(br_ssl_server_context *ctx, int prf_id)
|
||||||
do_ecdh(ctx, prf_id, cpoint, cpoint_len);
|
do_ecdh(ctx, prf_id, cpoint, cpoint_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
hash_data(br_ssl_server_context *ctx,
|
||||||
|
void *dst, int hash_id, const void *src, size_t len)
|
||||||
|
{
|
||||||
|
const br_hash_class *hf;
|
||||||
|
br_hash_compat_context hc;
|
||||||
|
|
||||||
|
if (hash_id == 0) {
|
||||||
|
unsigned char tmp[36];
|
||||||
|
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, br_md5_ID);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, tmp);
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, br_sha1_ID);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, tmp + 16);
|
||||||
|
memcpy(dst, tmp, 36);
|
||||||
|
return 36;
|
||||||
|
} else {
|
||||||
|
hf = br_multihash_getimpl(&ctx->eng.mhash, hash_id);
|
||||||
|
if (hf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hf->init(&hc.vtable);
|
||||||
|
hf->update(&hc.vtable, src, len);
|
||||||
|
hf->out(&hc.vtable, dst);
|
||||||
|
return (hf->desc >> BR_HASHDESC_OUT_OFF) & BR_HASHDESC_OUT_MASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do the ECDHE key exchange (part 1: generation of transient key, and
|
* Do the ECDHE key exchange (part 1: generation of transient key, and
|
||||||
* computing of the point to send to the client). Returned value is the
|
* computing of the point to send to the client). Returned value is the
|
||||||
|
|
@ -179,12 +217,10 @@ do_static_ecdh(br_ssl_server_context *ctx, int prf_id)
|
||||||
static int
|
static int
|
||||||
do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
||||||
{
|
{
|
||||||
int hash;
|
unsigned algo_id;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
const unsigned char *order;
|
const unsigned char *order;
|
||||||
size_t olen, glen;
|
size_t olen, glen;
|
||||||
br_multihash_context mhc;
|
|
||||||
unsigned char head[4];
|
|
||||||
size_t hv_len, sig_len;
|
size_t hv_len, sig_len;
|
||||||
|
|
||||||
if (!((ctx->eng.iec->supported_curves >> curve) & 1)) {
|
if (!((ctx->eng.iec->supported_curves >> curve) & 1)) {
|
||||||
|
|
@ -213,55 +249,33 @@ do_ecdhe_part1(br_ssl_server_context *ctx, int curve)
|
||||||
/*
|
/*
|
||||||
* Compute our ECDH point.
|
* Compute our ECDH point.
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
/* obsolete */
|
|
||||||
generator = ctx->eng.iec->generator(curve, &glen);
|
|
||||||
memcpy(ctx->eng.ecdhe_point, generator, glen);
|
|
||||||
ctx->eng.ecdhe_point_len = glen;
|
|
||||||
if (!ctx->eng.iec->mul(ctx->eng.ecdhe_point, glen,
|
|
||||||
ctx->ecdhe_key, olen, curve))
|
|
||||||
{
|
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
glen = ctx->eng.iec->mulgen(ctx->eng.ecdhe_point,
|
glen = ctx->eng.iec->mulgen(ctx->eng.ecdhe_point,
|
||||||
ctx->ecdhe_key, olen, curve);
|
ctx->ecdhe_key, olen, curve);
|
||||||
ctx->eng.ecdhe_point_len = glen;
|
ctx->eng.ecdhe_point_len = glen;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the signature.
|
* Assemble the message to be signed, and possibly hash it.
|
||||||
*/
|
*/
|
||||||
br_multihash_zero(&mhc);
|
memcpy(ctx->eng.pad, ctx->eng.client_random, 32);
|
||||||
br_multihash_copyimpl(&mhc, &ctx->eng.mhash);
|
memcpy(ctx->eng.pad + 32, ctx->eng.server_random, 32);
|
||||||
br_multihash_init(&mhc);
|
ctx->eng.pad[64 + 0] = 0x03;
|
||||||
br_multihash_update(&mhc,
|
ctx->eng.pad[64 + 1] = 0x00;
|
||||||
ctx->eng.client_random, sizeof ctx->eng.client_random);
|
ctx->eng.pad[64 + 2] = curve;
|
||||||
br_multihash_update(&mhc,
|
ctx->eng.pad[64 + 3] = ctx->eng.ecdhe_point_len;
|
||||||
ctx->eng.server_random, sizeof ctx->eng.server_random);
|
memcpy(ctx->eng.pad + 64 + 4,
|
||||||
head[0] = 3;
|
|
||||||
head[1] = 0;
|
|
||||||
head[2] = curve;
|
|
||||||
head[3] = ctx->eng.ecdhe_point_len;
|
|
||||||
br_multihash_update(&mhc, head, sizeof head);
|
|
||||||
br_multihash_update(&mhc,
|
|
||||||
ctx->eng.ecdhe_point, ctx->eng.ecdhe_point_len);
|
ctx->eng.ecdhe_point, ctx->eng.ecdhe_point_len);
|
||||||
hash = ctx->sign_hash_id;
|
hv_len = 64 + 4 + ctx->eng.ecdhe_point_len;
|
||||||
if (hash) {
|
algo_id = ctx->sign_hash_id;
|
||||||
hv_len = br_multihash_out(&mhc, hash, ctx->eng.pad);
|
if (algo_id >= (unsigned)0xFF00) {
|
||||||
|
hv_len = hash_data(ctx, ctx->eng.pad, algo_id & 0xFF,
|
||||||
|
ctx->eng.pad, hv_len);
|
||||||
if (hv_len == 0) {
|
if (hv_len == 0) {
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
return -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (!br_multihash_out(&mhc, br_md5_ID, ctx->eng.pad)
|
|
||||||
|| !br_multihash_out(&mhc,
|
|
||||||
br_sha1_ID, ctx->eng.pad + 16))
|
|
||||||
{
|
|
||||||
return -BR_ERR_INVALID_ALGORITHM;
|
|
||||||
}
|
|
||||||
hv_len = 36;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sig_len = (*ctx->policy_vtable)->do_sign(ctx->policy_vtable,
|
sig_len = (*ctx->policy_vtable)->do_sign(ctx->policy_vtable,
|
||||||
hash, hv_len, ctx->eng.pad, sizeof ctx->eng.pad);
|
algo_id, ctx->eng.pad, hv_len, sizeof ctx->eng.pad);
|
||||||
return sig_len ? (int)sig_len : -BR_ERR_INVALID_ALGORITHM;
|
return sig_len ? (int)sig_len : -BR_ERR_INVALID_ALGORITHM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -509,7 +523,7 @@ cc: set-max-frag-len ( len -- ) {
|
||||||
\ Open extension value.
|
\ Open extension value.
|
||||||
read16 open-elt
|
read16 open-elt
|
||||||
|
|
||||||
read-list-sign-algos addr-hashes set16
|
read-list-sign-algos addr-hashes set32
|
||||||
|
|
||||||
\ Close extension value.
|
\ Close extension value.
|
||||||
close-elt ;
|
close-elt ;
|
||||||
|
|
@ -578,7 +592,7 @@ cc: call-policy-handler ( -- bool ) {
|
||||||
x = (*CTX->policy_vtable)->choose(
|
x = (*CTX->policy_vtable)->choose(
|
||||||
CTX->policy_vtable, CTX, &choices);
|
CTX->policy_vtable, CTX, &choices);
|
||||||
ENG->session.cipher_suite = choices.cipher_suite;
|
ENG->session.cipher_suite = choices.cipher_suite;
|
||||||
CTX->sign_hash_id = choices.hash_id;
|
CTX->sign_hash_id = choices.algo_id;
|
||||||
ENG->chain = choices.chain;
|
ENG->chain = choices.chain;
|
||||||
ENG->chain_len = choices.chain_len;
|
ENG->chain_len = choices.chain_len;
|
||||||
T0_PUSHi(-(x != 0));
|
T0_PUSHi(-(x != 0));
|
||||||
|
|
@ -714,7 +728,7 @@ cc: save-session ( -- ) {
|
||||||
\ -- client is reputed to know RSA and ECDSA, both with SHA-1
|
\ -- client is reputed to know RSA and ECDSA, both with SHA-1
|
||||||
\ -- the default elliptic curve is P-256 (secp256r1, id = 23)
|
\ -- the default elliptic curve is P-256 (secp256r1, id = 23)
|
||||||
0 addr-server_name set8
|
0 addr-server_name set8
|
||||||
0x404 addr-hashes set16
|
0x0404 addr-hashes set32
|
||||||
0x800000 addr-curves set32
|
0x800000 addr-curves set32
|
||||||
|
|
||||||
\ Process extensions, if any.
|
\ Process extensions, if any.
|
||||||
|
|
@ -813,8 +827,8 @@ cc: save-session ( -- ) {
|
||||||
\ Filter hash function support by what the server also supports.
|
\ Filter hash function support by what the server also supports.
|
||||||
\ If no common hash function remains with RSA and/or ECDSA, then
|
\ If no common hash function remains with RSA and/or ECDSA, then
|
||||||
\ the corresponding ECDHE suites are not possible.
|
\ the corresponding ECDHE suites are not possible.
|
||||||
supported-hash-functions drop 257 *
|
supported-hash-functions drop 257 * 0xFFFF0000 or
|
||||||
addr-hashes get16 and dup addr-hashes set16
|
addr-hashes get32 and dup addr-hashes set32
|
||||||
\ In 'can-ecdhe', bit 12 is set if ECDHE_RSA is possible, bit 13 is
|
\ In 'can-ecdhe', bit 12 is set if ECDHE_RSA is possible, bit 13 is
|
||||||
\ set if ECDHE_ECDSA is possible.
|
\ set if ECDHE_ECDSA is possible.
|
||||||
dup 0xFF and 0<> neg
|
dup 0xFF and 0<> neg
|
||||||
|
|
@ -1008,11 +1022,18 @@ cc: do-ecdhe-part1 ( curve -- len ) {
|
||||||
|
|
||||||
\ If TLS-1.2+, write hash and signature identifiers.
|
\ If TLS-1.2+, write hash and signature identifiers.
|
||||||
tls1.2+ if
|
tls1.2+ if
|
||||||
\ Hash identifier is in the sign_hash_id field.
|
\ sign_hash_id contains either a hash identifier,
|
||||||
addr-sign_hash_id get8 write8
|
\ or the complete 16-bit value to write.
|
||||||
\ 'use-rsa-ecdhe?' returns -1 for RSA, 0 for ECDSA.
|
addr-sign_hash_id get16
|
||||||
\ The byte on the wire shall be 1 for RSA, 3 for ECDSA.
|
dup 0xFF00 < if
|
||||||
addr-cipher_suite get16 use-rsa-ecdhe? 1 << 3 + write8
|
write16
|
||||||
|
else
|
||||||
|
0xFF and write8
|
||||||
|
\ 'use-rsa-ecdhe?' returns -1 for RSA, 0 for
|
||||||
|
\ ECDSA. The byte on the wire shall be 1 for RSA,
|
||||||
|
\ 3 for ECDSA.
|
||||||
|
addr-cipher_suite get16 use-rsa-ecdhe? 1 << 3 + write8
|
||||||
|
then
|
||||||
then
|
then
|
||||||
|
|
||||||
\ Signature.
|
\ Signature.
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ se_choose(const br_ssl_server_policy_class **pctx,
|
||||||
br_ssl_server_policy_ec_context *pc;
|
br_ssl_server_policy_ec_context *pc;
|
||||||
const br_suite_translated *st;
|
const br_suite_translated *st;
|
||||||
size_t u, st_num;
|
size_t u, st_num;
|
||||||
int hash_id;
|
unsigned hash_id;
|
||||||
|
|
||||||
pc = (br_ssl_server_policy_ec_context *)pctx;
|
pc = (br_ssl_server_policy_ec_context *)pctx;
|
||||||
st = br_ssl_server_get_client_suites(cc, &st_num);
|
st = br_ssl_server_get_client_suites(cc, &st_num);
|
||||||
|
|
@ -68,7 +68,7 @@ se_choose(const br_ssl_server_policy_class **pctx,
|
||||||
&& hash_id != 0)
|
&& hash_id != 0)
|
||||||
{
|
{
|
||||||
choices->cipher_suite = st[u][0];
|
choices->cipher_suite = st[u][0];
|
||||||
choices->hash_id = hash_id;
|
choices->algo_id = hash_id + 0xFF00;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -89,14 +89,15 @@ se_do_keyx(const br_ssl_server_policy_class **pctx,
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
se_do_sign(const br_ssl_server_policy_class **pctx,
|
se_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
int hash_id, size_t hv_len, unsigned char *data, size_t len)
|
unsigned algo_id, unsigned char *data, size_t hv_len, size_t len)
|
||||||
{
|
{
|
||||||
br_ssl_server_policy_ec_context *pc;
|
br_ssl_server_policy_ec_context *pc;
|
||||||
unsigned char hv[64];
|
unsigned char hv[64];
|
||||||
const br_hash_class *hc;
|
const br_hash_class *hc;
|
||||||
|
|
||||||
|
algo_id &= 0xFF;
|
||||||
pc = (br_ssl_server_policy_ec_context *)pctx;
|
pc = (br_ssl_server_policy_ec_context *)pctx;
|
||||||
hc = br_multihash_getimpl(pc->mhash, hash_id);
|
hc = br_multihash_getimpl(pc->mhash, algo_id);
|
||||||
if (hc == NULL) {
|
if (hc == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ sr_choose(const br_ssl_server_policy_class **pctx,
|
||||||
br_ssl_server_policy_rsa_context *pc;
|
br_ssl_server_policy_rsa_context *pc;
|
||||||
const br_suite_translated *st;
|
const br_suite_translated *st;
|
||||||
size_t u, st_num;
|
size_t u, st_num;
|
||||||
int hash_id;
|
unsigned hash_id;
|
||||||
|
|
||||||
pc = (br_ssl_server_policy_rsa_context *)pctx;
|
pc = (br_ssl_server_policy_rsa_context *)pctx;
|
||||||
st = br_ssl_server_get_client_suites(cc, &st_num);
|
st = br_ssl_server_get_client_suites(cc, &st_num);
|
||||||
|
|
@ -58,7 +58,7 @@ sr_choose(const br_ssl_server_policy_class **pctx,
|
||||||
&& hash_id != 0)
|
&& hash_id != 0)
|
||||||
{
|
{
|
||||||
choices->cipher_suite = st[u][0];
|
choices->cipher_suite = st[u][0];
|
||||||
choices->hash_id = hash_id;
|
choices->algo_id = hash_id + 0xFF00;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -110,7 +110,7 @@ static const unsigned char *HASH_OID[] = {
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
sr_do_sign(const br_ssl_server_policy_class **pctx,
|
sr_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
int hash_id, size_t hv_len, unsigned char *data, size_t len)
|
unsigned algo_id, unsigned char *data, size_t hv_len, size_t len)
|
||||||
{
|
{
|
||||||
br_ssl_server_policy_rsa_context *pc;
|
br_ssl_server_policy_rsa_context *pc;
|
||||||
unsigned char hv[64];
|
unsigned char hv[64];
|
||||||
|
|
@ -119,10 +119,11 @@ sr_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
|
|
||||||
pc = (br_ssl_server_policy_rsa_context *)pctx;
|
pc = (br_ssl_server_policy_rsa_context *)pctx;
|
||||||
memcpy(hv, data, hv_len);
|
memcpy(hv, data, hv_len);
|
||||||
if (hash_id == 0) {
|
algo_id &= 0xFF;
|
||||||
|
if (algo_id == 0) {
|
||||||
hash_oid = NULL;
|
hash_oid = NULL;
|
||||||
} else if (hash_id >= 2 && hash_id <= 6) {
|
} else if (algo_id >= 2 && algo_id <= 6) {
|
||||||
hash_oid = HASH_OID[hash_id - 2];
|
hash_oid = HASH_OID[algo_id - 2];
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,9 @@ get_hash_impl(int hash_id)
|
||||||
{
|
{
|
||||||
size_t u;
|
size_t u;
|
||||||
|
|
||||||
|
if (hash_id == 0) {
|
||||||
|
return &br_md5sha1_vtable;
|
||||||
|
}
|
||||||
for (u = 0; hash_functions[u].name; u ++) {
|
for (u = 0; hash_functions[u].name; u ++) {
|
||||||
const br_hash_class *hc;
|
const br_hash_class *hc;
|
||||||
int id;
|
int id;
|
||||||
|
|
|
||||||
|
|
@ -228,6 +228,8 @@ usage_server(void)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" -hf names add support for some hash functions (comma-separated)\n");
|
" -hf names add support for some hash functions (comma-separated)\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
" -cbhash test hashing in policy callback\n");
|
||||||
|
fprintf(stderr,
|
||||||
" -serverpref enforce server's preferences for cipher suites\n");
|
" -serverpref enforce server's preferences for cipher suites\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" -noreneg prohibit renegotiations\n");
|
" -noreneg prohibit renegotiations\n");
|
||||||
|
|
@ -245,6 +247,7 @@ typedef struct {
|
||||||
size_t chain_len;
|
size_t chain_len;
|
||||||
int cert_signer_algo;
|
int cert_signer_algo;
|
||||||
private_key *sk;
|
private_key *sk;
|
||||||
|
int cbhash;
|
||||||
} policy_context;
|
} policy_context;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -270,10 +273,10 @@ print_hashes(unsigned chashes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static unsigned
|
||||||
choose_hash(unsigned chashes)
|
choose_hash(unsigned chashes)
|
||||||
{
|
{
|
||||||
int hash_id;
|
unsigned hash_id;
|
||||||
|
|
||||||
for (hash_id = 6; hash_id >= 2; hash_id --) {
|
for (hash_id = 6; hash_id >= 2; hash_id --) {
|
||||||
if (((chashes >> hash_id) & 1) != 0) {
|
if (((chashes >> hash_id) & 1) != 0) {
|
||||||
|
|
@ -357,9 +360,21 @@ sp_choose(const br_ssl_server_policy_class **pctx,
|
||||||
if (br_ssl_engine_get_version(&cc->eng)
|
if (br_ssl_engine_get_version(&cc->eng)
|
||||||
< BR_TLS12)
|
< BR_TLS12)
|
||||||
{
|
{
|
||||||
choices->hash_id = 0;
|
if (pc->cbhash) {
|
||||||
|
choices->algo_id = 0x0001;
|
||||||
|
} else {
|
||||||
|
choices->algo_id = 0xFF00;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
choices->hash_id = choose_hash(chashes);
|
unsigned id;
|
||||||
|
|
||||||
|
id = choose_hash(chashes);
|
||||||
|
if (pc->cbhash) {
|
||||||
|
choices->algo_id =
|
||||||
|
(id << 8) + 0x01;
|
||||||
|
} else {
|
||||||
|
choices->algo_id = 0xFF00 + id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
goto choose_ok;
|
goto choose_ok;
|
||||||
}
|
}
|
||||||
|
|
@ -370,10 +385,23 @@ sp_choose(const br_ssl_server_policy_class **pctx,
|
||||||
if (br_ssl_engine_get_version(&cc->eng)
|
if (br_ssl_engine_get_version(&cc->eng)
|
||||||
< BR_TLS12)
|
< BR_TLS12)
|
||||||
{
|
{
|
||||||
choices->hash_id = br_sha1_ID;
|
if (pc->cbhash) {
|
||||||
|
choices->algo_id = 0x0203;
|
||||||
|
} else {
|
||||||
|
choices->algo_id =
|
||||||
|
0xFF00 + br_sha1_ID;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
choices->hash_id =
|
unsigned id;
|
||||||
choose_hash(chashes >> 8);
|
|
||||||
|
id = choose_hash(chashes >> 8);
|
||||||
|
if (pc->cbhash) {
|
||||||
|
choices->algo_id =
|
||||||
|
(id << 8) + 0x03;
|
||||||
|
} else {
|
||||||
|
choices->algo_id =
|
||||||
|
0xFF00 + id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
goto choose_ok;
|
goto choose_ok;
|
||||||
}
|
}
|
||||||
|
|
@ -434,13 +462,40 @@ sp_do_keyx(const br_ssl_server_policy_class **pctx,
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
sp_do_sign(const br_ssl_server_policy_class **pctx,
|
sp_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
int hash_id, size_t hv_len, unsigned char *data, size_t len)
|
unsigned algo_id, unsigned char *data, size_t hv_len, size_t len)
|
||||||
{
|
{
|
||||||
policy_context *pc;
|
policy_context *pc;
|
||||||
unsigned char hv[64];
|
unsigned char hv[64];
|
||||||
|
|
||||||
pc = (policy_context *)pctx;
|
pc = (policy_context *)pctx;
|
||||||
memcpy(hv, data, hv_len);
|
if (algo_id >= 0xFF00) {
|
||||||
|
algo_id &= 0xFF;
|
||||||
|
memcpy(hv, data, hv_len);
|
||||||
|
} else {
|
||||||
|
const br_hash_class *hc;
|
||||||
|
br_hash_compat_context zc;
|
||||||
|
|
||||||
|
if (pc->verbose) {
|
||||||
|
fprintf(stderr, "Callback hashing, algo = 0x%04X,"
|
||||||
|
" data_len = %lu\n",
|
||||||
|
algo_id, (unsigned long)hv_len);
|
||||||
|
}
|
||||||
|
algo_id >>= 8;
|
||||||
|
hc = get_hash_impl(algo_id);
|
||||||
|
if (hc == NULL) {
|
||||||
|
if (pc->verbose) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"ERROR: unsupported hash function %u\n",
|
||||||
|
algo_id);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hc->init(&zc.vtable);
|
||||||
|
hc->update(&zc.vtable, data, hv_len);
|
||||||
|
hc->out(&zc.vtable, hv);
|
||||||
|
hv_len = (hc->desc >> BR_HASHDESC_OUT_OFF)
|
||||||
|
& BR_HASHDESC_OUT_MASK;
|
||||||
|
}
|
||||||
switch (pc->sk->key_type) {
|
switch (pc->sk->key_type) {
|
||||||
size_t sig_len;
|
size_t sig_len;
|
||||||
uint32_t x;
|
uint32_t x;
|
||||||
|
|
@ -448,12 +503,12 @@ sp_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
const br_hash_class *hc;
|
const br_hash_class *hc;
|
||||||
|
|
||||||
case BR_KEYTYPE_RSA:
|
case BR_KEYTYPE_RSA:
|
||||||
hash_oid = get_hash_oid(hash_id);
|
hash_oid = get_hash_oid(algo_id);
|
||||||
if (hash_oid == NULL && hash_id != 0) {
|
if (hash_oid == NULL && algo_id != 0) {
|
||||||
if (pc->verbose) {
|
if (pc->verbose) {
|
||||||
fprintf(stderr, "ERROR: cannot RSA-sign with"
|
fprintf(stderr, "ERROR: cannot RSA-sign with"
|
||||||
" unknown hash function: %d\n",
|
" unknown hash function: %u\n",
|
||||||
hash_id);
|
algo_id);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -479,12 +534,12 @@ sp_do_sign(const br_ssl_server_policy_class **pctx,
|
||||||
return sig_len;
|
return sig_len;
|
||||||
|
|
||||||
case BR_KEYTYPE_EC:
|
case BR_KEYTYPE_EC:
|
||||||
hc = get_hash_impl(hash_id);
|
hc = get_hash_impl(algo_id);
|
||||||
if (hc == NULL) {
|
if (hc == NULL) {
|
||||||
if (pc->verbose) {
|
if (pc->verbose) {
|
||||||
fprintf(stderr, "ERROR: cannot ECDSA-sign with"
|
fprintf(stderr, "ERROR: cannot ECDSA-sign with"
|
||||||
" unknown hash function: %d\n",
|
" unknown hash function: %u\n",
|
||||||
hash_id);
|
algo_id);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -539,6 +594,7 @@ do_server(int argc, char *argv[])
|
||||||
size_t num_suites;
|
size_t num_suites;
|
||||||
uint16_t *suite_ids;
|
uint16_t *suite_ids;
|
||||||
unsigned hfuns;
|
unsigned hfuns;
|
||||||
|
int cbhash;
|
||||||
br_x509_certificate *chain;
|
br_x509_certificate *chain;
|
||||||
size_t chain_len;
|
size_t chain_len;
|
||||||
int cert_signer_algo;
|
int cert_signer_algo;
|
||||||
|
|
@ -567,6 +623,7 @@ do_server(int argc, char *argv[])
|
||||||
suites = NULL;
|
suites = NULL;
|
||||||
num_suites = 0;
|
num_suites = 0;
|
||||||
hfuns = 0;
|
hfuns = 0;
|
||||||
|
cbhash = 0;
|
||||||
suite_ids = NULL;
|
suite_ids = NULL;
|
||||||
chain = NULL;
|
chain = NULL;
|
||||||
chain_len = 0;
|
chain_len = 0;
|
||||||
|
|
@ -790,6 +847,8 @@ do_server(int argc, char *argv[])
|
||||||
goto server_exit_error;
|
goto server_exit_error;
|
||||||
}
|
}
|
||||||
hfuns |= x;
|
hfuns |= x;
|
||||||
|
} else if (eqstr(arg, "-cbhash")) {
|
||||||
|
cbhash = 1;
|
||||||
} else if (eqstr(arg, "-serverpref")) {
|
} else if (eqstr(arg, "-serverpref")) {
|
||||||
flags |= BR_OPT_ENFORCE_SERVER_PREFERENCES;
|
flags |= BR_OPT_ENFORCE_SERVER_PREFERENCES;
|
||||||
} else if (eqstr(arg, "-noreneg")) {
|
} else if (eqstr(arg, "-noreneg")) {
|
||||||
|
|
@ -1038,6 +1097,7 @@ do_server(int argc, char *argv[])
|
||||||
pc.chain_len = chain_len;
|
pc.chain_len = chain_len;
|
||||||
pc.cert_signer_algo = cert_signer_algo;
|
pc.cert_signer_algo = cert_signer_algo;
|
||||||
pc.sk = sk;
|
pc.sk = sk;
|
||||||
|
pc.cbhash = cbhash;
|
||||||
br_ssl_server_set_policy(&cc, &pc.vtable);
|
br_ssl_server_set_policy(&cc, &pc.vtable);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue