Compare commits
10 commits
69807a34fc
...
46f7dddce7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46f7dddce7 | ||
|
|
6a691e6995 | ||
|
|
d40d23b60c | ||
|
|
79b1a9996c | ||
|
|
b2ec2030e4 | ||
|
|
dda1f8a0c4 | ||
|
|
acc70b1be6 | ||
|
|
946f5bad76 | ||
|
|
252dba9149 | ||
|
|
15b3af72f3 |
15 changed files with 766 additions and 548 deletions
BIN
T0Comp.exe
BIN
T0Comp.exe
Binary file not shown.
|
|
@ -137,6 +137,10 @@
|
||||||
#include "bearssl_x509.h"
|
#include "bearssl_x509.h"
|
||||||
#include "bearssl_pem.h"
|
#include "bearssl_pem.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/** \brief Type for a configuration option.
|
/** \brief Type for a configuration option.
|
||||||
*
|
*
|
||||||
* A "configuration option" is a value that is selected when the BearSSL
|
* A "configuration option" is a value that is selected when the BearSSL
|
||||||
|
|
@ -167,4 +171,13 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
const br_config_option *br_get_config(void);
|
const br_config_option *br_get_config(void);
|
||||||
|
|
||||||
|
/* ======================================================================= */
|
||||||
|
|
||||||
|
/** \brief Version feature: support for time callback. */
|
||||||
|
#define BR_FEATURE_X509_TIME_CALLBACK 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -625,6 +625,52 @@ typedef struct {
|
||||||
|
|
||||||
} br_name_element;
|
} br_name_element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Callback for validity date checks.
|
||||||
|
*
|
||||||
|
* The function receives as parameter an arbitrary user-provided context,
|
||||||
|
* and the notBefore and notAfter dates specified in an X.509 certificate,
|
||||||
|
* both expressed as a number of days and a number of seconds:
|
||||||
|
*
|
||||||
|
* - Days are counted in a proleptic Gregorian calendar since
|
||||||
|
* January 1st, 0 AD. Year "0 AD" is the one that preceded "1 AD";
|
||||||
|
* it is also traditionally known as "1 BC".
|
||||||
|
*
|
||||||
|
* - Seconds are counted since midnight, from 0 to 86400 (a count of
|
||||||
|
* 86400 is possible only if a leap second happened).
|
||||||
|
*
|
||||||
|
* Each date and time is understood in the UTC time zone. The "Unix
|
||||||
|
* Epoch" (January 1st, 1970, 00:00 UTC) corresponds to days=719528 and
|
||||||
|
* seconds=0; the "Windows Epoch" (January 1st, 1601, 00:00 UTC) is
|
||||||
|
* days=584754, seconds=0.
|
||||||
|
*
|
||||||
|
* This function must return -1 if the current date is strictly before
|
||||||
|
* the "notBefore" time, or +1 if the current date is strictly after the
|
||||||
|
* "notAfter" time. If neither condition holds, then the function returns
|
||||||
|
* 0, which means that the current date falls within the validity range of
|
||||||
|
* the certificate. If the function returns a value distinct from -1, 0
|
||||||
|
* and +1, then this is interpreted as an unavailability of the current
|
||||||
|
* time, which normally ends the validation process with a
|
||||||
|
* `BR_ERR_X509_TIME_UNKNOWN` error.
|
||||||
|
*
|
||||||
|
* During path validation, this callback will be invoked for each
|
||||||
|
* considered X.509 certificate. Validation fails if any of the calls
|
||||||
|
* returns a non-zero value.
|
||||||
|
*
|
||||||
|
* The context value is an abritrary pointer set by the caller when
|
||||||
|
* configuring this callback.
|
||||||
|
*
|
||||||
|
* \param tctx context pointer.
|
||||||
|
* \param not_before_days notBefore date (days since Jan 1st, 0 AD).
|
||||||
|
* \param not_before_seconds notBefore time (seconds, at most 86400).
|
||||||
|
* \param not_after_days notAfter date (days since Jan 1st, 0 AD).
|
||||||
|
* \param not_after_seconds notAfter time (seconds, at most 86400).
|
||||||
|
* \return -1, 0 or +1.
|
||||||
|
*/
|
||||||
|
typedef int (*br_x509_time_check)(void *tctx,
|
||||||
|
uint32_t not_before_days, uint32_t not_before_seconds,
|
||||||
|
uint32_t not_after_days, uint32_t not_after_seconds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief The "minimal" X.509 engine structure.
|
* \brief The "minimal" X.509 engine structure.
|
||||||
*
|
*
|
||||||
|
|
@ -647,8 +693,8 @@ typedef struct {
|
||||||
uint32_t *rp;
|
uint32_t *rp;
|
||||||
const unsigned char *ip;
|
const unsigned char *ip;
|
||||||
} cpu;
|
} cpu;
|
||||||
uint32_t dp_stack[32];
|
uint32_t dp_stack[31];
|
||||||
uint32_t rp_stack[32];
|
uint32_t rp_stack[31];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Server name to match with the SAN / CN of the EE certificate. */
|
/* Server name to match with the SAN / CN of the EE certificate. */
|
||||||
|
|
@ -723,6 +769,12 @@ typedef struct {
|
||||||
br_name_element *name_elts;
|
br_name_element *name_elts;
|
||||||
size_t num_name_elts;
|
size_t num_name_elts;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Callback function (and context) to get the current date.
|
||||||
|
*/
|
||||||
|
void *itime_ctx;
|
||||||
|
br_x509_time_check itime;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Public key cryptography implementations (signature verification).
|
* Public key cryptography implementations (signature verification).
|
||||||
*/
|
*/
|
||||||
|
|
@ -853,7 +905,10 @@ void br_x509_minimal_init_full(br_x509_minimal_context *ctx,
|
||||||
* - Seconds are counted since midnight, from 0 to 86400 (a count of
|
* - Seconds are counted since midnight, from 0 to 86400 (a count of
|
||||||
* 86400 is possible only if a leap second happened).
|
* 86400 is possible only if a leap second happened).
|
||||||
*
|
*
|
||||||
* The validation date and time is understood in the UTC time zone.
|
* The validation date and time is understood in the UTC time zone. The
|
||||||
|
* "Unix Epoch" (January 1st, 1970, 00:00 UTC) corresponds to days=719528
|
||||||
|
* and seconds=0; the "Windows Epoch" (January 1st, 1601, 00:00 UTC) is
|
||||||
|
* days=584754, seconds=0.
|
||||||
*
|
*
|
||||||
* If the validation date and time are not explicitly set, but BearSSL
|
* If the validation date and time are not explicitly set, but BearSSL
|
||||||
* was compiled with support for the system clock on the underlying
|
* was compiled with support for the system clock on the underlying
|
||||||
|
|
@ -871,6 +926,28 @@ br_x509_minimal_set_time(br_x509_minimal_context *ctx,
|
||||||
{
|
{
|
||||||
ctx->days = days;
|
ctx->days = days;
|
||||||
ctx->seconds = seconds;
|
ctx->seconds = seconds;
|
||||||
|
ctx->itime = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the validity range callback function for the X.509
|
||||||
|
* "minimal" engine.
|
||||||
|
*
|
||||||
|
* The provided function will be invoked to check whether the validation
|
||||||
|
* date is within the validity range for a given X.509 certificate; a
|
||||||
|
* call will be issued for each considered certificate. The provided
|
||||||
|
* context pointer (itime_ctx) will be passed as first parameter to the
|
||||||
|
* callback.
|
||||||
|
*
|
||||||
|
* \param tctx context for callback invocation.
|
||||||
|
* \param cb callback function.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
br_x509_minimal_set_time_callback(br_x509_minimal_context *ctx,
|
||||||
|
void *itime_ctx, br_x509_time_check itime)
|
||||||
|
{
|
||||||
|
ctx->itime_ctx = itime_ctx;
|
||||||
|
ctx->itime = itime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -2039,12 +2039,13 @@ api_mul(unsigned char *G, size_t Glen,
|
||||||
p256_jacobian P;
|
p256_jacobian P;
|
||||||
|
|
||||||
(void)curve;
|
(void)curve;
|
||||||
|
if (Glen != 65) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = p256_decode(&P, G, Glen);
|
r = p256_decode(&P, G, Glen);
|
||||||
p256_mul(&P, x, xlen);
|
p256_mul(&P, x, xlen);
|
||||||
if (Glen >= 65) {
|
p256_to_affine(&P);
|
||||||
p256_to_affine(&P);
|
p256_encode(G, &P);
|
||||||
p256_encode(G, &P);
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2059,16 +2060,6 @@ api_mulgen(unsigned char *R,
|
||||||
p256_to_affine(&P);
|
p256_to_affine(&P);
|
||||||
p256_encode(R, &P);
|
p256_encode(R, &P);
|
||||||
return 65;
|
return 65;
|
||||||
|
|
||||||
/*
|
|
||||||
const unsigned char *G;
|
|
||||||
size_t Glen;
|
|
||||||
|
|
||||||
G = api_generator(curve, &Glen);
|
|
||||||
memcpy(R, G, Glen);
|
|
||||||
api_mul(R, Glen, x, xlen, curve);
|
|
||||||
return Glen;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
|
|
@ -2081,6 +2072,9 @@ api_muladd(unsigned char *A, const unsigned char *B, size_t len,
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
(void)curve;
|
(void)curve;
|
||||||
|
if (len != 65) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = p256_decode(&P, A, len);
|
r = p256_decode(&P, A, len);
|
||||||
p256_mul(&P, x, xlen);
|
p256_mul(&P, x, xlen);
|
||||||
if (B == NULL) {
|
if (B == NULL) {
|
||||||
|
|
|
||||||
|
|
@ -1384,12 +1384,13 @@ api_mul(unsigned char *G, size_t Glen,
|
||||||
p256_jacobian P;
|
p256_jacobian P;
|
||||||
|
|
||||||
(void)curve;
|
(void)curve;
|
||||||
|
if (Glen != 65) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = p256_decode(&P, G, Glen);
|
r = p256_decode(&P, G, Glen);
|
||||||
p256_mul(&P, x, xlen);
|
p256_mul(&P, x, xlen);
|
||||||
if (Glen >= 65) {
|
p256_to_affine(&P);
|
||||||
p256_to_affine(&P);
|
p256_encode(G, &P);
|
||||||
p256_encode(G, &P);
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1404,16 +1405,6 @@ api_mulgen(unsigned char *R,
|
||||||
p256_to_affine(&P);
|
p256_to_affine(&P);
|
||||||
p256_encode(R, &P);
|
p256_encode(R, &P);
|
||||||
return 65;
|
return 65;
|
||||||
|
|
||||||
/*
|
|
||||||
const unsigned char *G;
|
|
||||||
size_t Glen;
|
|
||||||
|
|
||||||
G = api_generator(curve, &Glen);
|
|
||||||
memcpy(R, G, Glen);
|
|
||||||
api_mul(R, Glen, x, xlen, curve);
|
|
||||||
return Glen;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
|
|
@ -1426,6 +1417,9 @@ api_muladd(unsigned char *A, const unsigned char *B, size_t len,
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
(void)curve;
|
(void)curve;
|
||||||
|
if (len != 65) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = p256_decode(&P, A, len);
|
r = p256_decode(&P, A, len);
|
||||||
p256_mul(&P, x, xlen);
|
p256_mul(&P, x, xlen);
|
||||||
if (B == NULL) {
|
if (B == NULL) {
|
||||||
|
|
|
||||||
|
|
@ -580,7 +580,7 @@ f256_final_reduce(uint64_t *a)
|
||||||
w = t[2] - cc;
|
w = t[2] - cc;
|
||||||
t[2] = w & MASK52;
|
t[2] = w & MASK52;
|
||||||
cc = w >> 63;
|
cc = w >> 63;
|
||||||
w = t[3] - BIT(36);
|
w = t[3] - BIT(36) - cc;
|
||||||
t[3] = w & MASK52;
|
t[3] = w & MASK52;
|
||||||
cc = w >> 63;
|
cc = w >> 63;
|
||||||
t[4] -= cc;
|
t[4] -= cc;
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,9 @@ f256_add(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
unsigned __int128 w;
|
unsigned __int128 w;
|
||||||
uint64_t t;
|
uint64_t t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Do the addition, with an extra carry in t.
|
||||||
|
*/
|
||||||
w = (unsigned __int128)a[0] + b[0];
|
w = (unsigned __int128)a[0] + b[0];
|
||||||
d[0] = (uint64_t)w;
|
d[0] = (uint64_t)w;
|
||||||
w = (unsigned __int128)a[1] + b[1] + (w >> 64);
|
w = (unsigned __int128)a[1] + b[1] + (w >> 64);
|
||||||
|
|
@ -110,7 +113,7 @@ f256_add(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
t = (uint64_t)(w >> 64);
|
t = (uint64_t)(w >> 64);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 2^256 = 2^224 - 2^192 - 2^96 + 1 in the field.
|
* Fold carry t, using: 2^256 = 2^224 - 2^192 - 2^96 + 1 mod p.
|
||||||
*/
|
*/
|
||||||
w = (unsigned __int128)d[0] + t;
|
w = (unsigned __int128)d[0] + t;
|
||||||
d[0] = (uint64_t)w;
|
d[0] = (uint64_t)w;
|
||||||
|
|
@ -119,8 +122,22 @@ f256_add(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
/* Here, carry "w >> 64" can only be 0 or -1 */
|
/* Here, carry "w >> 64" can only be 0 or -1 */
|
||||||
w = (unsigned __int128)d[2] - ((w >> 64) & 1);
|
w = (unsigned __int128)d[2] - ((w >> 64) & 1);
|
||||||
d[2] = (uint64_t)w;
|
d[2] = (uint64_t)w;
|
||||||
/* Again, carry is 0 or -1 */
|
/* Again, carry is 0 or -1. But there can be carry only if t = 1,
|
||||||
d[3] += (uint64_t)(w >> 64) + (t << 32) - t;
|
in which case the addition of (t << 32) - t is positive. */
|
||||||
|
w = (unsigned __int128)d[3] - ((w >> 64) & 1) + (t << 32) - t;
|
||||||
|
d[3] = (uint64_t)w;
|
||||||
|
t = (uint64_t)(w >> 64);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There can be an extra carry here, which we must fold again.
|
||||||
|
*/
|
||||||
|
w = (unsigned __int128)d[0] + t;
|
||||||
|
d[0] = (uint64_t)w;
|
||||||
|
w = (unsigned __int128)d[1] + (w >> 64) - (t << 32);
|
||||||
|
d[1] = (uint64_t)w;
|
||||||
|
w = (unsigned __int128)d[2] - ((w >> 64) & 1);
|
||||||
|
d[2] = (uint64_t)w;
|
||||||
|
d[3] += (t << 32) - t - (uint64_t)((w >> 64) & 1);
|
||||||
|
|
||||||
#elif BR_UMUL128
|
#elif BR_UMUL128
|
||||||
|
|
||||||
|
|
@ -140,6 +157,15 @@ f256_add(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
cc = _addcarry_u64(cc, d[0], 0, &d[0]);
|
cc = _addcarry_u64(cc, d[0], 0, &d[0]);
|
||||||
cc = _addcarry_u64(cc, d[1], -(t << 32), &d[1]);
|
cc = _addcarry_u64(cc, d[1], -(t << 32), &d[1]);
|
||||||
cc = _addcarry_u64(cc, d[2], -t, &d[2]);
|
cc = _addcarry_u64(cc, d[2], -t, &d[2]);
|
||||||
|
cc = _addcarry_u64(cc, d[3], (t << 32) - (t << 1), &d[3]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have to do it again if there still is a carry.
|
||||||
|
*/
|
||||||
|
t = cc;
|
||||||
|
cc = _addcarry_u64(cc, d[0], 0, &d[0]);
|
||||||
|
cc = _addcarry_u64(cc, d[1], -(t << 32), &d[1]);
|
||||||
|
cc = _addcarry_u64(cc, d[2], -t, &d[2]);
|
||||||
(void)_addcarry_u64(cc, d[3], (t << 32) - (t << 1), &d[3]);
|
(void)_addcarry_u64(cc, d[3], (t << 32) - (t << 1), &d[3]);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -167,6 +193,7 @@ f256_sub(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
t = (uint64_t)(w >> 64) & 1;
|
t = (uint64_t)(w >> 64) & 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* If there is a borrow (t = 1), then we must add the modulus
|
||||||
* p = 2^256 - 2^224 + 2^192 + 2^96 - 1.
|
* p = 2^256 - 2^224 + 2^192 + 2^96 - 1.
|
||||||
*/
|
*/
|
||||||
w = (unsigned __int128)d[0] - t;
|
w = (unsigned __int128)d[0] - t;
|
||||||
|
|
@ -177,6 +204,20 @@ f256_sub(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
w = (unsigned __int128)d[2] + (w >> 64);
|
w = (unsigned __int128)d[2] + (w >> 64);
|
||||||
d[2] = (uint64_t)w;
|
d[2] = (uint64_t)w;
|
||||||
/* Again, carry is 0 or +1 */
|
/* Again, carry is 0 or +1 */
|
||||||
|
w = (unsigned __int128)d[3] + (w >> 64) - (t << 32) + t;
|
||||||
|
d[3] = (uint64_t)w;
|
||||||
|
t = (uint64_t)(w >> 64) & 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There may be again a borrow, in which case we must add the
|
||||||
|
* modulus again.
|
||||||
|
*/
|
||||||
|
w = (unsigned __int128)d[0] - t;
|
||||||
|
d[0] = (uint64_t)w;
|
||||||
|
w = (unsigned __int128)d[1] + (t << 32) - ((w >> 64) & 1);
|
||||||
|
d[1] = (uint64_t)w;
|
||||||
|
w = (unsigned __int128)d[2] + (w >> 64);
|
||||||
|
d[2] = (uint64_t)w;
|
||||||
d[3] += (uint64_t)(w >> 64) - (t << 32) + t;
|
d[3] += (uint64_t)(w >> 64) - (t << 32) + t;
|
||||||
|
|
||||||
#elif BR_UMUL128
|
#elif BR_UMUL128
|
||||||
|
|
@ -190,13 +231,23 @@ f256_sub(uint64_t *d, const uint64_t *a, const uint64_t *b)
|
||||||
cc = _subborrow_u64(cc, a[3], b[3], &d[3]);
|
cc = _subborrow_u64(cc, a[3], b[3], &d[3]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there is a carry, then we need to add p.
|
* If there is a borrow, then we need to add p. We (virtually)
|
||||||
|
* add 2^256, then subtract 2^256 - p.
|
||||||
*/
|
*/
|
||||||
t = cc;
|
t = cc;
|
||||||
cc = _addcarry_u64(0, d[0], -t, &d[0]);
|
cc = _subborrow_u64(0, d[0], t, &d[0]);
|
||||||
cc = _addcarry_u64(cc, d[1], (-t) >> 32, &d[1]);
|
cc = _subborrow_u64(cc, d[1], -(t << 32), &d[1]);
|
||||||
cc = _addcarry_u64(cc, d[2], 0, &d[2]);
|
cc = _subborrow_u64(cc, d[2], -t, &d[2]);
|
||||||
(void)_addcarry_u64(cc, d[3], t - (t << 32), &d[3]);
|
cc = _subborrow_u64(cc, d[3], (t << 32) - (t << 1), &d[3]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there still is a borrow, then we need to add p again.
|
||||||
|
*/
|
||||||
|
t = cc;
|
||||||
|
cc = _subborrow_u64(0, d[0], t, &d[0]);
|
||||||
|
cc = _subborrow_u64(cc, d[1], -(t << 32), &d[1]);
|
||||||
|
cc = _subborrow_u64(cc, d[2], -t, &d[2]);
|
||||||
|
(void)_subborrow_u64(cc, d[3], (t << 32) - (t << 1), &d[3]);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -733,11 +733,12 @@ api_mul(unsigned char *G, size_t Glen,
|
||||||
jacobian P;
|
jacobian P;
|
||||||
|
|
||||||
cc = id_to_curve(curve);
|
cc = id_to_curve(curve);
|
||||||
|
if (Glen != cc->point_len) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = point_decode(&P, G, Glen, cc);
|
r = point_decode(&P, G, Glen, cc);
|
||||||
point_mul(&P, x, xlen, cc);
|
point_mul(&P, x, xlen, cc);
|
||||||
if (Glen == cc->point_len) {
|
point_encode(G, &P, cc);
|
||||||
point_encode(G, &P, cc);
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -770,6 +771,9 @@ api_muladd(unsigned char *A, const unsigned char *B, size_t len,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cc = id_to_curve(curve);
|
cc = id_to_curve(curve);
|
||||||
|
if (len != cc->point_len) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = point_decode(&P, A, len, cc);
|
r = point_decode(&P, A, len, cc);
|
||||||
if (B == NULL) {
|
if (B == NULL) {
|
||||||
size_t Glen;
|
size_t Glen;
|
||||||
|
|
|
||||||
|
|
@ -107,15 +107,16 @@ typedef struct {
|
||||||
const uint32_t *b;
|
const uint32_t *b;
|
||||||
const uint32_t *R2;
|
const uint32_t *R2;
|
||||||
uint32_t p0i;
|
uint32_t p0i;
|
||||||
|
size_t point_len;
|
||||||
} curve_params;
|
} curve_params;
|
||||||
|
|
||||||
static inline const curve_params *
|
static inline const curve_params *
|
||||||
id_to_curve(int curve)
|
id_to_curve(int curve)
|
||||||
{
|
{
|
||||||
static const curve_params pp[] = {
|
static const curve_params pp[] = {
|
||||||
{ P256_P, P256_B, P256_R2, 0x00000001 },
|
{ P256_P, P256_B, P256_R2, 0x00000001, 65 },
|
||||||
{ P384_P, P384_B, P384_R2, 0x00000001 },
|
{ P384_P, P384_B, P384_R2, 0x00000001, 97 },
|
||||||
{ P521_P, P521_B, P521_R2, 0x00000001 }
|
{ P521_P, P521_B, P521_R2, 0x00000001, 133 }
|
||||||
};
|
};
|
||||||
|
|
||||||
return &pp[curve - BR_EC_secp256r1];
|
return &pp[curve - BR_EC_secp256r1];
|
||||||
|
|
@ -734,6 +735,9 @@ api_mul(unsigned char *G, size_t Glen,
|
||||||
jacobian P;
|
jacobian P;
|
||||||
|
|
||||||
cc = id_to_curve(curve);
|
cc = id_to_curve(curve);
|
||||||
|
if (Glen != cc->point_len) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = point_decode(&P, G, Glen, cc);
|
r = point_decode(&P, G, Glen, cc);
|
||||||
point_mul(&P, x, xlen, cc);
|
point_mul(&P, x, xlen, cc);
|
||||||
point_encode(G, &P, cc);
|
point_encode(G, &P, cc);
|
||||||
|
|
@ -769,6 +773,9 @@ api_muladd(unsigned char *A, const unsigned char *B, size_t len,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cc = id_to_curve(curve);
|
cc = id_to_curve(curve);
|
||||||
|
if (len != cc->point_len) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = point_decode(&P, A, len, cc);
|
r = point_decode(&P, A, len, cc);
|
||||||
if (B == NULL) {
|
if (B == NULL) {
|
||||||
size_t Glen;
|
size_t Glen;
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ br_rsa_pss_sig_unpad(const br_hash_class *hf_data,
|
||||||
* in the string.
|
* in the string.
|
||||||
*/
|
*/
|
||||||
for (u = 0; u < hash_len; u ++) {
|
for (u = 0; u < hash_len; u ++) {
|
||||||
r |= tmp[u] ^ x[(xlen - salt_len - 1) + u];
|
r |= tmp[u] ^ x[(xlen - hash_len - 1) + u];
|
||||||
}
|
}
|
||||||
|
|
||||||
return EQ0(r);
|
return EQ0(r);
|
||||||
|
|
|
||||||
|
|
@ -1232,6 +1232,21 @@ void
|
||||||
br_ssl_engine_close(br_ssl_engine_context *cc)
|
br_ssl_engine_close(br_ssl_engine_context *cc)
|
||||||
{
|
{
|
||||||
if (!br_ssl_engine_closed(cc)) {
|
if (!br_ssl_engine_closed(cc)) {
|
||||||
|
/*
|
||||||
|
* If we are not already closed, then we need to
|
||||||
|
* initiate the closure. Once closing, any incoming
|
||||||
|
* application data is discarded; we should also discard
|
||||||
|
* application data which is already there but has not
|
||||||
|
* been acknowledged by the application yet (this mimics
|
||||||
|
* usual semantics on BSD sockets: you cannot read()
|
||||||
|
* once you called close(), even if there was some
|
||||||
|
* unread data already buffered).
|
||||||
|
*/
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (br_ssl_engine_recvapp_buf(cc, &len) != NULL && len != 0) {
|
||||||
|
br_ssl_engine_recvapp_ack(cc, len);
|
||||||
|
}
|
||||||
jump_handshake(cc, 1);
|
jump_handshake(cc, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ cbc_decrypt(br_sslrec_in_cbc_context *cc,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use the last decrypted byte to compute the actual payload
|
* Use the last decrypted byte to compute the actual payload
|
||||||
* length. Take care not to underflow (we use unsigned types).
|
* length. Take care not to overflow (we use unsigned types).
|
||||||
*/
|
*/
|
||||||
pad_len = buf[max_len];
|
pad_len = buf[max_len];
|
||||||
good = LE(pad_len, (uint32_t)(max_len - min_len));
|
good = LE(pad_len, (uint32_t)(max_len - min_len));
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ void br_x509_minimal_run(void *t0ctx);
|
||||||
* -- Extensions: extension values are processed in due order.
|
* -- Extensions: extension values are processed in due order.
|
||||||
*
|
*
|
||||||
* -- Basic Constraints: for all certificates except EE, must be
|
* -- Basic Constraints: for all certificates except EE, must be
|
||||||
* present, indicate a CA, and have a path legnth compatible with
|
* present, indicate a CA, and have a path length compatible with
|
||||||
* the chain length so far.
|
* the chain length so far.
|
||||||
*
|
*
|
||||||
* -- Key Usage: for the EE, if present, must allow signatures
|
* -- Key Usage: for the EE, if present, must allow signatures
|
||||||
|
|
@ -448,7 +448,7 @@ static const unsigned char t0_datablock[] = {
|
||||||
static const unsigned char t0_codeblock[] = {
|
static const unsigned char t0_codeblock[] = {
|
||||||
0x00, 0x01, 0x00, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01,
|
0x00, 0x01, 0x00, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x11, 0x00, 0x00, 0x01, 0x01, 0x09, 0x00, 0x00, 0x01, 0x01, 0x0A,
|
0x00, 0x11, 0x00, 0x00, 0x01, 0x01, 0x09, 0x00, 0x00, 0x01, 0x01, 0x0A,
|
||||||
0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x01,
|
0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x01,
|
||||||
T0_INT1(BR_ERR_X509_BAD_BOOLEAN), 0x00, 0x00, 0x01,
|
T0_INT1(BR_ERR_X509_BAD_BOOLEAN), 0x00, 0x00, 0x01,
|
||||||
T0_INT1(BR_ERR_X509_BAD_DN), 0x00, 0x00, 0x01,
|
T0_INT1(BR_ERR_X509_BAD_DN), 0x00, 0x00, 0x01,
|
||||||
T0_INT1(BR_ERR_X509_BAD_SERVER_NAME), 0x00, 0x00, 0x01,
|
T0_INT1(BR_ERR_X509_BAD_SERVER_NAME), 0x00, 0x00, 0x01,
|
||||||
|
|
@ -486,227 +486,224 @@ static const unsigned char t0_codeblock[] = {
|
||||||
T0_INT2(offsetof(CONTEXT_NAME, next_dn_hash)), 0x00, 0x00, 0x01,
|
T0_INT2(offsetof(CONTEXT_NAME, next_dn_hash)), 0x00, 0x00, 0x01,
|
||||||
T0_INT2(offsetof(CONTEXT_NAME, num_certs)), 0x00, 0x00, 0x01,
|
T0_INT2(offsetof(CONTEXT_NAME, num_certs)), 0x00, 0x00, 0x01,
|
||||||
T0_INT2(offsetof(CONTEXT_NAME, pad)), 0x00, 0x00, 0x01,
|
T0_INT2(offsetof(CONTEXT_NAME, pad)), 0x00, 0x00, 0x01,
|
||||||
T0_INT2(offsetof(CONTEXT_NAME, saved_dn_hash)), 0x00, 0x00, 0xC9, 0x71,
|
T0_INT2(offsetof(CONTEXT_NAME, saved_dn_hash)), 0x00, 0x00, 0x01, 0x80,
|
||||||
0x00, 0x00, 0x01, 0x80, 0x73, 0x00, 0x00, 0x01, 0x80, 0x7C, 0x00, 0x00,
|
0x73, 0x00, 0x00, 0x01, 0x80, 0x7C, 0x00, 0x00, 0x01, 0x81, 0x02, 0x00,
|
||||||
0x01, 0x81, 0x02, 0x00, 0x00, 0x92, 0x05, 0x05, 0x34, 0x42, 0x01, 0x00,
|
0x00, 0x8F, 0x05, 0x05, 0x33, 0x41, 0x01, 0x00, 0x00, 0x33, 0x01, 0x0A,
|
||||||
0x00, 0x34, 0x01, 0x0A, 0x0E, 0x09, 0x01, 0x9A, 0xFF, 0xB8, 0x00, 0x0A,
|
0x0E, 0x09, 0x01, 0x9A, 0xFF, 0xB8, 0x00, 0x0A, 0x00, 0x00, 0x01, 0x82,
|
||||||
0x00, 0x00, 0x01, 0x82, 0x19, 0x00, 0x00, 0x01, 0x82, 0x01, 0x00, 0x00,
|
0x19, 0x00, 0x00, 0x01, 0x82, 0x01, 0x00, 0x00, 0x01, 0x81, 0x68, 0x00,
|
||||||
0x01, 0x81, 0x68, 0x00, 0x04, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x03,
|
0x02, 0x03, 0x00, 0x03, 0x01, 0x26, 0x02, 0x01, 0x13, 0x3A, 0x02, 0x00,
|
||||||
0x03, 0x02, 0x03, 0x02, 0x01, 0x11, 0x06, 0x07, 0x02, 0x02, 0x02, 0x00,
|
0x0F, 0x15, 0x00, 0x00, 0x01, 0x81, 0x74, 0x00, 0x00, 0x05, 0x02, 0x51,
|
||||||
0x0D, 0x04, 0x05, 0x02, 0x03, 0x02, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x00,
|
0x29, 0x00, 0x00, 0x06, 0x02, 0x52, 0x29, 0x00, 0x00, 0x01, 0x10, 0x74,
|
||||||
0x03, 0x01, 0x25, 0x02, 0x01, 0x13, 0x3B, 0x02, 0x00, 0x0F, 0x15, 0x00,
|
0x00, 0x00, 0x11, 0x05, 0x02, 0x55, 0x29, 0x71, 0x00, 0x00, 0x11, 0x05,
|
||||||
0x00, 0x01, 0x81, 0x74, 0x00, 0x00, 0x05, 0x02, 0x52, 0x28, 0x00, 0x00,
|
0x02, 0x55, 0x29, 0x72, 0x00, 0x00, 0x06, 0x02, 0x4B, 0x29, 0x00, 0x00,
|
||||||
0x06, 0x02, 0x53, 0x28, 0x00, 0x00, 0x01, 0x10, 0x77, 0x00, 0x00, 0x11,
|
0x01, 0x82, 0x11, 0x00, 0x00, 0x26, 0x21, 0x01, 0x08, 0x0E, 0x3A, 0x3F,
|
||||||
0x05, 0x02, 0x56, 0x28, 0x74, 0x00, 0x00, 0x11, 0x05, 0x02, 0x56, 0x28,
|
0x21, 0x09, 0x00, 0x0B, 0x03, 0x00, 0x5A, 0x2B, 0xAC, 0x38, 0xAC, 0xB0,
|
||||||
0x75, 0x00, 0x00, 0x06, 0x02, 0x4C, 0x28, 0x00, 0x00, 0x01, 0x82, 0x11,
|
0x26, 0x01, 0x20, 0x11, 0x06, 0x11, 0x25, 0x71, 0xAA, 0xB0, 0x01, 0x02,
|
||||||
0x00, 0x00, 0x25, 0x20, 0x01, 0x08, 0x0E, 0x3B, 0x40, 0x20, 0x09, 0x00,
|
0x75, 0xAD, 0x01, 0x02, 0x12, 0x06, 0x02, 0x56, 0x29, 0x76, 0xB0, 0x01,
|
||||||
0x09, 0x03, 0x00, 0x5B, 0x2B, 0xAF, 0x39, 0xAF, 0xB3, 0x25, 0x01, 0x20,
|
0x02, 0x75, 0xAB, 0xAC, 0xBF, 0x99, 0x64, 0x60, 0x22, 0x16, 0xAC, 0xA4,
|
||||||
0x11, 0x06, 0x11, 0x24, 0x74, 0xAD, 0xB3, 0x01, 0x02, 0x78, 0xB0, 0x01,
|
0x03, 0x01, 0x03, 0x02, 0xA4, 0x02, 0x02, 0x02, 0x01, 0x19, 0x06, 0x02,
|
||||||
0x02, 0x12, 0x06, 0x02, 0x57, 0x28, 0x79, 0xB3, 0x01, 0x02, 0x78, 0xAE,
|
0x4A, 0x29, 0x76, 0x02, 0x00, 0x06, 0x05, 0x9A, 0x03, 0x03, 0x04, 0x09,
|
||||||
0xAF, 0xC2, 0x9C, 0x65, 0x61, 0x21, 0x16, 0xAF, 0xA7, 0x29, 0x69, 0x06,
|
0x99, 0x60, 0x67, 0x22, 0x28, 0x05, 0x02, 0x49, 0x29, 0x67, 0x64, 0x22,
|
||||||
0x02, 0x4B, 0x28, 0xA7, 0x29, 0x71, 0x06, 0x02, 0x4B, 0x28, 0x79, 0x02,
|
0x16, 0xAC, 0xAC, 0x9B, 0x05, 0x02, 0x56, 0x29, 0xB9, 0x27, 0x06, 0x27,
|
||||||
0x00, 0x06, 0x05, 0x9D, 0x03, 0x01, 0x04, 0x09, 0x9C, 0x61, 0x68, 0x21,
|
0xBF, 0xA1, 0xAC, 0x62, 0xA7, 0x03, 0x05, 0x62, 0x3A, 0x02, 0x05, 0x09,
|
||||||
0x27, 0x05, 0x02, 0x4A, 0x28, 0x68, 0x65, 0x21, 0x16, 0xAF, 0xAF, 0x9E,
|
0x3A, 0x02, 0x05, 0x0A, 0xA7, 0x03, 0x06, 0x76, 0x63, 0x2A, 0x01, 0x81,
|
||||||
0x05, 0x02, 0x57, 0x28, 0xBC, 0x26, 0x06, 0x27, 0xC2, 0xA4, 0xAF, 0x63,
|
0x00, 0x09, 0x02, 0x05, 0x12, 0x06, 0x02, 0x57, 0x29, 0x76, 0x59, 0x03,
|
||||||
0xAA, 0x03, 0x03, 0x63, 0x3B, 0x02, 0x03, 0x09, 0x3B, 0x02, 0x03, 0x0A,
|
0x04, 0x04, 0x3A, 0x85, 0x27, 0x06, 0x34, 0x9B, 0x05, 0x02, 0x56, 0x29,
|
||||||
0xAA, 0x03, 0x04, 0x79, 0x64, 0x2A, 0x01, 0x81, 0x00, 0x09, 0x02, 0x03,
|
0x68, 0x27, 0x06, 0x04, 0x01, 0x17, 0x04, 0x12, 0x69, 0x27, 0x06, 0x04,
|
||||||
0x12, 0x06, 0x02, 0x58, 0x28, 0x79, 0x5A, 0x03, 0x02, 0x04, 0x3A, 0x88,
|
0x01, 0x18, 0x04, 0x0A, 0x6A, 0x27, 0x06, 0x04, 0x01, 0x19, 0x04, 0x02,
|
||||||
0x26, 0x06, 0x34, 0x9E, 0x05, 0x02, 0x57, 0x28, 0x6A, 0x26, 0x06, 0x04,
|
0x56, 0x29, 0x03, 0x07, 0x76, 0xA1, 0x26, 0x03, 0x08, 0x26, 0x62, 0x33,
|
||||||
0x01, 0x17, 0x04, 0x12, 0x6B, 0x26, 0x06, 0x04, 0x01, 0x18, 0x04, 0x0A,
|
0x0D, 0x06, 0x02, 0x4F, 0x29, 0xA2, 0x58, 0x03, 0x04, 0x04, 0x02, 0x56,
|
||||||
0x6C, 0x26, 0x06, 0x04, 0x01, 0x19, 0x04, 0x02, 0x57, 0x28, 0x03, 0x05,
|
0x29, 0x76, 0x02, 0x00, 0x06, 0x21, 0x02, 0x04, 0x59, 0x30, 0x11, 0x06,
|
||||||
0x79, 0xA4, 0x25, 0x03, 0x06, 0x25, 0x63, 0x34, 0x0D, 0x06, 0x02, 0x50,
|
0x08, 0x25, 0x02, 0x05, 0x02, 0x06, 0x1E, 0x04, 0x10, 0x58, 0x30, 0x11,
|
||||||
0x28, 0xA5, 0x59, 0x03, 0x02, 0x04, 0x02, 0x57, 0x28, 0x79, 0x02, 0x00,
|
0x06, 0x08, 0x25, 0x02, 0x07, 0x02, 0x08, 0x1D, 0x04, 0x03, 0x56, 0x29,
|
||||||
0x06, 0x21, 0x02, 0x02, 0x5A, 0x30, 0x11, 0x06, 0x08, 0x24, 0x02, 0x03,
|
0x25, 0x04, 0x24, 0x02, 0x04, 0x59, 0x30, 0x11, 0x06, 0x08, 0x25, 0x02,
|
||||||
0x02, 0x04, 0x1D, 0x04, 0x10, 0x59, 0x30, 0x11, 0x06, 0x08, 0x24, 0x02,
|
0x05, 0x02, 0x06, 0x24, 0x04, 0x10, 0x58, 0x30, 0x11, 0x06, 0x08, 0x25,
|
||||||
0x05, 0x02, 0x06, 0x1C, 0x04, 0x03, 0x57, 0x28, 0x24, 0x04, 0x24, 0x02,
|
0x02, 0x07, 0x02, 0x08, 0x23, 0x04, 0x03, 0x56, 0x29, 0x25, 0x26, 0x06,
|
||||||
0x02, 0x5A, 0x30, 0x11, 0x06, 0x08, 0x24, 0x02, 0x03, 0x02, 0x04, 0x23,
|
0x01, 0x29, 0x25, 0x01, 0x00, 0x03, 0x09, 0xB1, 0x01, 0x21, 0x8C, 0x01,
|
||||||
0x04, 0x10, 0x59, 0x30, 0x11, 0x06, 0x08, 0x24, 0x02, 0x05, 0x02, 0x06,
|
0x22, 0x8C, 0x26, 0x01, 0x23, 0x11, 0x06, 0x81, 0x26, 0x25, 0x71, 0xAA,
|
||||||
0x22, 0x04, 0x03, 0x57, 0x28, 0x24, 0x25, 0x06, 0x01, 0x28, 0x24, 0x01,
|
0xAC, 0x26, 0x06, 0x81, 0x1A, 0x01, 0x00, 0x03, 0x0A, 0xAC, 0x9B, 0x25,
|
||||||
0x00, 0x03, 0x07, 0xB4, 0x01, 0x21, 0x8F, 0x01, 0x22, 0x8F, 0x25, 0x01,
|
0xB0, 0x26, 0x01, 0x01, 0x11, 0x06, 0x04, 0xA3, 0x03, 0x0A, 0xB0, 0x01,
|
||||||
0x23, 0x11, 0x06, 0x81, 0x26, 0x24, 0x74, 0xAD, 0xAF, 0x25, 0x06, 0x81,
|
0x04, 0x75, 0xAA, 0x6E, 0x27, 0x06, 0x0F, 0x02, 0x00, 0x06, 0x03, 0xC0,
|
||||||
0x1A, 0x01, 0x00, 0x03, 0x08, 0xAF, 0x9E, 0x24, 0xB3, 0x25, 0x01, 0x01,
|
0x04, 0x05, 0x96, 0x01, 0x7F, 0x03, 0x09, 0x04, 0x80, 0x6C, 0x8E, 0x27,
|
||||||
0x11, 0x06, 0x04, 0xA6, 0x03, 0x08, 0xB3, 0x01, 0x04, 0x78, 0xAD, 0x70,
|
0x06, 0x06, 0x02, 0x00, 0x98, 0x04, 0x80, 0x62, 0xC2, 0x27, 0x06, 0x11,
|
||||||
0x26, 0x06, 0x0F, 0x02, 0x00, 0x06, 0x03, 0xC3, 0x04, 0x05, 0x99, 0x01,
|
0x02, 0x00, 0x06, 0x09, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x03, 0x04,
|
||||||
0x7F, 0x03, 0x07, 0x04, 0x80, 0x6C, 0x91, 0x26, 0x06, 0x06, 0x02, 0x00,
|
0x01, 0xC0, 0x04, 0x80, 0x4D, 0x70, 0x27, 0x06, 0x0A, 0x02, 0x0A, 0x06,
|
||||||
0x9B, 0x04, 0x80, 0x62, 0xC5, 0x26, 0x06, 0x11, 0x02, 0x00, 0x06, 0x09,
|
0x03, 0x97, 0x04, 0x01, 0xC0, 0x04, 0x3F, 0x6D, 0x27, 0x06, 0x03, 0xC0,
|
||||||
0x01, 0x00, 0x03, 0x01, 0x98, 0x03, 0x01, 0x04, 0x01, 0xC3, 0x04, 0x80,
|
0x04, 0x38, 0xC5, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x31, 0x8D, 0x27, 0x06,
|
||||||
0x4D, 0x73, 0x26, 0x06, 0x0A, 0x02, 0x08, 0x06, 0x03, 0x9A, 0x04, 0x01,
|
0x03, 0xC0, 0x04, 0x2A, 0xC3, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x23, 0x77,
|
||||||
0xC3, 0x04, 0x3F, 0x6F, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x38, 0xC8, 0x26,
|
0x27, 0x06, 0x03, 0xC0, 0x04, 0x1C, 0x82, 0x27, 0x06, 0x03, 0xC0, 0x04,
|
||||||
0x06, 0x03, 0xC3, 0x04, 0x31, 0x90, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x2A,
|
0x15, 0x6C, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x0E, 0xC4, 0x27, 0x06, 0x03,
|
||||||
0xC6, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x23, 0x7A, 0x26, 0x06, 0x03, 0xC3,
|
0xC0, 0x04, 0x07, 0x02, 0x0A, 0x06, 0x02, 0x48, 0x29, 0xC0, 0x76, 0x76,
|
||||||
0x04, 0x1C, 0x85, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x15, 0x6E, 0x26, 0x06,
|
0x04, 0xFE, 0x62, 0x76, 0x76, 0x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02,
|
||||||
0x03, 0xC3, 0x04, 0x0E, 0xC7, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x07, 0x02,
|
0x55, 0x29, 0x25, 0x76, 0x39, 0x02, 0x00, 0x06, 0x08, 0x02, 0x03, 0x3B,
|
||||||
0x08, 0x06, 0x02, 0x49, 0x28, 0xC3, 0x79, 0x79, 0x04, 0xFE, 0x62, 0x79,
|
0x2F, 0x05, 0x02, 0x44, 0x29, 0x02, 0x00, 0x06, 0x01, 0x17, 0x02, 0x00,
|
||||||
0x79, 0x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02, 0x56, 0x28, 0x24, 0x79,
|
0x02, 0x09, 0x2F, 0x05, 0x02, 0x50, 0x29, 0xB0, 0x73, 0xAA, 0x9B, 0x06,
|
||||||
0x3A, 0x02, 0x00, 0x06, 0x08, 0x02, 0x01, 0x3C, 0x2F, 0x05, 0x02, 0x45,
|
0x80, 0x77, 0xBA, 0x27, 0x06, 0x07, 0x01, 0x02, 0x59, 0x87, 0x04, 0x80,
|
||||||
0x28, 0x02, 0x00, 0x06, 0x01, 0x17, 0x02, 0x00, 0x02, 0x07, 0x2F, 0x05,
|
0x5E, 0xBB, 0x27, 0x06, 0x07, 0x01, 0x03, 0x59, 0x88, 0x04, 0x80, 0x53,
|
||||||
0x02, 0x51, 0x28, 0xB3, 0x76, 0xAD, 0x9E, 0x06, 0x80, 0x77, 0xBD, 0x26,
|
0xBC, 0x27, 0x06, 0x07, 0x01, 0x04, 0x59, 0x89, 0x04, 0x80, 0x48, 0xBD,
|
||||||
0x06, 0x07, 0x01, 0x02, 0x5A, 0x8A, 0x04, 0x80, 0x5E, 0xBE, 0x26, 0x06,
|
0x27, 0x06, 0x06, 0x01, 0x05, 0x59, 0x8A, 0x04, 0x3E, 0xBE, 0x27, 0x06,
|
||||||
0x07, 0x01, 0x03, 0x5A, 0x8B, 0x04, 0x80, 0x53, 0xBF, 0x26, 0x06, 0x07,
|
0x06, 0x01, 0x06, 0x59, 0x8B, 0x04, 0x34, 0x7C, 0x27, 0x06, 0x06, 0x01,
|
||||||
0x01, 0x04, 0x5A, 0x8C, 0x04, 0x80, 0x48, 0xC0, 0x26, 0x06, 0x06, 0x01,
|
0x02, 0x58, 0x87, 0x04, 0x2A, 0x7D, 0x27, 0x06, 0x06, 0x01, 0x03, 0x58,
|
||||||
0x05, 0x5A, 0x8D, 0x04, 0x3E, 0xC1, 0x26, 0x06, 0x06, 0x01, 0x06, 0x5A,
|
0x88, 0x04, 0x20, 0x7E, 0x27, 0x06, 0x06, 0x01, 0x04, 0x58, 0x89, 0x04,
|
||||||
0x8E, 0x04, 0x34, 0x7F, 0x26, 0x06, 0x06, 0x01, 0x02, 0x59, 0x8A, 0x04,
|
0x16, 0x7F, 0x27, 0x06, 0x06, 0x01, 0x05, 0x58, 0x8A, 0x04, 0x0C, 0x80,
|
||||||
0x2A, 0x80, 0x26, 0x06, 0x06, 0x01, 0x03, 0x59, 0x8B, 0x04, 0x20, 0x81,
|
0x27, 0x06, 0x06, 0x01, 0x06, 0x58, 0x8B, 0x04, 0x02, 0x56, 0x29, 0x5D,
|
||||||
0x26, 0x06, 0x06, 0x01, 0x04, 0x59, 0x8C, 0x04, 0x16, 0x82, 0x26, 0x06,
|
0x34, 0x5F, 0x36, 0x1C, 0x26, 0x05, 0x02, 0x56, 0x29, 0x5C, 0x36, 0x04,
|
||||||
0x06, 0x01, 0x05, 0x59, 0x8D, 0x04, 0x0C, 0x83, 0x26, 0x06, 0x06, 0x01,
|
0x02, 0x56, 0x29, 0xBF, 0xA1, 0x26, 0x01, T0_INT2(BR_X509_BUFSIZE_SIG),
|
||||||
0x06, 0x59, 0x8E, 0x04, 0x02, 0x57, 0x28, 0x5E, 0x35, 0x60, 0x37, 0x1B,
|
0x12, 0x06, 0x02, 0x4F, 0x29, 0x26, 0x5E, 0x34, 0x5B, 0xA2, 0x76, 0x76,
|
||||||
0x25, 0x05, 0x02, 0x57, 0x28, 0x5D, 0x37, 0x04, 0x02, 0x57, 0x28, 0xC2,
|
0x01, 0x00, 0x5A, 0x35, 0x18, 0x00, 0x00, 0x01, 0x30, 0x0A, 0x26, 0x01,
|
||||||
0xA4, 0x25, 0x01, T0_INT2(BR_X509_BUFSIZE_SIG), 0x12, 0x06, 0x02, 0x50,
|
0x00, 0x01, 0x09, 0x6F, 0x05, 0x02, 0x47, 0x29, 0x00, 0x00, 0x30, 0x30,
|
||||||
0x28, 0x25, 0x5F, 0x35, 0x5C, 0xA5, 0x79, 0x79, 0x01, 0x00, 0x5B, 0x36,
|
0x00, 0x00, 0x01, 0x81, 0x08, 0x00, 0x00, 0x01, 0x81, 0x10, 0x00, 0x00,
|
||||||
0x18, 0x00, 0x00, 0x01, 0x30, 0x0A, 0x25, 0x01, 0x00, 0x01, 0x09, 0x72,
|
0x01, 0x81, 0x19, 0x00, 0x00, 0x01, 0x81, 0x22, 0x00, 0x00, 0x01, 0x81,
|
||||||
0x05, 0x02, 0x48, 0x28, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x01, 0x81,
|
0x2B, 0x00, 0x01, 0x7B, 0x01, 0x01, 0x11, 0x3A, 0x01, 0x83, 0xFD, 0x7F,
|
||||||
0x08, 0x00, 0x00, 0x01, 0x81, 0x10, 0x00, 0x00, 0x01, 0x81, 0x19, 0x00,
|
0x11, 0x15, 0x06, 0x03, 0x3A, 0x25, 0x00, 0x3A, 0x26, 0x03, 0x00, 0x26,
|
||||||
0x00, 0x01, 0x81, 0x22, 0x00, 0x00, 0x01, 0x81, 0x2B, 0x00, 0x01, 0x7E,
|
0xC6, 0x05, 0x04, 0x41, 0x01, 0x00, 0x00, 0x26, 0x01, 0x81, 0x00, 0x0D,
|
||||||
0x01, 0x01, 0x11, 0x3B, 0x01, 0x83, 0xFD, 0x7F, 0x11, 0x15, 0x06, 0x03,
|
0x06, 0x04, 0x93, 0x04, 0x80, 0x49, 0x26, 0x01, 0x90, 0x00, 0x0D, 0x06,
|
||||||
0x3B, 0x24, 0x00, 0x3B, 0x25, 0x03, 0x00, 0x25, 0xCA, 0x05, 0x04, 0x42,
|
0x0F, 0x01, 0x06, 0x14, 0x01, 0x81, 0x40, 0x2F, 0x93, 0x02, 0x00, 0x01,
|
||||||
0x01, 0x00, 0x00, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x96, 0x04,
|
0x00, 0x94, 0x04, 0x33, 0x26, 0x01, 0x83, 0xFF, 0x7F, 0x0D, 0x06, 0x14,
|
||||||
0x80, 0x49, 0x25, 0x01, 0x90, 0x00, 0x0D, 0x06, 0x0F, 0x01, 0x06, 0x14,
|
0x01, 0x0C, 0x14, 0x01, 0x81, 0x60, 0x2F, 0x93, 0x02, 0x00, 0x01, 0x06,
|
||||||
0x01, 0x81, 0x40, 0x2F, 0x96, 0x02, 0x00, 0x01, 0x00, 0x97, 0x04, 0x33,
|
0x94, 0x02, 0x00, 0x01, 0x00, 0x94, 0x04, 0x17, 0x01, 0x12, 0x14, 0x01,
|
||||||
0x25, 0x01, 0x83, 0xFF, 0x7F, 0x0D, 0x06, 0x14, 0x01, 0x0C, 0x14, 0x01,
|
0x81, 0x70, 0x2F, 0x93, 0x02, 0x00, 0x01, 0x0C, 0x94, 0x02, 0x00, 0x01,
|
||||||
0x81, 0x60, 0x2F, 0x96, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00, 0x01,
|
0x06, 0x94, 0x02, 0x00, 0x01, 0x00, 0x94, 0x00, 0x00, 0x01, 0x82, 0x15,
|
||||||
0x00, 0x97, 0x04, 0x17, 0x01, 0x12, 0x14, 0x01, 0x81, 0x70, 0x2F, 0x96,
|
0x00, 0x00, 0x26, 0x01, 0x83, 0xB0, 0x00, 0x01, 0x83, 0xB7, 0x7F, 0x6F,
|
||||||
0x02, 0x00, 0x01, 0x0C, 0x97, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00,
|
0x00, 0x00, 0x01, 0x81, 0x34, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x97, 0x00, 0x00, 0x01, 0x82, 0x15, 0x00, 0x00, 0x25, 0x01,
|
0x01, 0x81, 0x78, 0x00, 0x00, 0x01, 0x3D, 0x00, 0x00, 0x01, 0x80, 0x43,
|
||||||
0x83, 0xB0, 0x00, 0x01, 0x83, 0xB7, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x81,
|
0x00, 0x00, 0x01, 0x80, 0x4D, 0x00, 0x00, 0x01, 0x80, 0x57, 0x00, 0x00,
|
||||||
0x34, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00, 0x01, 0x81, 0x78, 0x00,
|
0x01, 0x80, 0x61, 0x00, 0x00, 0x30, 0x11, 0x06, 0x04, 0x41, 0xAA, 0xBF,
|
||||||
0x00, 0x01, 0x3D, 0x00, 0x00, 0x01, 0x80, 0x43, 0x00, 0x00, 0x01, 0x80,
|
0xB1, 0x00, 0x00, 0x01, 0x82, 0x09, 0x00, 0x00, 0x01, 0x81, 0x6C, 0x00,
|
||||||
0x4D, 0x00, 0x00, 0x01, 0x80, 0x57, 0x00, 0x00, 0x01, 0x80, 0x61, 0x00,
|
0x00, 0x26, 0x01, 0x83, 0xB8, 0x00, 0x01, 0x83, 0xBF, 0x7F, 0x6F, 0x00,
|
||||||
0x00, 0x30, 0x11, 0x06, 0x04, 0x42, 0xAD, 0xC2, 0xB4, 0x00, 0x00, 0x01,
|
0x00, 0x01, 0x30, 0x61, 0x36, 0x01, 0x7F, 0x79, 0x1A, 0x01, 0x00, 0x79,
|
||||||
0x82, 0x09, 0x00, 0x00, 0x01, 0x81, 0x6C, 0x00, 0x00, 0x25, 0x01, 0x83,
|
0x1A, 0x04, 0x7A, 0x00, 0x01, 0x81, 0x38, 0x00, 0x01, 0x7B, 0x0D, 0x06,
|
||||||
0xB8, 0x00, 0x01, 0x83, 0xBF, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x30, 0x62,
|
0x02, 0x4E, 0x29, 0x26, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x30,
|
||||||
0x37, 0x01, 0x7F, 0x7C, 0x19, 0x01, 0x00, 0x7C, 0x19, 0x04, 0x7A, 0x00,
|
0x26, 0x3E, 0x3A, 0x01, 0x82, 0x00, 0x13, 0x2F, 0x06, 0x04, 0x41, 0x01,
|
||||||
0x01, 0x81, 0x38, 0x00, 0x01, 0x7E, 0x0D, 0x06, 0x02, 0x4F, 0x28, 0x25,
|
0x00, 0x00, 0x30, 0x66, 0x09, 0x36, 0x3F, 0x00, 0x00, 0x14, 0x01, 0x3F,
|
||||||
0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x30, 0x25, 0x3F, 0x3B, 0x01,
|
0x15, 0x01, 0x81, 0x00, 0x2F, 0x93, 0x00, 0x02, 0x01, 0x00, 0x03, 0x00,
|
||||||
0x82, 0x00, 0x13, 0x2F, 0x06, 0x04, 0x42, 0x01, 0x00, 0x00, 0x30, 0x67,
|
0xAC, 0x26, 0x06, 0x80, 0x59, 0xB0, 0x01, 0x20, 0x30, 0x11, 0x06, 0x17,
|
||||||
0x09, 0x37, 0x40, 0x00, 0x00, 0x14, 0x01, 0x3F, 0x15, 0x01, 0x81, 0x00,
|
0x25, 0x71, 0xAA, 0x9B, 0x25, 0x01, 0x7F, 0x2E, 0x03, 0x01, 0xB0, 0x01,
|
||||||
0x2F, 0x96, 0x00, 0x02, 0x01, 0x00, 0x03, 0x00, 0xAF, 0x25, 0x06, 0x80,
|
0x20, 0x74, 0xAA, 0xAF, 0x02, 0x01, 0x20, 0x76, 0x76, 0x04, 0x38, 0x01,
|
||||||
0x59, 0xB3, 0x01, 0x20, 0x30, 0x11, 0x06, 0x17, 0x24, 0x74, 0xAD, 0x9E,
|
0x21, 0x30, 0x11, 0x06, 0x08, 0x25, 0x72, 0xB3, 0x01, 0x01, 0x1F, 0x04,
|
||||||
0x24, 0x01, 0x7F, 0x2E, 0x03, 0x01, 0xB3, 0x01, 0x20, 0x77, 0xAD, 0xB2,
|
0x2A, 0x01, 0x22, 0x30, 0x11, 0x06, 0x11, 0x25, 0x72, 0xB3, 0x26, 0x06,
|
||||||
0x02, 0x01, 0x1F, 0x79, 0x79, 0x04, 0x38, 0x01, 0x21, 0x30, 0x11, 0x06,
|
0x06, 0x2C, 0x02, 0x00, 0x2F, 0x03, 0x00, 0x01, 0x02, 0x1F, 0x04, 0x13,
|
||||||
0x08, 0x24, 0x75, 0xB6, 0x01, 0x01, 0x1E, 0x04, 0x2A, 0x01, 0x22, 0x30,
|
0x01, 0x26, 0x30, 0x11, 0x06, 0x08, 0x25, 0x72, 0xB3, 0x01, 0x06, 0x1F,
|
||||||
0x11, 0x06, 0x11, 0x24, 0x75, 0xB6, 0x25, 0x06, 0x06, 0x2C, 0x02, 0x00,
|
0x04, 0x05, 0x41, 0xAB, 0x01, 0x00, 0x25, 0x04, 0xFF, 0x23, 0x76, 0x02,
|
||||||
0x2F, 0x03, 0x00, 0x01, 0x02, 0x1E, 0x04, 0x13, 0x01, 0x26, 0x30, 0x11,
|
0x00, 0x00, 0x00, 0xAC, 0xB1, 0x26, 0x01, 0x01, 0x11, 0x06, 0x08, 0xA3,
|
||||||
0x06, 0x08, 0x24, 0x75, 0xB6, 0x01, 0x06, 0x1E, 0x04, 0x05, 0x42, 0xAE,
|
0x05, 0x02, 0x50, 0x29, 0xB1, 0x04, 0x02, 0x50, 0x29, 0x26, 0x01, 0x02,
|
||||||
0x01, 0x00, 0x24, 0x04, 0xFF, 0x23, 0x79, 0x02, 0x00, 0x00, 0x00, 0xAF,
|
0x11, 0x06, 0x0C, 0x25, 0x72, 0xAD, 0x65, 0x2B, 0x40, 0x0D, 0x06, 0x02,
|
||||||
0xB4, 0x25, 0x01, 0x01, 0x11, 0x06, 0x08, 0xA6, 0x05, 0x02, 0x51, 0x28,
|
0x50, 0x29, 0xB1, 0x01, 0x7F, 0x10, 0x06, 0x02, 0x55, 0x29, 0x25, 0x76,
|
||||||
0xB4, 0x04, 0x02, 0x51, 0x28, 0x25, 0x01, 0x02, 0x11, 0x06, 0x0C, 0x24,
|
0x00, 0x00, 0xAC, 0x26, 0x06, 0x1A, 0xAC, 0x9B, 0x25, 0x26, 0x06, 0x11,
|
||||||
0x75, 0xB0, 0x66, 0x2B, 0x41, 0x0D, 0x06, 0x02, 0x51, 0x28, 0xB4, 0x01,
|
0xAC, 0x26, 0x06, 0x0C, 0xAC, 0x9B, 0x25, 0x86, 0x27, 0x05, 0x02, 0x48,
|
||||||
0x7F, 0x10, 0x06, 0x02, 0x56, 0x28, 0x24, 0x79, 0x00, 0x00, 0xAF, 0x25,
|
0x29, 0xBF, 0x04, 0x71, 0x76, 0x76, 0x04, 0x63, 0x76, 0x00, 0x02, 0x03,
|
||||||
0x06, 0x1A, 0xAF, 0x9E, 0x24, 0x25, 0x06, 0x11, 0xAF, 0x25, 0x06, 0x0C,
|
0x00, 0xB0, 0x01, 0x03, 0x75, 0xAA, 0xB7, 0x03, 0x01, 0x02, 0x01, 0x01,
|
||||||
0xAF, 0x9E, 0x24, 0x89, 0x26, 0x05, 0x02, 0x49, 0x28, 0xC2, 0x04, 0x71,
|
0x07, 0x12, 0x06, 0x02, 0x55, 0x29, 0x26, 0x01, 0x00, 0x30, 0x11, 0x06,
|
||||||
0x79, 0x79, 0x04, 0x63, 0x79, 0x00, 0x02, 0x03, 0x00, 0xB3, 0x01, 0x03,
|
0x05, 0x25, 0x4C, 0x29, 0x04, 0x15, 0x01, 0x01, 0x30, 0x11, 0x06, 0x0A,
|
||||||
0x78, 0xAD, 0xBA, 0x03, 0x01, 0x02, 0x01, 0x01, 0x07, 0x12, 0x06, 0x02,
|
0x25, 0xB7, 0x02, 0x01, 0x14, 0x02, 0x01, 0x0E, 0x04, 0x05, 0x25, 0xB7,
|
||||||
0x56, 0x28, 0x25, 0x01, 0x00, 0x30, 0x11, 0x06, 0x05, 0x24, 0x4D, 0x28,
|
0x01, 0x00, 0x25, 0x02, 0x00, 0x06, 0x19, 0x01, 0x00, 0x30, 0x01, 0x38,
|
||||||
0x04, 0x15, 0x01, 0x01, 0x30, 0x11, 0x06, 0x0A, 0x24, 0xBA, 0x02, 0x01,
|
0x15, 0x06, 0x03, 0x01, 0x10, 0x2F, 0x3A, 0x01, 0x81, 0x40, 0x15, 0x06,
|
||||||
0x14, 0x02, 0x01, 0x0E, 0x04, 0x05, 0x24, 0xBA, 0x01, 0x00, 0x24, 0x02,
|
0x03, 0x01, 0x20, 0x2F, 0x61, 0x36, 0x04, 0x07, 0x01, 0x04, 0x15, 0x05,
|
||||||
0x00, 0x06, 0x19, 0x01, 0x00, 0x30, 0x01, 0x38, 0x15, 0x06, 0x03, 0x01,
|
0x02, 0x4C, 0x29, 0xBF, 0x00, 0x00, 0x37, 0xAC, 0xBF, 0x1B, 0x00, 0x03,
|
||||||
0x10, 0x2F, 0x3B, 0x01, 0x81, 0x40, 0x15, 0x06, 0x03, 0x01, 0x20, 0x2F,
|
0x01, 0x00, 0x03, 0x00, 0x37, 0xAC, 0x26, 0x06, 0x30, 0xB0, 0x01, 0x11,
|
||||||
0x62, 0x37, 0x04, 0x07, 0x01, 0x04, 0x15, 0x05, 0x02, 0x4D, 0x28, 0xC2,
|
0x74, 0xAA, 0x26, 0x05, 0x02, 0x43, 0x29, 0x26, 0x06, 0x20, 0xAC, 0x9B,
|
||||||
0x00, 0x00, 0x38, 0xAF, 0xC2, 0x1A, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00,
|
0x25, 0x84, 0x27, 0x03, 0x01, 0x01, 0x00, 0x2E, 0x03, 0x02, 0xAF, 0x26,
|
||||||
0x38, 0xAF, 0x25, 0x06, 0x30, 0xB3, 0x01, 0x11, 0x77, 0xAD, 0x25, 0x05,
|
0x02, 0x01, 0x15, 0x06, 0x07, 0x2C, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00,
|
||||||
0x02, 0x44, 0x28, 0x25, 0x06, 0x20, 0xAF, 0x9E, 0x24, 0x87, 0x26, 0x03,
|
0x02, 0x02, 0x20, 0x76, 0x04, 0x5D, 0x76, 0x04, 0x4D, 0x76, 0x1B, 0x02,
|
||||||
0x01, 0x01, 0x00, 0x2E, 0x03, 0x02, 0xB2, 0x25, 0x02, 0x01, 0x15, 0x06,
|
0x00, 0x00, 0x00, 0xB0, 0x01, 0x06, 0x75, 0xAE, 0x00, 0x00, 0xB5, 0x83,
|
||||||
0x07, 0x2C, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00, 0x02, 0x02, 0x1F, 0x79,
|
0x06, 0x0E, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00,
|
||||||
0x04, 0x5D, 0x79, 0x04, 0x4D, 0x79, 0x1A, 0x02, 0x00, 0x00, 0x00, 0xB3,
|
0xB5, 0x6B, 0x04, 0x08, 0x8F, 0x06, 0x05, 0x25, 0x01, 0x00, 0x04, 0x00,
|
||||||
0x01, 0x06, 0x78, 0xB1, 0x00, 0x00, 0xB8, 0x86, 0x06, 0x0E, 0x3B, 0x25,
|
0x00, 0x00, 0xB6, 0x83, 0x06, 0x0E, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01,
|
||||||
0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x00, 0x00, 0xB8, 0x6D, 0x04, 0x08,
|
0x00, 0x01, 0x00, 0x00, 0xB6, 0x6B, 0x04, 0x08, 0x8F, 0x06, 0x05, 0x25,
|
||||||
0x92, 0x06, 0x05, 0x24, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xB9, 0x86,
|
0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xB7, 0x26, 0x01, 0x81, 0x00, 0x0D,
|
||||||
0x06, 0x0E, 0x3B, 0x25, 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x00, 0x00,
|
0x06, 0x04, 0x00, 0x04, 0x80, 0x55, 0x26, 0x01, 0x81, 0x40, 0x0D, 0x06,
|
||||||
0xB9, 0x6D, 0x04, 0x08, 0x92, 0x06, 0x05, 0x24, 0x01, 0x00, 0x04, 0x00,
|
0x07, 0x25, 0x01, 0x00, 0x00, 0x04, 0x80, 0x47, 0x26, 0x01, 0x81, 0x60,
|
||||||
0x00, 0x00, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x00, 0x04,
|
0x0D, 0x06, 0x0E, 0x01, 0x1F, 0x15, 0x01, 0x01, 0xA0, 0x01, 0x81, 0x00,
|
||||||
0x80, 0x55, 0x25, 0x01, 0x81, 0x40, 0x0D, 0x06, 0x07, 0x24, 0x01, 0x00,
|
0x01, 0x8F, 0x7F, 0x04, 0x32, 0x26, 0x01, 0x81, 0x70, 0x0D, 0x06, 0x0F,
|
||||||
0x00, 0x04, 0x80, 0x47, 0x25, 0x01, 0x81, 0x60, 0x0D, 0x06, 0x0E, 0x01,
|
0x01, 0x0F, 0x15, 0x01, 0x02, 0xA0, 0x01, 0x90, 0x00, 0x01, 0x83, 0xFF,
|
||||||
0x1F, 0x15, 0x01, 0x01, 0xA3, 0x01, 0x81, 0x00, 0x01, 0x8F, 0x7F, 0x04,
|
0x7F, 0x04, 0x1C, 0x26, 0x01, 0x81, 0x78, 0x0D, 0x06, 0x11, 0x01, 0x07,
|
||||||
0x32, 0x25, 0x01, 0x81, 0x70, 0x0D, 0x06, 0x0F, 0x01, 0x0F, 0x15, 0x01,
|
0x15, 0x01, 0x03, 0xA0, 0x01, 0x84, 0x80, 0x00, 0x01, 0x80, 0xC3, 0xFF,
|
||||||
0x02, 0xA3, 0x01, 0x90, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x04, 0x1C, 0x25,
|
0x7F, 0x04, 0x04, 0x25, 0x01, 0x00, 0x00, 0x6F, 0x05, 0x03, 0x25, 0x01,
|
||||||
0x01, 0x81, 0x78, 0x0D, 0x06, 0x11, 0x01, 0x07, 0x15, 0x01, 0x03, 0xA3,
|
0x00, 0x00, 0x00, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01, 0x00, 0x01, 0x7F,
|
||||||
0x01, 0x84, 0x80, 0x00, 0x01, 0x80, 0xC3, 0xFF, 0x7F, 0x04, 0x04, 0x24,
|
0x00, 0xB7, 0x33, 0x26, 0x3C, 0x06, 0x03, 0x3A, 0x25, 0x00, 0x01, 0x06,
|
||||||
0x01, 0x00, 0x00, 0x72, 0x05, 0x03, 0x24, 0x01, 0x00, 0x00, 0x00, 0x3B,
|
0x0E, 0x3A, 0x26, 0x01, 0x06, 0x14, 0x01, 0x02, 0x10, 0x06, 0x04, 0x41,
|
||||||
0x25, 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xBA, 0x34, 0x25,
|
0x01, 0x7F, 0x00, 0x01, 0x3F, 0x15, 0x09, 0x00, 0x00, 0x26, 0x06, 0x06,
|
||||||
0x3D, 0x06, 0x03, 0x3B, 0x24, 0x00, 0x01, 0x06, 0x0E, 0x3B, 0x25, 0x01,
|
0x0B, 0x9F, 0x33, 0x40, 0x04, 0x77, 0x25, 0x26, 0x00, 0x00, 0xB0, 0x01,
|
||||||
0x06, 0x14, 0x01, 0x02, 0x10, 0x06, 0x04, 0x42, 0x01, 0x7F, 0x00, 0x01,
|
0x03, 0x75, 0xAA, 0xB7, 0x06, 0x02, 0x54, 0x29, 0x00, 0x00, 0x3A, 0x26,
|
||||||
0x3F, 0x15, 0x09, 0x00, 0x00, 0x25, 0x06, 0x06, 0x0B, 0xA2, 0x34, 0x41,
|
0x06, 0x07, 0x31, 0x26, 0x06, 0x01, 0x1A, 0x04, 0x76, 0x41, 0x00, 0x00,
|
||||||
0x04, 0x77, 0x24, 0x25, 0x00, 0x00, 0xB3, 0x01, 0x03, 0x78, 0xAD, 0xBA,
|
0x01, 0x01, 0x75, 0xA9, 0x01, 0x01, 0x10, 0x06, 0x02, 0x42, 0x29, 0xB7,
|
||||||
0x06, 0x02, 0x55, 0x28, 0x00, 0x00, 0x3B, 0x25, 0x06, 0x07, 0x31, 0x25,
|
0x3D, 0x00, 0x04, 0xB0, 0x26, 0x01, 0x17, 0x01, 0x18, 0x6F, 0x05, 0x02,
|
||||||
0x06, 0x01, 0x19, 0x04, 0x76, 0x42, 0x00, 0x00, 0x01, 0x01, 0x78, 0xAC,
|
0x47, 0x29, 0x01, 0x18, 0x11, 0x03, 0x00, 0x72, 0xAA, 0xA5, 0x02, 0x00,
|
||||||
0x01, 0x01, 0x10, 0x06, 0x02, 0x43, 0x28, 0xBA, 0x3E, 0x00, 0x04, 0xB3,
|
0x06, 0x0C, 0x01, 0x80, 0x64, 0x08, 0x03, 0x01, 0xA5, 0x02, 0x01, 0x09,
|
||||||
0x25, 0x01, 0x17, 0x01, 0x18, 0x72, 0x05, 0x02, 0x48, 0x28, 0x01, 0x18,
|
0x04, 0x0E, 0x26, 0x01, 0x32, 0x0D, 0x06, 0x04, 0x01, 0x80, 0x64, 0x09,
|
||||||
0x11, 0x03, 0x00, 0x75, 0xAD, 0xA8, 0x02, 0x00, 0x06, 0x0C, 0x01, 0x80,
|
0x01, 0x8E, 0x6C, 0x09, 0x03, 0x01, 0x02, 0x01, 0x01, 0x82, 0x6D, 0x08,
|
||||||
0x64, 0x08, 0x03, 0x01, 0xA8, 0x02, 0x01, 0x09, 0x04, 0x0E, 0x25, 0x01,
|
0x02, 0x01, 0x01, 0x03, 0x09, 0x01, 0x04, 0x0C, 0x09, 0x02, 0x01, 0x01,
|
||||||
0x32, 0x0D, 0x06, 0x04, 0x01, 0x80, 0x64, 0x09, 0x01, 0x8E, 0x6C, 0x09,
|
0x80, 0x63, 0x09, 0x01, 0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01, 0x01, 0x83,
|
||||||
0x03, 0x01, 0x02, 0x01, 0x01, 0x82, 0x6D, 0x08, 0x02, 0x01, 0x01, 0x03,
|
0x0F, 0x09, 0x01, 0x83, 0x10, 0x0C, 0x09, 0x03, 0x03, 0x01, 0x01, 0x01,
|
||||||
0x09, 0x01, 0x04, 0x0C, 0x09, 0x02, 0x01, 0x01, 0x80, 0x63, 0x09, 0x01,
|
0x0C, 0xA6, 0x40, 0x01, 0x01, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x07, 0x3E,
|
||||||
0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01, 0x01, 0x83, 0x0F, 0x09, 0x01, 0x83,
|
0x02, 0x01, 0x01, 0x80, 0x64, 0x07, 0x3D, 0x02, 0x01, 0x01, 0x83, 0x10,
|
||||||
0x10, 0x0C, 0x09, 0x03, 0x03, 0x01, 0x01, 0x01, 0x0C, 0xA9, 0x41, 0x01,
|
0x07, 0x3E, 0x2F, 0x15, 0x06, 0x03, 0x01, 0x18, 0x09, 0x91, 0x09, 0x78,
|
||||||
0x01, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x07, 0x3F, 0x02, 0x01, 0x01, 0x80,
|
0x26, 0x01, 0x05, 0x14, 0x02, 0x03, 0x09, 0x03, 0x03, 0x01, 0x1F, 0x15,
|
||||||
0x64, 0x07, 0x3E, 0x02, 0x01, 0x01, 0x83, 0x10, 0x07, 0x3F, 0x2F, 0x15,
|
0x01, 0x01, 0x3A, 0xA6, 0x02, 0x03, 0x09, 0x40, 0x03, 0x03, 0x01, 0x00,
|
||||||
0x06, 0x03, 0x01, 0x18, 0x09, 0x94, 0x09, 0x7B, 0x25, 0x01, 0x05, 0x14,
|
0x01, 0x17, 0xA6, 0x01, 0x9C, 0x10, 0x08, 0x03, 0x02, 0x01, 0x00, 0x01,
|
||||||
0x02, 0x03, 0x09, 0x03, 0x03, 0x01, 0x1F, 0x15, 0x01, 0x01, 0x3B, 0xA9,
|
0x3B, 0xA6, 0x01, 0x3C, 0x08, 0x02, 0x02, 0x09, 0x03, 0x02, 0x01, 0x00,
|
||||||
0x02, 0x03, 0x09, 0x41, 0x03, 0x03, 0x01, 0x00, 0x01, 0x17, 0xA9, 0x01,
|
0x01, 0x3C, 0xA6, 0x02, 0x02, 0x09, 0x03, 0x02, 0xB7, 0x26, 0x01, 0x2E,
|
||||||
0x9C, 0x10, 0x08, 0x03, 0x02, 0x01, 0x00, 0x01, 0x3B, 0xA9, 0x01, 0x3C,
|
0x11, 0x06, 0x0D, 0x25, 0xB7, 0x26, 0x01, 0x30, 0x01, 0x39, 0x6F, 0x06,
|
||||||
0x08, 0x02, 0x02, 0x09, 0x03, 0x02, 0x01, 0x00, 0x01, 0x3C, 0xA9, 0x02,
|
0x03, 0x25, 0x04, 0x74, 0x01, 0x80, 0x5A, 0x10, 0x06, 0x02, 0x47, 0x29,
|
||||||
0x02, 0x09, 0x03, 0x02, 0xBA, 0x25, 0x01, 0x2E, 0x11, 0x06, 0x0D, 0x24,
|
0x76, 0x02, 0x03, 0x02, 0x02, 0x00, 0x01, 0xB7, 0x7A, 0x01, 0x0A, 0x08,
|
||||||
0xBA, 0x25, 0x01, 0x30, 0x01, 0x39, 0x72, 0x06, 0x03, 0x24, 0x04, 0x74,
|
0x03, 0x00, 0xB7, 0x7A, 0x02, 0x00, 0x09, 0x00, 0x02, 0x03, 0x00, 0x03,
|
||||||
0x01, 0x80, 0x5A, 0x10, 0x06, 0x02, 0x48, 0x28, 0x79, 0x02, 0x03, 0x02,
|
0x01, 0xA5, 0x26, 0x02, 0x01, 0x02, 0x00, 0x6F, 0x05, 0x02, 0x47, 0x29,
|
||||||
0x02, 0x00, 0x01, 0xBA, 0x7D, 0x01, 0x0A, 0x08, 0x03, 0x00, 0xBA, 0x7D,
|
0x00, 0x00, 0x33, 0xB0, 0x01, 0x02, 0x75, 0x0B, 0xA8, 0x00, 0x03, 0x26,
|
||||||
0x02, 0x00, 0x09, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0xA8, 0x25, 0x02,
|
0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0xAA, 0xB7, 0x26, 0x01, 0x81, 0x00,
|
||||||
0x01, 0x02, 0x00, 0x72, 0x05, 0x02, 0x48, 0x28, 0x00, 0x00, 0x34, 0xB3,
|
0x13, 0x06, 0x02, 0x53, 0x29, 0x26, 0x01, 0x00, 0x11, 0x06, 0x0B, 0x25,
|
||||||
0x01, 0x02, 0x78, 0x0B, 0xAB, 0x00, 0x03, 0x25, 0x03, 0x00, 0x03, 0x01,
|
0x26, 0x05, 0x04, 0x25, 0x01, 0x00, 0x00, 0xB7, 0x04, 0x6F, 0x02, 0x01,
|
||||||
0x03, 0x02, 0xAD, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x54,
|
0x26, 0x05, 0x02, 0x4F, 0x29, 0x40, 0x03, 0x01, 0x02, 0x02, 0x36, 0x02,
|
||||||
0x28, 0x25, 0x01, 0x00, 0x11, 0x06, 0x0B, 0x24, 0x25, 0x05, 0x04, 0x24,
|
0x02, 0x3F, 0x03, 0x02, 0x26, 0x06, 0x03, 0xB7, 0x04, 0x68, 0x25, 0x02,
|
||||||
0x01, 0x00, 0x00, 0xBA, 0x04, 0x6F, 0x02, 0x01, 0x25, 0x05, 0x02, 0x50,
|
0x00, 0x02, 0x01, 0x0A, 0x00, 0x01, 0xB7, 0x26, 0x01, 0x81, 0x00, 0x0D,
|
||||||
0x28, 0x41, 0x03, 0x01, 0x02, 0x02, 0x37, 0x02, 0x02, 0x40, 0x03, 0x02,
|
0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x0A, 0x26, 0x05, 0x02, 0x4D, 0x29,
|
||||||
0x25, 0x06, 0x03, 0xBA, 0x04, 0x68, 0x24, 0x02, 0x00, 0x02, 0x01, 0x0A,
|
0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x12, 0x06, 0x19, 0x02,
|
||||||
0x00, 0x01, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x01, 0x00, 0x01,
|
0x00, 0x40, 0x03, 0x00, 0x26, 0x01, 0x83, 0xFF, 0xFF, 0x7F, 0x12, 0x06,
|
||||||
0x81, 0x00, 0x0A, 0x25, 0x05, 0x02, 0x4E, 0x28, 0x03, 0x00, 0x01, 0x00,
|
0x02, 0x4E, 0x29, 0x01, 0x08, 0x0E, 0x3A, 0xB7, 0x33, 0x09, 0x04, 0x60,
|
||||||
0x02, 0x00, 0x01, 0x00, 0x12, 0x06, 0x19, 0x02, 0x00, 0x41, 0x03, 0x00,
|
0x00, 0x00, 0xA9, 0x92, 0x00, 0x00, 0xAA, 0xBF, 0x00, 0x00, 0xB0, 0x73,
|
||||||
0x25, 0x01, 0x83, 0xFF, 0xFF, 0x7F, 0x12, 0x06, 0x02, 0x4F, 0x28, 0x01,
|
0xAA, 0x00, 0x01, 0xAA, 0x26, 0x05, 0x02, 0x53, 0x29, 0xB7, 0x26, 0x01,
|
||||||
0x08, 0x0E, 0x3B, 0xBA, 0x34, 0x09, 0x04, 0x60, 0x00, 0x00, 0xAC, 0x95,
|
0x81, 0x00, 0x13, 0x06, 0x02, 0x53, 0x29, 0x03, 0x00, 0x26, 0x06, 0x16,
|
||||||
0x00, 0x00, 0xAD, 0xC2, 0x00, 0x00, 0xB3, 0x76, 0xAD, 0x00, 0x01, 0xAD,
|
0xB7, 0x02, 0x00, 0x26, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13, 0x06, 0x02,
|
||||||
0x25, 0x05, 0x02, 0x54, 0x28, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06,
|
0x53, 0x29, 0x01, 0x08, 0x0E, 0x09, 0x03, 0x00, 0x04, 0x67, 0x25, 0x02,
|
||||||
0x02, 0x54, 0x28, 0x03, 0x00, 0x25, 0x06, 0x16, 0xBA, 0x02, 0x00, 0x25,
|
0x00, 0x00, 0x00, 0xAA, 0x26, 0x01, 0x81, 0x7F, 0x12, 0x06, 0x08, 0xBF,
|
||||||
0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13, 0x06, 0x02, 0x54, 0x28, 0x01, 0x08,
|
0x01, 0x00, 0x66, 0x36, 0x01, 0x00, 0x00, 0x26, 0x66, 0x36, 0x66, 0x3F,
|
||||||
0x0E, 0x09, 0x03, 0x00, 0x04, 0x67, 0x24, 0x02, 0x00, 0x00, 0x00, 0xAD,
|
0xA2, 0x01, 0x7F, 0x00, 0x00, 0xB0, 0x01, 0x0C, 0x30, 0x11, 0x06, 0x05,
|
||||||
0x25, 0x01, 0x81, 0x7F, 0x12, 0x06, 0x08, 0xC2, 0x01, 0x00, 0x67, 0x37,
|
0x25, 0x72, 0xB3, 0x04, 0x3E, 0x01, 0x12, 0x30, 0x11, 0x06, 0x05, 0x25,
|
||||||
0x01, 0x00, 0x00, 0x25, 0x67, 0x37, 0x67, 0x40, 0xA5, 0x01, 0x7F, 0x00,
|
0x72, 0xB4, 0x04, 0x33, 0x01, 0x13, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72,
|
||||||
0x00, 0xB3, 0x01, 0x0C, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB6, 0x04,
|
0xB4, 0x04, 0x28, 0x01, 0x14, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB4,
|
||||||
0x3E, 0x01, 0x12, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x33,
|
0x04, 0x1D, 0x01, 0x16, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB4, 0x04,
|
||||||
0x01, 0x13, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x28, 0x01,
|
0x12, 0x01, 0x1E, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB2, 0x04, 0x07,
|
||||||
0x14, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x1D, 0x01, 0x16,
|
0x41, 0xAB, 0x01, 0x00, 0x01, 0x00, 0x25, 0x00, 0x01, 0xB7, 0x03, 0x00,
|
||||||
0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x12, 0x01, 0x1E, 0x30,
|
0x02, 0x00, 0x01, 0x05, 0x14, 0x01, 0x01, 0x15, 0x2D, 0x02, 0x00, 0x01,
|
||||||
0x11, 0x06, 0x05, 0x24, 0x75, 0xB5, 0x04, 0x07, 0x42, 0xAE, 0x01, 0x00,
|
0x06, 0x14, 0x26, 0x01, 0x01, 0x15, 0x06, 0x02, 0x45, 0x29, 0x01, 0x04,
|
||||||
0x01, 0x00, 0x24, 0x00, 0x01, 0xBA, 0x03, 0x00, 0x02, 0x00, 0x01, 0x05,
|
0x0E, 0x02, 0x00, 0x01, 0x1F, 0x15, 0x26, 0x01, 0x1F, 0x11, 0x06, 0x02,
|
||||||
0x14, 0x01, 0x01, 0x15, 0x2D, 0x02, 0x00, 0x01, 0x06, 0x14, 0x25, 0x01,
|
0x46, 0x29, 0x09, 0x00, 0x00, 0x26, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F,
|
||||||
0x01, 0x15, 0x06, 0x02, 0x46, 0x28, 0x01, 0x04, 0x0E, 0x02, 0x00, 0x01,
|
0x00, 0xB0, 0x00, 0x01, 0xAA, 0x26, 0x05, 0x05, 0x66, 0x36, 0x01, 0x7F,
|
||||||
0x1F, 0x15, 0x25, 0x01, 0x1F, 0x11, 0x06, 0x02, 0x47, 0x28, 0x09, 0x00,
|
0x00, 0x01, 0x01, 0x03, 0x00, 0x9C, 0x26, 0x01, 0x83, 0xFF, 0x7E, 0x11,
|
||||||
0x00, 0x25, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xB3, 0x00, 0x01,
|
0x06, 0x16, 0x25, 0x26, 0x06, 0x10, 0x9D, 0x26, 0x05, 0x05, 0x25, 0xBF,
|
||||||
0xAD, 0x25, 0x05, 0x05, 0x67, 0x37, 0x01, 0x7F, 0x00, 0x01, 0x01, 0x03,
|
0x01, 0x00, 0x00, 0x02, 0x00, 0x81, 0x03, 0x00, 0x04, 0x6D, 0x04, 0x1B,
|
||||||
0x00, 0x9F, 0x25, 0x01, 0x83, 0xFF, 0x7E, 0x11, 0x06, 0x16, 0x24, 0x25,
|
0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00, 0x02, 0x00, 0x81, 0x03,
|
||||||
0x06, 0x10, 0xA0, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02,
|
0x00, 0x26, 0x06, 0x0B, 0x9C, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00,
|
||||||
0x00, 0x84, 0x03, 0x00, 0x04, 0x6D, 0x04, 0x1B, 0x25, 0x05, 0x05, 0x24,
|
0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05, 0x01, 0x00, 0x40, 0x66,
|
||||||
0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x25, 0x06, 0x0B,
|
0x36, 0x01, 0x7F, 0x00, 0x01, 0xAA, 0x01, 0x01, 0x03, 0x00, 0x26, 0x06,
|
||||||
0x9F, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x04, 0x6D, 0x24,
|
0x10, 0x9E, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00, 0x02, 0x00,
|
||||||
0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, 0x7F, 0x00,
|
0x81, 0x03, 0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05, 0x01, 0x00,
|
||||||
0x01, 0xAD, 0x01, 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xA1, 0x25, 0x05,
|
0x40, 0x66, 0x36, 0x01, 0x7F, 0x00, 0x01, 0xAA, 0x01, 0x01, 0x03, 0x00,
|
||||||
0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x04,
|
0x26, 0x06, 0x10, 0xB7, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00,
|
||||||
0x6D, 0x24, 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01,
|
0x02, 0x00, 0x81, 0x03, 0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05,
|
||||||
0x7F, 0x00, 0x01, 0xAD, 0x01, 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xBA,
|
0x01, 0x00, 0x40, 0x66, 0x36, 0x01, 0x7F, 0x00, 0x00, 0xB7, 0x01, 0x08,
|
||||||
0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03,
|
0x0E, 0x3A, 0xB7, 0x33, 0x09, 0x00, 0x00, 0xB7, 0x3A, 0xB7, 0x01, 0x08,
|
||||||
0x00, 0x04, 0x6D, 0x24, 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67,
|
0x0E, 0x33, 0x09, 0x00, 0x00, 0x26, 0x05, 0x02, 0x4E, 0x29, 0x40, 0xB8,
|
||||||
0x37, 0x01, 0x7F, 0x00, 0x00, 0xBA, 0x01, 0x08, 0x0E, 0x3B, 0xBA, 0x34,
|
0x00, 0x00, 0x32, 0x26, 0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x25, 0x1A,
|
||||||
0x09, 0x00, 0x00, 0xBA, 0x3B, 0xBA, 0x01, 0x08, 0x0E, 0x34, 0x09, 0x00,
|
0x04, 0x74, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x25, 0x05, 0x02, 0x4F, 0x28, 0x41, 0xBB, 0x00, 0x00, 0x32, 0x25,
|
0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01,
|
||||||
0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x24, 0x19, 0x04, 0x74, 0x00, 0x01,
|
0x33, 0x00, 0x00, 0xC0, 0x25, 0x00, 0x00, 0x26, 0x06, 0x07, 0xC1, 0x26,
|
||||||
0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01,
|
0x06, 0x01, 0x1A, 0x04, 0x76, 0x00, 0x00, 0x01, 0x00, 0x30, 0x31, 0x0B,
|
||||||
0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0xC3,
|
0x41, 0x00, 0x00, 0x01, 0x81, 0x70, 0x00, 0x00, 0x01, 0x82, 0x0D, 0x00,
|
||||||
0x24, 0x00, 0x00, 0x25, 0x06, 0x07, 0xC4, 0x25, 0x06, 0x01, 0x19, 0x04,
|
0x00, 0x01, 0x82, 0x22, 0x00, 0x00, 0x01, 0x82, 0x05, 0x00, 0x00, 0x26,
|
||||||
0x76, 0x00, 0x00, 0x01, 0x00, 0x30, 0x31, 0x0B, 0x42, 0x00, 0x00, 0x01,
|
0x01, 0x83, 0xFB, 0x50, 0x01, 0x83, 0xFB, 0x6F, 0x6F, 0x06, 0x04, 0x25,
|
||||||
0x81, 0x70, 0x00, 0x00, 0x01, 0x82, 0x0D, 0x00, 0x00, 0x01, 0x82, 0x22,
|
0x01, 0x00, 0x00, 0x26, 0x01, 0x83, 0xB0, 0x00, 0x01, 0x83, 0xBF, 0x7F,
|
||||||
0x00, 0x00, 0x01, 0x82, 0x05, 0x00, 0x00, 0x01, 0x03, 0x33, 0x01, 0x03,
|
0x6F, 0x06, 0x04, 0x25, 0x01, 0x00, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x15,
|
||||||
0x33, 0x00, 0x00, 0x25, 0x01, 0x83, 0xFB, 0x50, 0x01, 0x83, 0xFB, 0x6F,
|
0x01, 0x83, 0xFF, 0x7E, 0x0D, 0x00
|
||||||
0x72, 0x06, 0x04, 0x24, 0x01, 0x00, 0x00, 0x25, 0x01, 0x83, 0xB0, 0x00,
|
|
||||||
0x01, 0x83, 0xBF, 0x7F, 0x72, 0x06, 0x04, 0x24, 0x01, 0x00, 0x00, 0x01,
|
|
||||||
0x83, 0xFF, 0x7F, 0x15, 0x01, 0x83, 0xFF, 0x7E, 0x0D, 0x00
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint16_t t0_caddr[] = {
|
static const uint16_t t0_caddr[] = {
|
||||||
|
|
@ -755,106 +752,103 @@ static const uint16_t t0_caddr[] = {
|
||||||
188,
|
188,
|
||||||
193,
|
193,
|
||||||
198,
|
198,
|
||||||
202,
|
203,
|
||||||
207,
|
208,
|
||||||
212,
|
213,
|
||||||
217,
|
234,
|
||||||
238,
|
239,
|
||||||
243,
|
244,
|
||||||
248,
|
249,
|
||||||
253,
|
264,
|
||||||
282,
|
269,
|
||||||
297,
|
275,
|
||||||
|
281,
|
||||||
|
286,
|
||||||
|
294,
|
||||||
302,
|
302,
|
||||||
308,
|
308,
|
||||||
314,
|
313,
|
||||||
319,
|
324,
|
||||||
327,
|
960,
|
||||||
335,
|
975,
|
||||||
341,
|
979,
|
||||||
346,
|
984,
|
||||||
357,
|
989,
|
||||||
992,
|
994,
|
||||||
1007,
|
999,
|
||||||
1011,
|
1004,
|
||||||
1016,
|
1118,
|
||||||
1021,
|
1123,
|
||||||
1026,
|
1135,
|
||||||
1031,
|
1140,
|
||||||
1036,
|
1145,
|
||||||
1150,
|
1150,
|
||||||
1155,
|
1154,
|
||||||
1167,
|
1159,
|
||||||
1172,
|
1164,
|
||||||
1177,
|
1169,
|
||||||
1182,
|
1174,
|
||||||
1186,
|
1184,
|
||||||
1191,
|
1189,
|
||||||
1196,
|
1194,
|
||||||
1201,
|
|
||||||
1206,
|
1206,
|
||||||
1216,
|
|
||||||
1221,
|
1221,
|
||||||
1226,
|
1226,
|
||||||
1238,
|
1240,
|
||||||
1253,
|
1262,
|
||||||
1258,
|
1273,
|
||||||
1272,
|
1376,
|
||||||
1294,
|
1423,
|
||||||
1305,
|
1456,
|
||||||
1408,
|
1547,
|
||||||
1455,
|
1553,
|
||||||
1488,
|
1616,
|
||||||
1579,
|
1623,
|
||||||
1585,
|
1651,
|
||||||
1648,
|
1679,
|
||||||
1655,
|
1784,
|
||||||
1683,
|
1826,
|
||||||
1711,
|
1839,
|
||||||
1816,
|
1851,
|
||||||
1858,
|
1865,
|
||||||
1871,
|
1880,
|
||||||
1883,
|
2100,
|
||||||
1897,
|
2114,
|
||||||
1912,
|
2131,
|
||||||
2132,
|
2140,
|
||||||
2146,
|
2207,
|
||||||
2163,
|
2263,
|
||||||
2172,
|
2267,
|
||||||
2239,
|
2271,
|
||||||
2295,
|
2276,
|
||||||
2299,
|
2324,
|
||||||
2303,
|
2350,
|
||||||
2308,
|
2426,
|
||||||
2356,
|
2470,
|
||||||
2382,
|
2481,
|
||||||
2458,
|
2566,
|
||||||
2502,
|
2604,
|
||||||
2513,
|
2642,
|
||||||
2598,
|
2652,
|
||||||
2636,
|
2662,
|
||||||
2674,
|
2671,
|
||||||
2684,
|
2684,
|
||||||
2694,
|
2688,
|
||||||
2703,
|
2692,
|
||||||
2716,
|
2696,
|
||||||
2720,
|
2700,
|
||||||
|
2704,
|
||||||
|
2708,
|
||||||
|
2712,
|
||||||
2724,
|
2724,
|
||||||
2728,
|
|
||||||
2732,
|
2732,
|
||||||
2736,
|
2737,
|
||||||
2740,
|
2742,
|
||||||
2744,
|
2747,
|
||||||
2756,
|
2752
|
||||||
2764,
|
|
||||||
2769,
|
|
||||||
2774,
|
|
||||||
2779,
|
|
||||||
2784,
|
|
||||||
2792
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define T0_INTERPRETED 61
|
#define T0_INTERPRETED 60
|
||||||
|
|
||||||
#define T0_ENTER(ip, rp, slot) do { \
|
#define T0_ENTER(ip, rp, slot) do { \
|
||||||
const unsigned char *t0_newip; \
|
const unsigned char *t0_newip; \
|
||||||
|
|
@ -875,7 +869,7 @@ name(void *ctx) \
|
||||||
T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
|
T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
|
||||||
}
|
}
|
||||||
|
|
||||||
T0_DEFENTRY(br_x509_minimal_init_main, 147)
|
T0_DEFENTRY(br_x509_minimal_init_main, 144)
|
||||||
|
|
||||||
#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
|
#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
|
||||||
|
|
||||||
|
|
@ -1205,11 +1199,61 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 25: {
|
case 25: {
|
||||||
|
/* check-validity-range */
|
||||||
|
|
||||||
|
uint32_t nbs = T0_POP();
|
||||||
|
uint32_t nbd = T0_POP();
|
||||||
|
uint32_t nas = T0_POP();
|
||||||
|
uint32_t nad = T0_POP();
|
||||||
|
int r;
|
||||||
|
if (CTX->itime != 0) {
|
||||||
|
r = CTX->itime(CTX->itime_ctx, nbd, nbs, nad, nas);
|
||||||
|
if (r < -1 || r > 1) {
|
||||||
|
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
||||||
|
T0_CO();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uint32_t vd = CTX->days;
|
||||||
|
uint32_t vs = CTX->seconds;
|
||||||
|
if (vd == 0 && vs == 0) {
|
||||||
|
#if BR_USE_UNIX_TIME
|
||||||
|
time_t x = time(NULL);
|
||||||
|
|
||||||
|
vd = (uint32_t)(x / 86400) + 719528;
|
||||||
|
vs = (uint32_t)(x % 86400);
|
||||||
|
#elif BR_USE_WIN32_TIME
|
||||||
|
FILETIME ft;
|
||||||
|
uint64_t x;
|
||||||
|
|
||||||
|
GetSystemTimeAsFileTime(&ft);
|
||||||
|
x = ((uint64_t)ft.dwHighDateTime << 32)
|
||||||
|
+ (uint64_t)ft.dwLowDateTime;
|
||||||
|
x = (x / 10000000);
|
||||||
|
vd = (uint32_t)(x / 86400) + 584754;
|
||||||
|
vs = (uint32_t)(x % 86400);
|
||||||
|
#else
|
||||||
|
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
||||||
|
T0_CO();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (vd < nbd || (vd == nbd && vs < nbs)) {
|
||||||
|
r = -1;
|
||||||
|
} else if (vd > nad || (vd == nad && vs > nas)) {
|
||||||
|
r = 1;
|
||||||
|
} else {
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
T0_PUSHi(r);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 26: {
|
||||||
/* co */
|
/* co */
|
||||||
T0_CO();
|
T0_CO();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 26: {
|
case 27: {
|
||||||
/* compute-dn-hash */
|
/* compute-dn-hash */
|
||||||
|
|
||||||
CTX->dn_hash_impl->out(&CTX->dn_hash.vtable, CTX->current_dn_hash);
|
CTX->dn_hash_impl->out(&CTX->dn_hash.vtable, CTX->current_dn_hash);
|
||||||
|
|
@ -1217,7 +1261,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 27: {
|
case 28: {
|
||||||
/* compute-tbs-hash */
|
/* compute-tbs-hash */
|
||||||
|
|
||||||
int id = T0_POPi();
|
int id = T0_POPi();
|
||||||
|
|
@ -1227,7 +1271,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 28: {
|
case 29: {
|
||||||
/* copy-ee-ec-pkey */
|
/* copy-ee-ec-pkey */
|
||||||
|
|
||||||
size_t qlen = T0_POP();
|
size_t qlen = T0_POP();
|
||||||
|
|
@ -1240,7 +1284,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 29: {
|
case 30: {
|
||||||
/* copy-ee-rsa-pkey */
|
/* copy-ee-rsa-pkey */
|
||||||
|
|
||||||
size_t elen = T0_POP();
|
size_t elen = T0_POP();
|
||||||
|
|
@ -1254,7 +1298,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 30: {
|
case 31: {
|
||||||
/* copy-name-SAN */
|
/* copy-name-SAN */
|
||||||
|
|
||||||
unsigned tag = T0_POP();
|
unsigned tag = T0_POP();
|
||||||
|
|
@ -1280,7 +1324,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 31: {
|
case 32: {
|
||||||
/* copy-name-element */
|
/* copy-name-element */
|
||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
@ -1306,7 +1350,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 32: {
|
case 33: {
|
||||||
/* data-get8 */
|
/* data-get8 */
|
||||||
|
|
||||||
size_t addr = T0_POP();
|
size_t addr = T0_POP();
|
||||||
|
|
@ -1314,14 +1358,14 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 33: {
|
case 34: {
|
||||||
/* dn-hash-length */
|
/* dn-hash-length */
|
||||||
|
|
||||||
T0_PUSH(DNHASH_LEN);
|
T0_PUSH(DNHASH_LEN);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 34: {
|
case 35: {
|
||||||
/* do-ecdsa-vrfy */
|
/* do-ecdsa-vrfy */
|
||||||
|
|
||||||
size_t qlen = T0_POP();
|
size_t qlen = T0_POP();
|
||||||
|
|
@ -1336,7 +1380,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 35: {
|
case 36: {
|
||||||
/* do-rsa-vrfy */
|
/* do-rsa-vrfy */
|
||||||
|
|
||||||
size_t elen = T0_POP();
|
size_t elen = T0_POP();
|
||||||
|
|
@ -1352,17 +1396,17 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 36: {
|
case 37: {
|
||||||
/* drop */
|
/* drop */
|
||||||
(void)T0_POP();
|
(void)T0_POP();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 37: {
|
case 38: {
|
||||||
/* dup */
|
/* dup */
|
||||||
T0_PUSH(T0_PEEK(0));
|
T0_PUSH(T0_PEEK(0));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 38: {
|
case 39: {
|
||||||
/* eqOID */
|
/* eqOID */
|
||||||
|
|
||||||
const unsigned char *a2 = &t0_datablock[T0_POP()];
|
const unsigned char *a2 = &t0_datablock[T0_POP()];
|
||||||
|
|
@ -1378,7 +1422,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 39: {
|
case 40: {
|
||||||
/* eqblob */
|
/* eqblob */
|
||||||
|
|
||||||
size_t len = T0_POP();
|
size_t len = T0_POP();
|
||||||
|
|
@ -1388,42 +1432,12 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 40: {
|
case 41: {
|
||||||
/* fail */
|
/* fail */
|
||||||
|
|
||||||
CTX->err = T0_POPi();
|
CTX->err = T0_POPi();
|
||||||
T0_CO();
|
T0_CO();
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 41: {
|
|
||||||
/* get-system-date */
|
|
||||||
|
|
||||||
if (CTX->days == 0 && CTX->seconds == 0) {
|
|
||||||
#if BR_USE_UNIX_TIME
|
|
||||||
time_t x = time(NULL);
|
|
||||||
|
|
||||||
T0_PUSH((uint32_t)(x / 86400) + 719528);
|
|
||||||
T0_PUSH((uint32_t)(x % 86400));
|
|
||||||
#elif BR_USE_WIN32_TIME
|
|
||||||
FILETIME ft;
|
|
||||||
uint64_t x;
|
|
||||||
|
|
||||||
GetSystemTimeAsFileTime(&ft);
|
|
||||||
x = ((uint64_t)ft.dwHighDateTime << 32)
|
|
||||||
+ (uint64_t)ft.dwLowDateTime;
|
|
||||||
x = (x / 10000000);
|
|
||||||
T0_PUSH((uint32_t)(x / 86400) + 584754);
|
|
||||||
T0_PUSH((uint32_t)(x % 86400));
|
|
||||||
#else
|
|
||||||
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
|
||||||
T0_CO();
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
T0_PUSH(CTX->days);
|
|
||||||
T0_PUSH(CTX->seconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 42: {
|
case 42: {
|
||||||
|
|
@ -1579,16 +1593,11 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 51: {
|
case 51: {
|
||||||
/* roll */
|
|
||||||
T0_ROLL(T0_POP());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 52: {
|
|
||||||
/* rot */
|
/* rot */
|
||||||
T0_ROT();
|
T0_ROT();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 53: {
|
case 52: {
|
||||||
/* set16 */
|
/* set16 */
|
||||||
|
|
||||||
uint32_t addr = T0_POP();
|
uint32_t addr = T0_POP();
|
||||||
|
|
@ -1596,7 +1605,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 54: {
|
case 53: {
|
||||||
/* set32 */
|
/* set32 */
|
||||||
|
|
||||||
uint32_t addr = T0_POP();
|
uint32_t addr = T0_POP();
|
||||||
|
|
@ -1604,7 +1613,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 55: {
|
case 54: {
|
||||||
/* set8 */
|
/* set8 */
|
||||||
|
|
||||||
uint32_t addr = T0_POP();
|
uint32_t addr = T0_POP();
|
||||||
|
|
@ -1612,7 +1621,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 56: {
|
case 55: {
|
||||||
/* start-dn-hash */
|
/* start-dn-hash */
|
||||||
|
|
||||||
CTX->dn_hash_impl->init(&CTX->dn_hash.vtable);
|
CTX->dn_hash_impl->init(&CTX->dn_hash.vtable);
|
||||||
|
|
@ -1620,7 +1629,7 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 57: {
|
case 56: {
|
||||||
/* start-tbs-hash */
|
/* start-tbs-hash */
|
||||||
|
|
||||||
br_multihash_init(&CTX->mhash);
|
br_multihash_init(&CTX->mhash);
|
||||||
|
|
@ -1628,19 +1637,19 @@ br_x509_minimal_run(void *t0ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 58: {
|
case 57: {
|
||||||
/* stop-tbs-hash */
|
/* stop-tbs-hash */
|
||||||
|
|
||||||
CTX->do_mhash = 0;
|
CTX->do_mhash = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 59: {
|
case 58: {
|
||||||
/* swap */
|
/* swap */
|
||||||
T0_SWAP();
|
T0_SWAP();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 60: {
|
case 59: {
|
||||||
/* zero-server-name */
|
/* zero-server-name */
|
||||||
|
|
||||||
T0_PUSHi(-(CTX->server_name == NULL));
|
T0_PUSHi(-(CTX->server_name == NULL));
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ preamble {
|
||||||
* -- Extensions: extension values are processed in due order.
|
* -- Extensions: extension values are processed in due order.
|
||||||
*
|
*
|
||||||
* -- Basic Constraints: for all certificates except EE, must be
|
* -- Basic Constraints: for all certificates except EE, must be
|
||||||
* present, indicate a CA, and have a path legnth compatible with
|
* present, indicate a CA, and have a path length compatible with
|
||||||
* the chain length so far.
|
* the chain length so far.
|
||||||
*
|
*
|
||||||
* -- Key Usage: for the EE, if present, must allow signatures
|
* -- Key Usage: for the EE, if present, must allow signatures
|
||||||
|
|
@ -698,42 +698,60 @@ cc: copy-name-SAN ( bool tag -- ) {
|
||||||
\ Return the CN match flag.
|
\ Return the CN match flag.
|
||||||
eename-matches ;
|
eename-matches ;
|
||||||
|
|
||||||
\ Get the validation date and time from the context or system.
|
\ Check the provided validity range against the current (or configured)
|
||||||
cc: get-system-date ( -- days seconds ) {
|
\ date and time ("na" = notAfter, "nb = notBefore). Returned value:
|
||||||
if (CTX->days == 0 && CTX->seconds == 0) {
|
\ -1 current date/time is before the notBefore date
|
||||||
#if BR_USE_UNIX_TIME
|
\ 0 current date/time is within the allowed range
|
||||||
time_t x = time(NULL);
|
\ +1 current date/time is after the notAfter range
|
||||||
|
\ If the current date/time is not available, then this function triggers a
|
||||||
T0_PUSH((uint32_t)(x / 86400) + 719528);
|
\ failure and does not return.
|
||||||
T0_PUSH((uint32_t)(x % 86400));
|
cc: check-validity-range ( na-days na-seconds nb-days nb-seconds -- int ) {
|
||||||
#elif BR_USE_WIN32_TIME
|
uint32_t nbs = T0_POP();
|
||||||
FILETIME ft;
|
uint32_t nbd = T0_POP();
|
||||||
uint64_t x;
|
uint32_t nas = T0_POP();
|
||||||
|
uint32_t nad = T0_POP();
|
||||||
GetSystemTimeAsFileTime(&ft);
|
int r;
|
||||||
x = ((uint64_t)ft.dwHighDateTime << 32)
|
if (CTX->itime != 0) {
|
||||||
+ (uint64_t)ft.dwLowDateTime;
|
r = CTX->itime(CTX->itime_ctx, nbd, nbs, nad, nas);
|
||||||
x = (x / 10000000);
|
if (r < -1 || r > 1) {
|
||||||
T0_PUSH((uint32_t)(x / 86400) + 584754);
|
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
||||||
T0_PUSH((uint32_t)(x % 86400));
|
T0_CO();
|
||||||
#else
|
}
|
||||||
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
|
||||||
T0_CO();
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
T0_PUSH(CTX->days);
|
uint32_t vd = CTX->days;
|
||||||
T0_PUSH(CTX->seconds);
|
uint32_t vs = CTX->seconds;
|
||||||
|
if (vd == 0 && vs == 0) {
|
||||||
|
#if BR_USE_UNIX_TIME
|
||||||
|
time_t x = time(NULL);
|
||||||
|
|
||||||
|
vd = (uint32_t)(x / 86400) + 719528;
|
||||||
|
vs = (uint32_t)(x % 86400);
|
||||||
|
#elif BR_USE_WIN32_TIME
|
||||||
|
FILETIME ft;
|
||||||
|
uint64_t x;
|
||||||
|
|
||||||
|
GetSystemTimeAsFileTime(&ft);
|
||||||
|
x = ((uint64_t)ft.dwHighDateTime << 32)
|
||||||
|
+ (uint64_t)ft.dwLowDateTime;
|
||||||
|
x = (x / 10000000);
|
||||||
|
vd = (uint32_t)(x / 86400) + 584754;
|
||||||
|
vs = (uint32_t)(x % 86400);
|
||||||
|
#else
|
||||||
|
CTX->err = BR_ERR_X509_TIME_UNKNOWN;
|
||||||
|
T0_CO();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (vd < nbd || (vd == nbd && vs < nbs)) {
|
||||||
|
r = -1;
|
||||||
|
} else if (vd > nad || (vd == nad && vs > nas)) {
|
||||||
|
r = 1;
|
||||||
|
} else {
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
T0_PUSHi(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
\ Compare two dates (days+seconds) together.
|
|
||||||
: before ( days1 seconds1 days2 seconds2 -- bool )
|
|
||||||
{ d1 s1 d2 s2 }
|
|
||||||
d1 d2 = if s1 s2 < else d1 d2 < then ;
|
|
||||||
|
|
||||||
: after ( days1 seconds1 days2 seconds2 -- bool )
|
|
||||||
swap2 before ;
|
|
||||||
|
|
||||||
\ Swap the top two elements with the two elements immediately below.
|
\ Swap the top two elements with the two elements immediately below.
|
||||||
: swap2 ( a b c d -- c d a b )
|
: swap2 ( a b c d -- c d a b )
|
||||||
3 roll 3 roll ;
|
3 roll 3 roll ;
|
||||||
|
|
@ -1189,8 +1207,8 @@ OID: subjectInfoAccess 1.3.6.1.5.5.7.1.11
|
||||||
|
|
||||||
\ Validity dates.
|
\ Validity dates.
|
||||||
read-sequence-open
|
read-sequence-open
|
||||||
read-date get-system-date after if ERR_X509_EXPIRED fail then
|
read-date { nbd nbs } read-date nbd nbs check-validity-range
|
||||||
read-date get-system-date before if ERR_X509_EXPIRED fail then
|
if ERR_X509_EXPIRED fail then
|
||||||
close-elt
|
close-elt
|
||||||
|
|
||||||
\ Subject name.
|
\ Subject name.
|
||||||
|
|
|
||||||
224
test/test_x509.c
224
test/test_x509.c
|
|
@ -1438,6 +1438,21 @@ eqpkey(const br_x509_pkey *pk1, const br_x509_pkey *pk2)
|
||||||
static size_t max_dp_usage;
|
static size_t max_dp_usage;
|
||||||
static size_t max_rp_usage;
|
static size_t max_rp_usage;
|
||||||
|
|
||||||
|
static int
|
||||||
|
check_time(void *ctx, uint32_t nbd, uint32_t nbs, uint32_t nad, uint32_t nas)
|
||||||
|
{
|
||||||
|
test_case *tc;
|
||||||
|
|
||||||
|
tc = ctx;
|
||||||
|
if (tc->days < nbd || (tc->days == nbd && tc->seconds < nbs)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (tc->days > nad || (tc->days == nad && tc->seconds > nas)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
run_test_case(test_case *tc)
|
run_test_case(test_case *tc)
|
||||||
{
|
{
|
||||||
|
|
@ -1452,6 +1467,7 @@ run_test_case(test_case *tc)
|
||||||
const br_x509_pkey *ee_pkey;
|
const br_x509_pkey *ee_pkey;
|
||||||
unsigned usages;
|
unsigned usages;
|
||||||
unsigned status;
|
unsigned status;
|
||||||
|
int j;
|
||||||
|
|
||||||
printf("%s: ", tc->name);
|
printf("%s: ", tc->name);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
@ -1520,110 +1536,130 @@ run_test_case(test_case *tc)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialise the engine.
|
* We do the test twice, to exercise distinct API functions.
|
||||||
*/
|
*/
|
||||||
br_x509_minimal_init(&ctx, dnhash, anchors, num_anchors);
|
for (j = 0; j < 2; j ++) {
|
||||||
for (u = 0; hash_impls[u].id; u ++) {
|
/*
|
||||||
int id;
|
* Initialise the engine.
|
||||||
|
*/
|
||||||
|
br_x509_minimal_init(&ctx, dnhash, anchors, num_anchors);
|
||||||
|
for (u = 0; hash_impls[u].id; u ++) {
|
||||||
|
int id;
|
||||||
|
|
||||||
id = hash_impls[u].id;
|
id = hash_impls[u].id;
|
||||||
if ((tc->hashes & ((unsigned)1 << id)) != 0) {
|
if ((tc->hashes & ((unsigned)1 << id)) != 0) {
|
||||||
br_x509_minimal_set_hash(&ctx, id, hash_impls[u].impl);
|
br_x509_minimal_set_hash(&ctx,
|
||||||
}
|
id, hash_impls[u].impl);
|
||||||
}
|
|
||||||
br_x509_minimal_set_rsa(&ctx, br_rsa_pkcs1_vrfy_get_default());
|
|
||||||
br_x509_minimal_set_ecdsa(&ctx,
|
|
||||||
br_ec_get_default(), br_ecdsa_vrfy_asn1_get_default());
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the validation date.
|
|
||||||
*/
|
|
||||||
br_x509_minimal_set_time(&ctx, tc->days, tc->seconds);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Put "canaries" to detect actual stack usage.
|
|
||||||
*/
|
|
||||||
for (u = 0; u < (sizeof ctx.dp_stack) / sizeof(uint32_t); u ++) {
|
|
||||||
ctx.dp_stack[u] = 0xA7C083FE;
|
|
||||||
}
|
|
||||||
for (u = 0; u < (sizeof ctx.rp_stack) / sizeof(uint32_t); u ++) {
|
|
||||||
ctx.rp_stack[u] = 0xA7C083FE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Run the engine. We inject certificates by chunks of 100 bytes
|
|
||||||
* in order to exercise the coroutine API.
|
|
||||||
*/
|
|
||||||
ctx.vtable->start_chain(&ctx.vtable, tc->servername);
|
|
||||||
for (u = 0; u < num_certs; u ++) {
|
|
||||||
size_t v;
|
|
||||||
|
|
||||||
ctx.vtable->start_cert(&ctx.vtable, certs[u].len);
|
|
||||||
v = 0;
|
|
||||||
while (v < certs[u].len) {
|
|
||||||
size_t w;
|
|
||||||
|
|
||||||
w = certs[u].len - v;
|
|
||||||
if (w > 100) {
|
|
||||||
w = 100;
|
|
||||||
}
|
}
|
||||||
ctx.vtable->append(&ctx.vtable, certs[u].data + v, w);
|
|
||||||
v += w;
|
|
||||||
}
|
}
|
||||||
ctx.vtable->end_cert(&ctx.vtable);
|
br_x509_minimal_set_rsa(&ctx, br_rsa_pkcs1_vrfy_get_default());
|
||||||
}
|
br_x509_minimal_set_ecdsa(&ctx,
|
||||||
status = ctx.vtable->end_chain(&ctx.vtable);
|
br_ec_get_default(), br_ecdsa_vrfy_asn1_get_default());
|
||||||
ee_pkey = ctx.vtable->get_pkey(&ctx.vtable, &usages);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check key type and usage.
|
* Set the validation date.
|
||||||
*/
|
*/
|
||||||
if (ee_pkey != NULL) {
|
if (j == 0) {
|
||||||
unsigned ktu;
|
br_x509_minimal_set_time(&ctx, tc->days, tc->seconds);
|
||||||
|
} else {
|
||||||
|
br_x509_minimal_set_time_callback(&ctx,
|
||||||
|
tc, &check_time);
|
||||||
|
}
|
||||||
|
|
||||||
ktu = ee_pkey->key_type | usages;
|
/*
|
||||||
if (tc->key_type_usage != (ktu & tc->key_type_usage)) {
|
* Put "canaries" to detect actual stack usage.
|
||||||
fprintf(stderr, "wrong key type + usage"
|
*/
|
||||||
" (expected 0x%02X, got 0x%02X)\n",
|
for (u = 0; u < (sizeof ctx.dp_stack) / sizeof(uint32_t);
|
||||||
tc->key_type_usage, ktu);
|
u ++)
|
||||||
|
{
|
||||||
|
ctx.dp_stack[u] = 0xA7C083FE;
|
||||||
|
}
|
||||||
|
for (u = 0; u < (sizeof ctx.rp_stack) / sizeof(uint32_t);
|
||||||
|
u ++)
|
||||||
|
{
|
||||||
|
ctx.rp_stack[u] = 0xA7C083FE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Run the engine. We inject certificates by chunks of 100
|
||||||
|
* bytes in order to exercise the coroutine API.
|
||||||
|
*/
|
||||||
|
ctx.vtable->start_chain(&ctx.vtable, tc->servername);
|
||||||
|
for (u = 0; u < num_certs; u ++) {
|
||||||
|
size_t v;
|
||||||
|
|
||||||
|
ctx.vtable->start_cert(&ctx.vtable, certs[u].len);
|
||||||
|
v = 0;
|
||||||
|
while (v < certs[u].len) {
|
||||||
|
size_t w;
|
||||||
|
|
||||||
|
w = certs[u].len - v;
|
||||||
|
if (w > 100) {
|
||||||
|
w = 100;
|
||||||
|
}
|
||||||
|
ctx.vtable->append(&ctx.vtable,
|
||||||
|
certs[u].data + v, w);
|
||||||
|
v += w;
|
||||||
|
}
|
||||||
|
ctx.vtable->end_cert(&ctx.vtable);
|
||||||
|
}
|
||||||
|
status = ctx.vtable->end_chain(&ctx.vtable);
|
||||||
|
ee_pkey = ctx.vtable->get_pkey(&ctx.vtable, &usages);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check key type and usage.
|
||||||
|
*/
|
||||||
|
if (ee_pkey != NULL) {
|
||||||
|
unsigned ktu;
|
||||||
|
|
||||||
|
ktu = ee_pkey->key_type | usages;
|
||||||
|
if (tc->key_type_usage != (ktu & tc->key_type_usage)) {
|
||||||
|
fprintf(stderr, "wrong key type + usage"
|
||||||
|
" (expected 0x%02X, got 0x%02X)\n",
|
||||||
|
tc->key_type_usage, ktu);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check results. Note that we may still get a public key if
|
||||||
|
* the path is "not trusted" (but otherwise fine).
|
||||||
|
*/
|
||||||
|
if (status != tc->status) {
|
||||||
|
fprintf(stderr, "wrong status (got %d, expected %d)\n",
|
||||||
|
status, tc->status);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
if (status == BR_ERR_X509_NOT_TRUSTED) {
|
||||||
|
ee_pkey = NULL;
|
||||||
/*
|
|
||||||
* Check results. Note that we may still get a public key if
|
|
||||||
* the path is "not trusted" (but otherwise fine).
|
|
||||||
*/
|
|
||||||
if (status != tc->status) {
|
|
||||||
fprintf(stderr, "wrong status (got %d, expected %d)\n",
|
|
||||||
status, tc->status);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if (status == BR_ERR_X509_NOT_TRUSTED) {
|
|
||||||
ee_pkey = NULL;
|
|
||||||
}
|
|
||||||
if (!eqpkey(ee_pkey, ee_pkey_ref)) {
|
|
||||||
fprintf(stderr, "wrong EE public key\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check stack usage.
|
|
||||||
*/
|
|
||||||
for (u = (sizeof ctx.dp_stack) / sizeof(uint32_t); u > 0; u --) {
|
|
||||||
if (ctx.dp_stack[u - 1] != 0xA7C083FE) {
|
|
||||||
if (max_dp_usage < u) {
|
|
||||||
max_dp_usage = u;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
if (!eqpkey(ee_pkey, ee_pkey_ref)) {
|
||||||
for (u = (sizeof ctx.rp_stack) / sizeof(uint32_t); u > 0; u --) {
|
fprintf(stderr, "wrong EE public key\n");
|
||||||
if (ctx.rp_stack[u - 1] != 0xA7C083FE) {
|
exit(EXIT_FAILURE);
|
||||||
if (max_rp_usage < u) {
|
}
|
||||||
max_rp_usage = u;
|
|
||||||
|
/*
|
||||||
|
* Check stack usage.
|
||||||
|
*/
|
||||||
|
for (u = (sizeof ctx.dp_stack) / sizeof(uint32_t);
|
||||||
|
u > 0; u --)
|
||||||
|
{
|
||||||
|
if (ctx.dp_stack[u - 1] != 0xA7C083FE) {
|
||||||
|
if (max_dp_usage < u) {
|
||||||
|
max_dp_usage = u;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (u = (sizeof ctx.rp_stack) / sizeof(uint32_t);
|
||||||
|
u > 0; u --)
|
||||||
|
{
|
||||||
|
if (ctx.rp_stack[u - 1] != 0xA7C083FE) {
|
||||||
|
if (max_rp_usage < u) {
|
||||||
|
max_rp_usage = u;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue