]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/ecdsa: implement deterministic and hedged signatures
authorFilippo Valsorda <filippo@golang.org>
Sat, 16 Nov 2024 22:45:05 +0000 (23:45 +0100)
committerGopher Robot <gobot@golang.org>
Tue, 19 Nov 2024 23:02:26 +0000 (23:02 +0000)
For the future, some test vectors we should generate and then share
through Wycheproof or CCTV:
 - A private key with a leading zero byte.
 - A hash longer than the modulus.
 - A hash longer than the P-521 modulus by a few bits.
 - Reductions happening in hashToNat and bits2octets.

Fixes #64802

Change-Id: Ia0f89781b2c78eedd5103cf0e9720630711c37ad
Reviewed-on: https://go-review.googlesource.com/c/go/+/628681
TryBot-Bypass: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>

18 files changed:
src/crypto/ecdsa/ecdsa.go
src/crypto/ecdsa/ecdsa_legacy.go
src/crypto/ecdsa/ecdsa_test.go
src/crypto/internal/fips/ecdsa/cast.go
src/crypto/internal/fips/ecdsa/ecdsa.go
src/crypto/internal/fips/ecdsa/ecdsa_noasm.go
src/crypto/internal/fips/ecdsa/ecdsa_s390x.go
src/crypto/internal/fips/ecdsa/ecdsa_test.go
src/crypto/internal/fips/ecdsa/hmacdrbg.go
src/crypto/internal/fipstest/cast_test.go
src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
src/crypto/tls/testdata/Server-TLSv10-ECDHE-ECDSA-AES
src/crypto/tls/testdata/Server-TLSv12-ECDHE-ECDSA-AES
src/crypto/tls/testdata/Server-TLSv13-ECDHE-ECDSA-AES

index 4621cc9780c03410c9060222e0cc3e68776296e2..0c2e0bab45ca4b6743e26c75401be11b0c177d07 100644 (file)
@@ -16,8 +16,6 @@ package ecdsa
 
 import (
        "crypto"
-       "crypto/aes"
-       "crypto/cipher"
        "crypto/ecdh"
        "crypto/elliptic"
        "crypto/internal/boring"
@@ -131,14 +129,24 @@ func bigIntEqual(a, b *big.Int) bool {
        return subtle.ConstantTimeCompare(a.Bytes(), b.Bytes()) == 1
 }
 
-// Sign signs digest with priv, reading randomness from rand. The opts argument
-// is not currently used but, in keeping with the crypto.Signer interface,
-// should be the hash function used to digest the message.
+// Sign signs a hash (which should be the result of hashing a larger message
+// with opts.HashFunc()) using the private key, priv. If the hash is longer than
+// the bit-length of the private key's curve order, the hash will be truncated
+// to that length. It returns the ASN.1 encoded signature, like [SignASN1].
 //
-// This method implements crypto.Signer, which is an interface to support keys
-// where the private part is kept in, for example, a hardware module. Common
-// uses can use the [SignASN1] function in this package directly.
+// If rand is not nil, the signature is randomized. Most applications should use
+// [crypto/rand.Reader] as rand. Note that the returned signature does not
+// depend deterministically on the bytes read from rand, and may change between
+// calls and/or between versions.
+//
+// If rand is nil, Sign will produce a deterministic signature according to RFC
+// 6979. When producing a deterministic signature, opts.HashFunc() must be the
+// function used to produce digest and priv.Curve must be one of
+// [elliptic.P224], [elliptic.P256], [elliptic.P384], or [elliptic.P521].
 func (priv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
+       if rand == nil {
+               return signRFC6979(priv, digest, opts)
+       }
        return SignASN1(rand, priv, digest)
 }
 
@@ -205,34 +213,66 @@ func SignASN1(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error) {
        }
        boring.UnreachableExceptTests()
 
-       csprng, err := mixedCSPRNG(rand, priv, hash)
+       switch priv.Curve.Params() {
+       case elliptic.P224().Params():
+               return signFIPS(ecdsa.P224(), priv, rand, hash)
+       case elliptic.P256().Params():
+               return signFIPS(ecdsa.P256(), priv, rand, hash)
+       case elliptic.P384().Params():
+               return signFIPS(ecdsa.P384(), priv, rand, hash)
+       case elliptic.P521().Params():
+               return signFIPS(ecdsa.P521(), priv, rand, hash)
+       default:
+               return signLegacy(priv, rand, hash)
+       }
+}
+
+func signFIPS[P ecdsa.Point[P]](c *ecdsa.Curve[P], priv *PrivateKey, rand io.Reader, hash []byte) ([]byte, error) {
+       // privateKeyToFIPS is very slow in FIPS mode because it performs a
+       // Sign+Verify cycle per FIPS 140-3 IG 10.3.A. We should find a way to cache
+       // it or attach it to the PrivateKey.
+       k, err := privateKeyToFIPS(c, priv)
        if err != nil {
                return nil, err
        }
+       // Always using SHA-512 instead of the hash that computed hash is
+       // technically a violation of draft-irtf-cfrg-det-sigs-with-noise-04 but in
+       // our API we don't get to know what it was, and this has no security impact.
+       sig, err := ecdsa.Sign(c, sha512.New, k, rand, hash)
+       if err != nil {
+               return nil, err
+       }
+       return encodeSignature(sig.R, sig.S)
+}
 
+func signRFC6979(priv *PrivateKey, hash []byte, opts crypto.SignerOpts) ([]byte, error) {
+       if opts == nil {
+               return nil, errors.New("ecdsa: Sign called with nil opts")
+       }
+       h := opts.HashFunc()
+       if h.Size() != len(hash) {
+               return nil, errors.New("ecdsa: hash length does not match hash function")
+       }
        switch priv.Curve.Params() {
        case elliptic.P224().Params():
-               return signFIPS(ecdsa.P224(), priv, csprng, hash)
+               return signFIPSDeterministic(ecdsa.P224(), h, priv, hash)
        case elliptic.P256().Params():
-               return signFIPS(ecdsa.P256(), priv, csprng, hash)
+               return signFIPSDeterministic(ecdsa.P256(), h, priv, hash)
        case elliptic.P384().Params():
-               return signFIPS(ecdsa.P384(), priv, csprng, hash)
+               return signFIPSDeterministic(ecdsa.P384(), h, priv, hash)
        case elliptic.P521().Params():
-               return signFIPS(ecdsa.P521(), priv, csprng, hash)
+               return signFIPSDeterministic(ecdsa.P521(), h, priv, hash)
        default:
-               return signLegacy(priv, csprng, hash)
+               return nil, errors.New("ecdsa: curve not supported by deterministic signatures")
        }
 }
 
-func signFIPS[P ecdsa.Point[P]](c *ecdsa.Curve[P], priv *PrivateKey, csprng io.Reader, hash []byte) ([]byte, error) {
-       // privateKeyToFIPS is very slow in FIPS mode because it performs a
-       // Sign+Verify cycle per FIPS 140-3 IG 10.3.A. We should find a way to cache
-       // it or attach it to the PrivateKey.
+func signFIPSDeterministic[P ecdsa.Point[P]](c *ecdsa.Curve[P], hashFunc crypto.Hash, priv *PrivateKey, hash []byte) ([]byte, error) {
        k, err := privateKeyToFIPS(c, priv)
        if err != nil {
                return nil, err
        }
-       sig, err := ecdsa.Sign(c, k, csprng, hash)
+       sig, err := ecdsa.SignDeterministic(c, hashFunc.New, k, hash)
        if err != nil {
                return nil, err
        }
@@ -266,61 +306,6 @@ func addASN1IntBytes(b *cryptobyte.Builder, bytes []byte) {
        })
 }
 
-// mixedCSPRNG returns a CSPRNG that mixes entropy from rand with the message
-// and the private key, to protect the key in case rand fails. This is
-// equivalent in security to RFC 6979 deterministic nonce generation, but still
-// produces randomized signatures.
-func mixedCSPRNG(rand io.Reader, priv *PrivateKey, hash []byte) (io.Reader, error) {
-       // This implementation derives the nonce from an AES-CTR CSPRNG keyed by:
-       //
-       //    SHA2-512(priv.D || entropy || hash)[:32]
-       //
-       // The CSPRNG key is indifferentiable from a random oracle as shown in
-       // [Coron], the AES-CTR stream is indifferentiable from a random oracle
-       // under standard cryptographic assumptions (see [Larsson] for examples).
-       //
-       // [Coron]: https://cs.nyu.edu/~dodis/ps/merkle.pdf
-       // [Larsson]: https://web.archive.org/web/20040719170906/https://www.nada.kth.se/kurser/kth/2D1441/semteo03/lecturenotes/assump.pdf
-
-       // Get 256 bits of entropy from rand.
-       entropy := make([]byte, 32)
-       if _, err := io.ReadFull(rand, entropy); err != nil {
-               return nil, err
-       }
-
-       // Initialize an SHA-512 hash context; digest...
-       md := sha512.New()
-       md.Write(priv.D.Bytes()) // the private key,
-       md.Write(entropy)        // the entropy,
-       md.Write(hash)           // and the input hash;
-       key := md.Sum(nil)[:32]  // and compute ChopMD-256(SHA-512),
-       // which is an indifferentiable MAC.
-
-       // Create an AES-CTR instance to use as a CSPRNG.
-       block, err := aes.NewCipher(key)
-       if err != nil {
-               return nil, err
-       }
-
-       // Create a CSPRNG that xors a stream of zeros with
-       // the output of the AES-CTR instance.
-       const aesIV = "IV for ECDSA CTR"
-       return &cipher.StreamReader{
-               R: zeroReader,
-               S: cipher.NewCTR(block, []byte(aesIV)),
-       }, nil
-}
-
-type zr struct{}
-
-var zeroReader = zr{}
-
-// Read replaces the contents of dst with zeros. It is safe for concurrent use.
-func (zr) Read(dst []byte) (n int, err error) {
-       clear(dst)
-       return len(dst), nil
-}
-
 // VerifyASN1 verifies the ASN.1 encoded signature, sig, of hash using the
 // public key, pub. Its return value records whether the signature is valid.
 //
index cb1e89e68dcb7de83122e042a1aec2acaefa3de3..a6590a5de36f076642c04a6ac48c9ae247ad1371 100644 (file)
@@ -9,6 +9,7 @@ import (
        "errors"
        "io"
        "math/big"
+       "math/rand/v2"
 
        "golang.org/x/crypto/cryptobyte"
        "golang.org/x/crypto/cryptobyte/asn1"
@@ -77,6 +78,19 @@ func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err err
 func signLegacy(priv *PrivateKey, csprng io.Reader, hash []byte) (sig []byte, err error) {
        c := priv.Curve
 
+       // A cheap version of hedged signatures, for the deprecated path.
+       var seed [32]byte
+       if _, err := io.ReadFull(csprng, seed[:]); err != nil {
+               return nil, err
+       }
+       for i, b := range priv.D.Bytes() {
+               seed[i%32] ^= b
+       }
+       for i, b := range hash {
+               seed[i%32] ^= b
+       }
+       csprng = rand.NewChaCha8(seed)
+
        // SEC 1, Version 2.0, Section 4.1.3
        N := c.Params().N
        if N.Sign() == 0 {
index 6149db1dd2bd6d26f1274c82d88805e5ff593331..84b127dc0ff962cb2c5f1085bd758c5c42d68dfc 100644 (file)
@@ -6,7 +6,9 @@ package ecdsa
 
 import (
        "bufio"
+       "bytes"
        "compress/bzip2"
+       "crypto"
        "crypto/elliptic"
        "crypto/internal/cryptotest"
        "crypto/rand"
@@ -149,6 +151,15 @@ func testNonceSafety(t *testing.T, c elliptic.Curve) {
        }
 }
 
+type readerFunc func([]byte) (int, error)
+
+func (f readerFunc) Read(b []byte) (int, error) { return f(b) }
+
+var zeroReader = readerFunc(func(b []byte) (int, error) {
+       clear(b)
+       return len(b), nil
+})
+
 func TestINDCCA(t *testing.T) {
        testAllCurves(t, testINDCCA)
 }
@@ -425,6 +436,116 @@ func testRMinusNSignature(t *testing.T, curve elliptic.Curve) {
        }
 }
 
+func TestRFC6979(t *testing.T) {
+       t.Run("P-224", func(t *testing.T) {
+               testRFC6979(t, elliptic.P224(),
+                       "F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1",
+                       "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+                       "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+                       "sample",
+                       "61AA3DA010E8E8406C656BC477A7A7189895E7E840CDFE8FF42307BA",
+                       "BC814050DAB5D23770879494F9E0A680DC1AF7161991BDE692B10101")
+               testRFC6979(t, elliptic.P224(),
+                       "F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1",
+                       "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+                       "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+                       "test",
+                       "AD04DDE87B84747A243A631EA47A1BA6D1FAA059149AD2440DE6FBA6",
+                       "178D49B1AE90E3D8B629BE3DB5683915F4E8C99FDF6E666CF37ADCFD")
+       })
+       t.Run("P-256", func(t *testing.T) {
+               // This vector was bruteforced to find a message that causes the
+               // generation of k to loop. It was checked against
+               // github.com/codahale/rfc6979 (https://go.dev/play/p/FK5-fmKf7eK),
+               // OpenSSL 3.2.0 (https://github.com/openssl/openssl/pull/23130),
+               // and python-ecdsa:
+               //
+               //    ecdsa.keys.SigningKey.from_secret_exponent(
+               //        0xC9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721,
+               //        ecdsa.curves.curve_by_name("NIST256p"), hashlib.sha256).sign_deterministic(
+               //        b"wv[vnX", hashlib.sha256, lambda r, s, order: print(hex(r), hex(s)))
+               //
+               testRFC6979(t, elliptic.P256(),
+                       "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721",
+                       "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+                       "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+                       "wv[vnX",
+                       "EFD9073B652E76DA1B5A019C0E4A2E3FA529B035A6ABB91EF67F0ED7A1F21234",
+                       "3DB4706C9D9F4A4FE13BB5E08EF0FAB53A57DBAB2061C83A35FA411C68D2BA33")
+
+               // The remaining vectors are from RFC 6979.
+               testRFC6979(t, elliptic.P256(),
+                       "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721",
+                       "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+                       "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+                       "sample",
+                       "EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716",
+                       "F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8")
+               testRFC6979(t, elliptic.P256(),
+                       "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721",
+                       "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+                       "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+                       "test",
+                       "F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367",
+                       "019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083")
+       })
+       t.Run("P-384", func(t *testing.T) {
+               testRFC6979(t, elliptic.P384(),
+                       "6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5",
+                       "EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+                       "8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+                       "sample",
+                       "21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD",
+                       "F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0")
+               testRFC6979(t, elliptic.P384(),
+                       "6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5",
+                       "EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+                       "8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+                       "test",
+                       "6D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B",
+                       "2D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265")
+       })
+       t.Run("P-521", func(t *testing.T) {
+               testRFC6979(t, elliptic.P521(),
+                       "0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538",
+                       "1894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+                       "0493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+                       "sample",
+                       "1511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A7",
+                       "04A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC")
+               testRFC6979(t, elliptic.P521(),
+                       "0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538",
+                       "1894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+                       "0493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+                       "test",
+                       "00E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D8071042EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656AA8",
+                       "0CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694E86")
+       })
+}
+
+func testRFC6979(t *testing.T, curve elliptic.Curve, D, X, Y, msg, r, s string) {
+       priv := &PrivateKey{
+               D: fromHex(D),
+               PublicKey: PublicKey{
+                       Curve: curve,
+                       X:     fromHex(X),
+                       Y:     fromHex(Y),
+               },
+       }
+       h := sha256.Sum256([]byte(msg))
+       sig, err := priv.Sign(nil, h[:], crypto.SHA256)
+       if err != nil {
+               t.Fatal(err)
+       }
+       expected, err := encodeSignature(fromHex(r).Bytes(), fromHex(s).Bytes())
+       if err != nil {
+               t.Fatal(err)
+       }
+       if !bytes.Equal(sig, expected) {
+               t.Errorf("signature mismatch:\n got: %x\nwant: %x", sig, expected)
+       }
+}
+
 func benchmarkAllCurves(b *testing.B, f func(*testing.B, elliptic.Curve)) {
        tests := []struct {
                name  string
index 9982e1abc3ac2fa31ec34feaf542570af7fb7b40..0fcc626f9c00ddf7cafd39cab7b60c6503f9409e 100644 (file)
@@ -7,55 +7,85 @@ package ecdsa
 import (
        "bytes"
        "crypto/internal/fips"
-       "crypto/internal/fips/sha256"
+       "crypto/internal/fips/sha512"
        "errors"
        "sync"
 )
 
+func testPrivateKey() *PrivateKey {
+       // https://www.rfc-editor.org/rfc/rfc9500.html#section-2.3
+       return &PrivateKey{
+               pub: PublicKey{
+                       curve: p256,
+                       q: []byte{
+                               0x04,
+                               0x42, 0x25, 0x48, 0xF8, 0x8F, 0xB7, 0x82, 0xFF,
+                               0xB5, 0xEC, 0xA3, 0x74, 0x44, 0x52, 0xC7, 0x2A,
+                               0x1E, 0x55, 0x8F, 0xBD, 0x6F, 0x73, 0xBE, 0x5E,
+                               0x48, 0xE9, 0x32, 0x32, 0xCC, 0x45, 0xC5, 0xB1,
+                               0x6C, 0x4C, 0xD1, 0x0C, 0x4C, 0xB8, 0xD5, 0xB8,
+                               0xA1, 0x71, 0x39, 0xE9, 0x48, 0x82, 0xC8, 0x99,
+                               0x25, 0x72, 0x99, 0x34, 0x25, 0xF4, 0x14, 0x19,
+                               0xAB, 0x7E, 0x90, 0xA4, 0x2A, 0x49, 0x42, 0x72},
+               },
+               d: []byte{
+                       0xE6, 0xCB, 0x5B, 0xDD, 0x80, 0xAA, 0x45, 0xAE,
+                       0x9C, 0x95, 0xE8, 0xC1, 0x54, 0x76, 0x67, 0x9F,
+                       0xFE, 0xC9, 0x53, 0xC1, 0x68, 0x51, 0xE7, 0x11,
+                       0xE7, 0x43, 0x93, 0x95, 0x89, 0xC6, 0x4F, 0xC1,
+               },
+       }
+}
+
+func testHash() []byte {
+       return []byte{
+               0x17, 0x1b, 0x1f, 0x5e, 0x9f, 0x8f, 0x8c, 0x5c,
+               0x42, 0xe8, 0x06, 0x59, 0x7b, 0x54, 0xc7, 0xb4,
+               0x49, 0x05, 0xa1, 0xdb, 0x3a, 0x3c, 0x31, 0xd3,
+               0xb7, 0x56, 0x45, 0x8c, 0xc2, 0xd6, 0x88, 0x62,
+               0x9e, 0xd6, 0x7b, 0x9b, 0x25, 0x68, 0xd6, 0xc6,
+               0x18, 0x94, 0x1e, 0xfe, 0xe3, 0x33, 0x78, 0xa6,
+               0xe1, 0xce, 0x13, 0x88, 0x81, 0x26, 0x02, 0x52,
+               0xdf, 0xc2, 0x0a, 0xf2, 0x67, 0x49, 0x0a, 0x20,
+       }
+}
+
+func fipsPCT[P Point[P]](c *Curve[P], k *PrivateKey) error {
+       hash := testHash()
+       sig, err := Sign(c, sha512.New, k, nil, hash)
+       if err != nil {
+               return err
+       }
+       return Verify(c, &k.pub, hash, sig)
+}
+
 var fipsSelfTest = sync.OnceFunc(func() {
-       fips.CAST("ECDSA P-256 SHA2-256", func() error {
-               // https://www.rfc-editor.org/rfc/rfc9500.html#section-2.3
-               k := &PrivateKey{
-                       pub: PublicKey{
-                               curve: p256,
-                               q: []byte{
-                                       0x04,
-                                       0x42, 0x25, 0x48, 0xF8, 0x8F, 0xB7, 0x82, 0xFF,
-                                       0xB5, 0xEC, 0xA3, 0x74, 0x44, 0x52, 0xC7, 0x2A,
-                                       0x1E, 0x55, 0x8F, 0xBD, 0x6F, 0x73, 0xBE, 0x5E,
-                                       0x48, 0xE9, 0x32, 0x32, 0xCC, 0x45, 0xC5, 0xB1,
-                                       0x6C, 0x4C, 0xD1, 0x0C, 0x4C, 0xB8, 0xD5, 0xB8,
-                                       0xA1, 0x71, 0x39, 0xE9, 0x48, 0x82, 0xC8, 0x99,
-                                       0x25, 0x72, 0x99, 0x34, 0x25, 0xF4, 0x14, 0x19,
-                                       0xAB, 0x7E, 0x90, 0xA4, 0x2A, 0x49, 0x42, 0x72},
-                       },
-                       d: []byte{
-                               0xE6, 0xCB, 0x5B, 0xDD, 0x80, 0xAA, 0x45, 0xAE,
-                               0x9C, 0x95, 0xE8, 0xC1, 0x54, 0x76, 0x67, 0x9F,
-                               0xFE, 0xC9, 0x53, 0xC1, 0x68, 0x51, 0xE7, 0x11,
-                               0xE7, 0x43, 0x93, 0x95, 0x89, 0xC6, 0x4F, 0xC1,
-                       },
+       fips.CAST("ECDSA P-256 SHA2-512 sign and verify", func() error {
+               k := testPrivateKey()
+               Z := []byte{
+                       0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+                       0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
                }
-               hash := []byte{
-                       0x32, 0xb3, 0xda, 0x19, 0xf9, 0x44, 0xb0, 0x48,
-                       0x66, 0xd9, 0x31, 0xa6, 0x6c, 0x30, 0xb9, 0x4a,
-                       0xe7, 0x28, 0xcc, 0xe7, 0x00, 0xe4, 0xb0, 0xa5,
-                       0xb4, 0xfe, 0xae, 0x8f, 0x43, 0x8f, 0xde, 0xc2,
+               persStr := []byte{
+                       0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+                       0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
                }
+               hash := testHash()
                want := &Signature{
                        R: []byte{
-                               0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47,
-                               0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2,
-                               0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,
-                               0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96,
+                               0x33, 0x64, 0x96, 0xff, 0x8a, 0xfe, 0xaa, 0x0b,
+                               0x2c, 0x4a, 0x1a, 0x97, 0x77, 0xcc, 0x84, 0xa5,
+                               0x7e, 0x88, 0x1f, 0x16, 0x2d, 0xe0, 0x29, 0xf7,
+                               0x62, 0xc2, 0x34, 0x18, 0x10, 0x9c, 0x69, 0x8a,
                        }, S: []byte{
-                               0x2d, 0x4f, 0x31, 0xc9, 0x07, 0x35, 0x74, 0x2b,
-                               0x82, 0x04, 0x19, 0xa0, 0x97, 0xb1, 0x4a, 0x75,
-                               0x99, 0xf7, 0x8a, 0x54, 0xf8, 0x3b, 0xe9, 0x89,
-                               0x50, 0x26, 0x35, 0x32, 0x52, 0x0f, 0x73, 0xfc,
+                               0x97, 0x53, 0x2e, 0x13, 0x6e, 0xd0, 0x9b, 0x30,
+                               0x8a, 0xdf, 0x4f, 0xe0, 0x54, 0x82, 0x14, 0x83,
+                               0x5e, 0x93, 0xc7, 0x79, 0x4b, 0x18, 0xa3, 0xf1,
+                               0x8a, 0x60, 0xae, 0x52, 0x31, 0xe4, 0x2e, 0x4e,
                        },
                }
-               got, err := sign(P256(), k, testingOnlyFixedRandomPoint, hash)
+               drbg := newDRBG(sha512.New, Z, nil, plainPersonalizationString(persStr))
+               got, err := sign(P256(), k, drbg, hash)
                if err != nil {
                        return err
                }
@@ -69,32 +99,34 @@ var fipsSelfTest = sync.OnceFunc(func() {
        })
 })
 
-func init() {
-       fips.CAST("HMAC_DRBG SHA2-256", func() error {
-               entropy := []byte{
-                       0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-                       0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
-               }
-               nonce := []byte{
-                       0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
-                       0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
+var fipsSelfTestDeterministic = sync.OnceFunc(func() {
+       fips.CAST("DetECDSA P-256 SHA2-512 sign", func() error {
+               k := testPrivateKey()
+               hash := testHash()
+               want := &Signature{
+                       R: []byte{
+                               0x9f, 0xc3, 0x83, 0x32, 0x6e, 0xd9, 0x4f, 0x8e,
+                               0x24, 0xa0, 0x19, 0xef, 0x1d, 0x3a, 0xc3, 0x55,
+                               0xdd, 0x4b, 0x98, 0xae, 0x78, 0xa7, 0xaf, 0xd3,
+                               0xfd, 0xf3, 0x22, 0x1c, 0x8b, 0xd6, 0x11, 0x7b,
+                       }, S: []byte{
+                               0xd6, 0x52, 0x87, 0x41, 0x71, 0xbd, 0x66, 0xd1,
+                               0xaf, 0x6c, 0x61, 0xdd, 0xd8, 0xa7, 0xbb, 0xd2,
+                               0xf7, 0xd5, 0x47, 0x70, 0xe9, 0xe4, 0xac, 0x0a,
+                               0xb9, 0xfa, 0x0f, 0xbd, 0x3b, 0x9b, 0xc2, 0xfe,
+                       },
                }
-               personalizationString := []byte{
-                       0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
-                       0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
+               drbg := newDRBG(sha512.New, k.d, bits2octets(P256(), hash), nil)
+               got, err := sign(P256(), k, drbg, hash)
+               if err != nil {
+                       return err
                }
-               want := []byte{
-                       0xc7, 0xff, 0x15, 0xb9, 0x68, 0x9a, 0x1d, 0x12,
-                       0x67, 0x67, 0x4b, 0xd4, 0x11, 0x27, 0xf3, 0xa6,
-                       0xa8, 0x8c, 0x1e, 0xd1, 0x58, 0xee, 0xda, 0x21,
-                       0x6e, 0x3c, 0xce, 0x84, 0xce, 0x45, 0x5e, 0xdb,
+               if err := verify(P256(), &k.pub, hash, got); err != nil {
+                       return err
                }
-               c := newDRBG(sha256.New, entropy, nonce, personalizationString)
-               got := make([]byte, len(want))
-               c.Generate(got)
-               if !bytes.Equal(got, want) {
+               if !bytes.Equal(got.R, want.R) || !bytes.Equal(got.S, want.S) {
                        return errors.New("unexpected result")
                }
                return nil
        })
-}
+})
index ee30fcbcb41bee4feae6479cafa4a0e870043f47..36f8cb3bb77229c97c8a73f5cc7b78f19a66fc49 100644 (file)
@@ -10,6 +10,7 @@ import (
        "crypto/internal/fips/bigmod"
        "crypto/internal/fips/drbg"
        "crypto/internal/fips/nistec"
+       "crypto/internal/randutil"
        "errors"
        "io"
        "sync"
@@ -186,10 +187,21 @@ func NewPublicKey[P Point[P]](c *Curve[P], Q []byte) (*PublicKey, error) {
 // In FIPS mode, rand is ignored.
 func GenerateKey[P Point[P]](c *Curve[P], rand io.Reader) (*PrivateKey, error) {
        fips.RecordApproved()
-       k, Q, err := randomPoint(c, rand)
+
+       k, Q, err := randomPoint(c, func(b []byte) error {
+               if fips.Enabled {
+                       drbg.Read(b)
+                       return nil
+               } else {
+                       randutil.MaybeReadByte(rand)
+                       _, err := io.ReadFull(rand, b)
+                       return err
+               }
+       })
        if err != nil {
                return nil, err
        }
+
        priv := &PrivateKey{
                pub: PublicKey{
                        curve: c.curve,
@@ -201,62 +213,35 @@ func GenerateKey[P Point[P]](c *Curve[P], rand io.Reader) (*PrivateKey, error) {
        return priv, nil
 }
 
-func fipsPCT[P Point[P]](c *Curve[P], k *PrivateKey) error {
-       hash := []byte{
-               0x32, 0xb3, 0xda, 0x19, 0xf9, 0x44, 0xb0, 0x48,
-               0x66, 0xd9, 0x31, 0xa6, 0x6c, 0x30, 0xb9, 0x4a,
-               0xe7, 0x28, 0xcc, 0xe7, 0x00, 0xe4, 0xb0, 0xa5,
-               0xb4, 0xfe, 0xae, 0x8f, 0x43, 0x8f, 0xde, 0xc2,
-       }
-       sig, err := Sign(c, k, nil, hash)
-       if err != nil {
-               return err
-       }
-       return Verify(c, &k.pub, hash, sig)
-}
-
-type testingOnlyFixedRandomPointReader struct{}
-
-func (testingOnlyFixedRandomPointReader) Read(p []byte) (int, error) { panic("not implemented") }
-
-// testingOnlyFixedRandomPoint is a signal to Sign that it should use a fixed
-// random point to enable the CAST. This is extremely dangerous because if it
-// were used with a production private key it would leak the private key.
-// We use this rather than a global variable to avoid accidentally using it in
-// production code. Still wish we didn't have to do this.
-var testingOnlyFixedRandomPoint = testingOnlyFixedRandomPointReader{}
-
 // randomPoint returns a random scalar and the corresponding point using a
 // procedure equivalent to FIPS 186-5, Appendix A.2.2 (ECDSA Key Pair Generation
-// by Rejection Sampling) and to Appendix A.2.2 (Per-Message Secret Number
-// Generation of Private Keys by Rejection Sampling) followed by Step 5 of
-// Section 6.4.1.
-func randomPoint[P Point[P]](c *Curve[P], rand io.Reader) (k *bigmod.Nat, p P, err error) {
+// by Rejection Sampling) and to Appendix A.3.2 (Per-Message Secret Number
+// Generation of Private Keys by Rejection Sampling) or Appendix A.3.3
+// (Per-Message Secret Number Generation for Deterministic ECDSA) followed by
+// Step 5 of Section 6.4.1.
+func randomPoint[P Point[P]](c *Curve[P], generate func([]byte) error) (k *bigmod.Nat, p P, err error) {
        for {
                b := make([]byte, c.N.Size())
-               if fips.Enabled {
-                       if rand == testingOnlyFixedRandomPoint {
-                               b[len(b)-1] = 1
-                       } else {
-                               drbg.Read(b)
-                       }
-               } else {
-                       if _, err := io.ReadFull(rand, b); err != nil {
-                               return nil, nil, err
-                       }
+               if err := generate(b); err != nil {
+                       return nil, nil, err
                }
 
-               // Mask off any excess bits to increase the chance of hitting a value in
-               // (0, N). These are the most dangerous lines in the package and maybe in
-               // the library: a single bit of bias in the selection of nonces would likely
+               // Take only the leftmost bits of the generated random value. This is
+               // both necessary to increase the chance of the random value being in
+               // the correct range and to match the specification. It's unfortunate
+               // that we need to do a shift instead of a mask, but see the comment on
+               // rightShift.
+               //
+               // These are the most dangerous lines in the package and maybe in the
+               // library: a single bit of bias in the selection of nonces would likely
                // lead to key recovery, but no tests would fail. Look but DO NOT TOUCH.
                if excess := len(b)*8 - c.N.BitLen(); excess > 0 {
                        // Just to be safe, assert that this only happens for the one curve that
                        // doesn't have a round number of bits.
-                       if excess != 0 && c.curve != p521 {
+                       if c.curve != p521 {
                                panic("ecdsa: internal error: unexpectedly masking off bits")
                        }
-                       b[0] >>= excess
+                       b = rightShift(b, excess)
                }
 
                // FIPS 186-5, Appendix A.4.2 makes us check x <= N - 2 and then return
@@ -285,24 +270,75 @@ type Signature struct {
        R, S []byte
 }
 
-// Sign signs a hash (which should be the result of hashing a larger message)
-// using the private key, priv. If the hash is longer than the bit-length of the
-// private key's curve order, the hash will be truncated to that length.
+// Sign signs a hash (which shall be the result of hashing a larger message with
+// the hash function H) using the private key, priv. If the hash is longer than
+// the bit-length of the private key's curve order, the hash will be truncated
+// to that length.
 //
-// The signature is randomized. If FIPS mode is enabled, csprng is ignored.
-func Sign[P Point[P]](c *Curve[P], priv *PrivateKey, csprng io.Reader, hash []byte) (*Signature, error) {
+// The signature is randomized. If FIPS mode is enabled, rand is ignored.
+func Sign[P Point[P], H fips.Hash](c *Curve[P], h func() H, priv *PrivateKey, rand io.Reader, hash []byte) (*Signature, error) {
        if priv.pub.curve != c.curve {
                return nil, errors.New("ecdsa: private key does not match curve")
        }
        fips.RecordApproved()
        fipsSelfTest()
-       return sign(c, priv, csprng, hash)
+
+       // Random ECDSA is dangerous, because a failure of the RNG would immediately
+       // leak the private key. Instead, we use a "hedged" approach, as specified
+       // in draft-irtf-cfrg-det-sigs-with-noise-04, Section 4. This has also the
+       // advantage of closely resembling Deterministic ECDSA.
+
+       Z := make([]byte, len(priv.d))
+       if fips.Enabled {
+               drbg.Read(Z)
+       } else {
+               randutil.MaybeReadByte(rand)
+               if _, err := io.ReadFull(rand, Z); err != nil {
+                       return nil, err
+               }
+       }
+
+       // See https://github.com/cfrg/draft-irtf-cfrg-det-sigs-with-noise/issues/6
+       // for the FIPS compliance of this method. In short Z is entropy from the
+       // main DRBG, of length 3/2 of security_strength, so the nonce is optional
+       // per SP 800-90Ar1, Section 8.6.7, and the rest is a personalization
+       // string, which per SP 800-90Ar1, Section 8.7.1 may contain secret
+       // information.
+       drbg := newDRBG(h, Z, nil, blockAlignedPersonalizationString{priv.d, bits2octets(c, hash)})
+
+       return sign(c, priv, drbg, hash)
+}
+
+// SignDeterministic signs a hash (which shall be the result of hashing a
+// larger message with the hash function H) using the private key, priv. If the
+// hash is longer than the bit-length of the private key's curve order, the hash
+// will be truncated to that length. This applies Deterministic ECDSA as
+// specified in FIPS 186-5 and RFC 6979.
+func SignDeterministic[P Point[P], H fips.Hash](c *Curve[P], h func() H, priv *PrivateKey, hash []byte) (*Signature, error) {
+       if priv.pub.curve != c.curve {
+               return nil, errors.New("ecdsa: private key does not match curve")
+       }
+       fips.RecordApproved()
+       fipsSelfTestDeterministic()
+       drbg := newDRBG(h, priv.d, bits2octets(c, hash), nil) // RFC 6979, Section 3.3
+       return sign(c, priv, drbg, hash)
 }
 
-func signGeneric[P Point[P]](c *Curve[P], priv *PrivateKey, csprng io.Reader, hash []byte) (*Signature, error) {
+// bits2octets as specified in FIPS 186-5, Appendix B.2.4 or RFC 6979,
+// Section 2.3.4. See RFC 6979, Section 3.5 for the rationale.
+func bits2octets[P Point[P]](c *Curve[P], hash []byte) []byte {
+       e := bigmod.NewNat()
+       hashToNat(c, e, hash)
+       return e.Bytes(c.N)
+}
+
+func signGeneric[P Point[P]](c *Curve[P], priv *PrivateKey, drbg *hmacDRBG, hash []byte) (*Signature, error) {
        // FIPS 186-5, Section 6.4.1
 
-       k, R, err := randomPoint(c, csprng)
+       k, R, err := randomPoint(c, func(b []byte) error {
+               drbg.Generate(b)
+               return nil
+       })
        if err != nil {
                return nil, err
        }
@@ -375,13 +411,7 @@ func hashToNat[P Point[P]](c *Curve[P], e *bigmod.Nat, hash []byte) {
        if size := c.N.Size(); len(hash) >= size {
                hash = hash[:size]
                if excess := len(hash)*8 - c.N.BitLen(); excess > 0 {
-                       hash = bytes.Clone(hash)
-                       for i := len(hash) - 1; i >= 0; i-- {
-                               hash[i] >>= excess
-                               if i > 0 {
-                                       hash[i] |= hash[i-1] << (8 - excess)
-                               }
-                       }
+                       hash = rightShift(hash, excess)
                }
        }
        _, err := e.SetOverflowingBytes(hash, c.N)
@@ -390,6 +420,25 @@ func hashToNat[P Point[P]](c *Curve[P], e *bigmod.Nat, hash []byte) {
        }
 }
 
+// rightShift implements the right shift necessary for bits2int, which takes the
+// leftmost bits of either the hash or HMAC_DRBG output.
+//
+// Note how taking the rightmost bits would have been as easy as masking the
+// first byte, but we can't have nice things.
+func rightShift(b []byte, shift int) []byte {
+       if shift <= 0 || shift >= 8 {
+               panic("ecdsa: internal error: shift can only be by 1 to 7 bits")
+       }
+       b = bytes.Clone(b)
+       for i := len(b) - 1; i >= 0; i-- {
+               b[i] >>= shift
+               if i > 0 {
+                       b[i] |= b[i-1] << (8 - shift)
+               }
+       }
+       return b
+}
+
 // Verify verifies the signature, sig, of hash (which should be the result of
 // hashing a larger message) using the public key, pub. If the hash is longer
 // than the bit-length of the private key's curve order, the hash will be
index 3d548b0db4fafbc85e8b0a4f1d317208a089345a..ffcc9fa08846717897de4d9a99332b0114781764 100644 (file)
@@ -6,10 +6,8 @@
 
 package ecdsa
 
-import "io"
-
-func sign[P Point[P]](c *Curve[P], priv *PrivateKey, csprng io.Reader, hash []byte) (*Signature, error) {
-       return signGeneric(c, priv, csprng, hash)
+func sign[P Point[P]](c *Curve[P], priv *PrivateKey, drbg *hmacDRBG, hash []byte) (*Signature, error) {
+       return signGeneric(c, priv, drbg, hash)
 }
 
 func verify[P Point[P]](c *Curve[P], pub *PublicKey, hash []byte, sig *Signature) error {
index 475c141d3a4b1bd24c3b93689a19bc6d75068cee..01e877067d49f6f2dbfeaae443c8eadf40efa12f 100644 (file)
@@ -11,7 +11,6 @@ import (
        "crypto/internal/fipsdeps/cpu"
        "crypto/internal/impl"
        "errors"
-       "io"
 )
 
 // kdsa invokes the "compute digital signature authentication"
@@ -59,13 +58,16 @@ func hashToBytes[P Point[P]](c *Curve[P], dst, hash []byte) {
        copy(dst, e.Bytes(c.N))
 }
 
-func sign[P Point[P]](c *Curve[P], priv *PrivateKey, csprng io.Reader, hash []byte) (*Signature, error) {
+func sign[P Point[P]](c *Curve[P], priv *PrivateKey, drbg *hmacDRBG, hash []byte) (*Signature, error) {
        functionCode, blockSize, ok := canUseKDSA(c.curve)
        if !ok {
-               return signGeneric(c, priv, csprng, hash)
+               return signGeneric(c, priv, drbg, hash)
        }
        for {
-               k, _, err := randomPoint(c, csprng)
+               k, _, err := randomPoint(c, func(b []byte) error {
+                       drbg.Generate(b)
+                       return nil
+               })
                if err != nil {
                        return nil, err
                }
index cc53065b48e5f442a80615c44a8320a7c3c72bc6..583a19de4c5973f1b3f4920f7083e97551ec7b7a 100644 (file)
@@ -27,7 +27,10 @@ func testRandomPoint[P Point[P]](t *testing.T, c *Curve[P]) {
        // A sequence of all ones will generate 2^N-1, which should be rejected.
        // (Unless, for example, we are masking too many bits.)
        r := io.MultiReader(bytes.NewReader(bytes.Repeat([]byte{0xff}, 100)), rand.Reader)
-       if k, p, err := randomPoint(c, r); err != nil {
+       if k, p, err := randomPoint(c, func(b []byte) error {
+               _, err := r.Read(b)
+               return err
+       }); err != nil {
                t.Fatal(err)
        } else if k.IsZero() == 1 {
                t.Error("k is zero")
@@ -41,7 +44,10 @@ func testRandomPoint[P Point[P]](t *testing.T, c *Curve[P]) {
 
        // A sequence of all zeroes will generate zero, which should be rejected.
        r = io.MultiReader(bytes.NewReader(bytes.Repeat([]byte{0}, 100)), rand.Reader)
-       if k, p, err := randomPoint(c, r); err != nil {
+       if k, p, err := randomPoint(c, func(b []byte) error {
+               _, err := r.Read(b)
+               return err
+       }); err != nil {
                t.Fatal(err)
        } else if k.IsZero() == 1 {
                t.Error("k is zero")
@@ -53,14 +59,17 @@ func testRandomPoint[P Point[P]](t *testing.T, c *Curve[P]) {
        }
        loopCount = 0
 
-       // P-256 has a 2⁻³² chance or randomly hitting a rejection. For P-224 it's
+       // P-256 has a 2⁻³² chance of randomly hitting a rejection. For P-224 it's
        // 2⁻¹¹², for P-384 it's 2⁻¹⁹⁴, and for P-521 it's 2⁻²⁶², so if we hit in
        // tests, something is horribly wrong. (For example, we are masking the
        // wrong bits.)
        if c.curve == p256 {
                return
        }
-       if k, p, err := randomPoint(c, rand.Reader); err != nil {
+       if k, p, err := randomPoint(c, func(b []byte) error {
+               _, err := rand.Reader.Read(b)
+               return err
+       }); err != nil {
                t.Fatal(err)
        } else if k.IsZero() == 1 {
                t.Error("k is zero")
index dcb9cf6875ca56df92ea15a01111131a14361627..da3f72e5220e2483a0808bce46b8f97d54854928 100644 (file)
@@ -32,7 +32,23 @@ const (
        maxRequestSize = (1 << 19) / 8
 )
 
-func newDRBG[H fips.Hash](hash func() H, entropy, nonce, personalizationString []byte) *hmacDRBG {
+// plainPersonalizationString is used by HMAC_DRBG as-is.
+type plainPersonalizationString []byte
+
+func (plainPersonalizationString) isPersonalizationString() {}
+
+// Each entry in blockAlignedPersonalizationString is written to the HMAC at a
+// block boundary, as specified in draft-irtf-cfrg-det-sigs-with-noise-04,
+// Section 4.
+type blockAlignedPersonalizationString [][]byte
+
+func (blockAlignedPersonalizationString) isPersonalizationString() {}
+
+type personalizationString interface {
+       isPersonalizationString()
+}
+
+func newDRBG[H fips.Hash](hash func() H, entropy, nonce []byte, s personalizationString) *hmacDRBG {
        // HMAC_DRBG_Instantiate_algorithm, per Section 10.1.2.3.
        fips.RecordApproved()
 
@@ -56,7 +72,17 @@ func newDRBG[H fips.Hash](hash func() H, entropy, nonce, personalizationString [
        h.Write([]byte{0x00})
        h.Write(entropy)
        h.Write(nonce)
-       h.Write(personalizationString)
+       switch s := s.(type) {
+       case plainPersonalizationString:
+               h.Write(s)
+       case blockAlignedPersonalizationString:
+               l := len(d.V) + 1 + len(entropy) + len(nonce)
+               for _, b := range s {
+                       pad000(h, l)
+                       h.Write(b)
+                       l = len(b)
+               }
+       }
        K = h.Sum(K[:0])
        // V = HMAC (K, V)
        h = hmac.New(hash, K)
@@ -68,7 +94,17 @@ func newDRBG[H fips.Hash](hash func() H, entropy, nonce, personalizationString [
        h.Write([]byte{0x01})
        h.Write(entropy)
        h.Write(nonce)
-       h.Write(personalizationString)
+       switch s := s.(type) {
+       case plainPersonalizationString:
+               h.Write(s)
+       case blockAlignedPersonalizationString:
+               l := len(d.V) + 1 + len(entropy) + len(nonce)
+               for _, b := range s {
+                       pad000(h, l)
+                       h.Write(b)
+                       l = len(b)
+               }
+       }
        K = h.Sum(K[:0])
        // V = HMAC (K, V)
        h = hmac.New(hash, K)
@@ -80,6 +116,13 @@ func newDRBG[H fips.Hash](hash func() H, entropy, nonce, personalizationString [
        return d
 }
 
+func pad000(h *hmac.HMAC, writtenSoFar int) {
+       blockSize := h.BlockSize()
+       if rem := writtenSoFar % blockSize; rem != 0 {
+               h.Write(make([]byte, blockSize-rem))
+       }
+}
+
 // Generate produces at most maxRequestSize bytes of random data in out.
 func (d *hmacDRBG) Generate(out []byte) {
        // HMAC_DRBG_Generate_algorithm, per Section 10.1.2.5.
index 8f47443b5bb353a940b4f85c7bf5890daf286187..bbfe1012a046019f49a8ce16dfe2af36e5816a26 100644 (file)
@@ -22,6 +22,7 @@ import (
        _ "crypto/internal/fips/hkdf"
        _ "crypto/internal/fips/hmac"
        "crypto/internal/fips/mlkem"
+       "crypto/internal/fips/sha256"
        _ "crypto/internal/fips/sha256"
        _ "crypto/internal/fips/sha3"
        _ "crypto/internal/fips/sha512"
@@ -72,7 +73,11 @@ func findAllCASTs(t *testing.T) map[string]struct{} {
 func TestConditionals(t *testing.T) {
        mlkem.GenerateKey768()
        ecdh.GenerateKeyP256(rand.Reader)
-       ecdsa.GenerateKey(ecdsa.P256(), rand.Reader)
+       k, err := ecdsa.GenerateKey(ecdsa.P256(), rand.Reader)
+       if err != nil {
+               t.Fatal(err)
+       }
+       ecdsa.SignDeterministic(ecdsa.P256(), sha256.New, k, make([]byte, 32))
        t.Log("completed successfully")
 }
 
index a35aa57ee0986f42bc0d4010255830fd7f1fbc28..b79aec6300417999a6d0e31e0711a252160cbf1e 100644 (file)
 000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
 00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 60 8a bf 2b 6f  |....]...Y..`..+o|
-00000010  c1 f0 f3 7b d4 78 2c d9  15 3f 33 6a 4b 96 aa 83  |...{.x,..?3jK...|
-00000020  54 ae 66 8f 0f e7 b1 68  31 00 39 20 d8 4d f2 2c  |T.f....h1.9 .M.,|
-00000030  8b 85 98 d6 af e0 07 98  d5 cb 89 72 fb 8d c0 73  |...........r...s|
-00000040  cc 68 cf 58 21 4a 8a fc  c3 8e 90 0a c0 09 00 00  |.h.X!J..........|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 58 ee cb 2c 2e  |....]...Y..X..,.|
+00000010  24 e7 e4 50 2b 4b 9c 0f  ab f5 79 c1 12 b6 89 e5  |$..P+K....y.....|
+00000020  83 41 06 cb 45 f6 66 e9  e1 d2 fe 20 95 fd 7f 15  |.A..E.f.... ....|
+00000030  44 4e 44 18 9b fc 16 a7  8a a4 d9 f7 ca 49 85 e8  |DND..........I..|
+00000040  00 ce 02 26 38 38 1b 8d  6d 16 f2 b8 c0 09 00 00  |...&88..m.......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
 00000270  95 12 07 8f 2a 16 03 01  00 b5 0c 00 00 b1 03 00  |....*...........|
-00000280  1d 20 68 5a 6f c6 20 26  b5 5c 47 c6 5e fb 23 c4  |. hZo. &.\G.^.#.|
-00000290  bc 9c 3f 3a 9b ed d6 8e  a3 c8 66 7d 9b cb d0 30  |..?:......f}...0|
-000002a0  f9 60 00 8b 30 81 88 02  42 01 b2 fb f8 5f d0 14  |.`..0...B...._..|
-000002b0  9d 3c 55 0f 16 50 6f d5  0c 4c 3e 73 2e a9 23 5f  |.<U..Po..L>s..#_|
-000002c0  e8 9c 02 5d 4c 6d b0 c1  9e 0d ac 59 36 6c d5 c2  |...]Lm.....Y6l..|
-000002d0  4c 94 94 94 6f a4 df 26  1a 54 f5 74 b8 49 75 49  |L...o..&.T.t.IuI|
-000002e0  9c aa cd 91 24 f3 52 88  6a 1e 80 02 42 01 81 a2  |....$.R.j...B...|
-000002f0  76 e2 e8 b0 2a 8e 4e ed  6d be 2f e3 ca 4c ff f2  |v...*.N.m./..L..|
-00000300  d3 14 c0 b5 f8 c5 53 04  97 de 14 b2 8e af 77 86  |......S.......w.|
-00000310  de bf 4a 59 cf 7b 8a 73  d3 95 c3 28 ca 25 63 8e  |..JY.{.s...(.%c.|
-00000320  9e 02 7f 8a 04 bb 69 1e  41 31 76 2b 5a 54 ed 16  |......i.A1v+ZT..|
+00000280  1d 20 b2 d4 b5 f1 3f 61  7d 07 30 8b fd 17 76 41  |. ....?a}.0...vA|
+00000290  12 c5 e1 25 f1 e9 ad 68  26 55 4b f5 60 16 b0 44  |...%...h&UK.`..D|
+000002a0  90 7a 00 8b 30 81 88 02  42 01 26 8b c1 0d 38 f2  |.z..0...B.&...8.|
+000002b0  0f 22 de fd 81 53 5b 5a  87 b6 57 23 33 22 06 8f  |."...S[Z..W#3"..|
+000002c0  8b 59 f1 70 85 46 41 f2  b7 0c 80 77 df 40 08 77  |.Y.p.FA....w.@.w|
+000002d0  e1 b8 21 7f 55 77 c7 b7  ef ef b5 31 ae a0 22 a8  |..!.Uw.....1..".|
+000002e0  d3 e0 67 e8 67 bc a9 cb  03 47 76 02 42 00 f4 7a  |..g.g....Gv.B..z|
+000002f0  eb 2f d0 82 d7 06 75 35  e4 61 fb cf 27 93 95 29  |./....u5.a..'..)|
+00000300  6e 2c b5 d4 01 45 5b b6  d9 72 e9 f9 13 a6 5f bd  |n,...E[..r...._.|
+00000310  24 76 3b 8e 48 7a ce 4f  f5 c2 77 75 66 2d 18 6d  |$v;.Hz.O..wuf-.m|
+00000320  7d 9e c7 95 0c fe 0b 80  15 67 b2 f2 f6 5a dd 16  |}........g...Z..|
 00000330  03 01 00 0a 0d 00 00 06  03 01 02 40 00 00 16 03  |...........@....|
 00000340  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
 00000210  03 01 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
 00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 91 0f 00  |...._X.;t.......|
-00000240  00 8d 00 8b 30 81 88 02  42 01 57 eb e6 90 3c fe  |....0...B.W...<.|
-00000250  10 8d e9 7d 50 a5 d3 83  43 64 e7 d0 cb 65 ef b9  |...}P...Cd...e..|
-00000260  56 59 b9 52 09 e8 52 d7  d7 4d a7 57 09 dd 1f 83  |VY.R..R..M.W....|
-00000270  22 0e 4c 4e 8b 50 0d 68  72 26 9e 2a 8b 6d cb 88  |".LN.P.hr&.*.m..|
-00000280  c8 f4 0d 7d 85 80 e2 ec  7f f1 be 02 42 01 68 5d  |...}........B.h]|
-00000290  f8 91 45 82 61 7f 57 e2  2e b2 54 7d f3 11 11 44  |..E.a.W...T}...D|
-000002a0  2f ee 48 91 17 5c 04 3d  b8 0e eb ed 66 33 b1 62  |/.H..\.=....f3.b|
-000002b0  61 a1 03 e8 77 cf 44 4b  93 fc 4f 12 24 2f d1 67  |a...w.DK..O.$/.g|
-000002c0  c8 4b 07 e3 cb a8 7d 5d  82 d4 a2 ec d7 0b f8 14  |.K....}]........|
-000002d0  03 01 00 01 01 16 03 01  00 30 28 45 dc 18 db 52  |.........0(E...R|
-000002e0  a7 b5 1e 68 7a 06 03 8a  23 87 07 ea 79 38 29 ec  |...hz...#...y8).|
-000002f0  1b b7 b9 cb 1b 04 ac ba  1d b2 d5 8e 71 e0 27 30  |............q.'0|
-00000300  02 d1 c9 4d 35 69 38 71  c9 c7                    |...M5i8q..|
+00000240  00 8d 00 8b 30 81 88 02  42 01 87 b2 c8 53 94 c3  |....0...B....S..|
+00000250  9f ea 8a 04 35 1e 53 fb  c0 db c5 43 e8 99 b7 81  |....5.S....C....|
+00000260  43 fd 47 fd a6 cd 89 b5  0a b9 d0 5d 79 b0 c2 1a  |C.G........]y...|
+00000270  94 1f d8 2e 2b 8d 23 2a  c8 08 63 98 f6 01 1f 8f  |....+.#*..c.....|
+00000280  67 60 3a 88 44 63 7e 8b  91 3e 48 02 42 00 e1 1f  |g`:.Dc~..>H.B...|
+00000290  69 9a 97 bb b6 e9 97 4d  f5 f5 d7 23 56 be 1d ff  |i......M...#V...|
+000002a0  f0 22 67 8d a3 a1 13 33  5b f7 0b c2 a3 c8 5a 8c  |."g....3[.....Z.|
+000002b0  e8 65 b8 a8 7e 6c 99 11  db ab bd 80 0a ca dd 5a  |.e..~l.........Z|
+000002c0  d4 e0 28 12 38 7a b4 86  e7 3e 13 05 a1 3f 5f 14  |..(.8z...>...?_.|
+000002d0  03 01 00 01 01 16 03 01  00 30 9a fa ce 11 0b 50  |.........0.....P|
+000002e0  fa a1 59 9b 89 41 a9 0b  1b 74 dd 8f 7b a9 e0 39  |..Y..A...t..{..9|
+000002f0  5d e3 cc ee 11 f4 27 15  bc 4c 8f e1 2c 51 ec 8e  |].....'..L..,Q..|
+00000300  ed 6c 97 75 4c e9 da fb  68 9d                    |.l.uL...h.|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 3d a8 df 2e 80  |..........0=....|
-00000010  26 22 66 32 fb 6e bc 9e  f5 d6 6a 5e 0a 18 34 92  |&"f2.n....j^..4.|
-00000020  f9 42 40 e4 9c b1 7a 28  d2 52 e9 b8 13 ce 89 01  |.B@...z(.R......|
-00000030  23 44 ab 2e 75 3e c2 96  f5 59 61                 |#D..u>...Ya|
+00000000  14 03 01 00 01 01 16 03  01 00 30 12 06 0c 4d 1c  |..........0...M.|
+00000010  81 47 06 5f b9 85 68 60  9c 26 4a 14 f2 40 60 7f  |.G._..h`.&J..@`.|
+00000020  d1 1e 51 9e f2 70 2f be  54 cb 42 b3 b3 8d 90 9c  |..Q..p/.T.B.....|
+00000030  9d d2 0d e2 f7 b6 56 31  11 af 5f                 |......V1.._|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 64 ac d2  1b 98 4d 4e ec 22 25 35  |.... d....MN."%5|
-00000010  7c 7c 79 15 a8 54 0d 93  1a b3 3e ff 68 27 d0 d5  |||y..T....>.h'..|
-00000020  82 24 7b dc e7 17 03 01  00 20 98 da 6d 26 de b8  |.${...... ..m&..|
-00000030  4b d0 ee 2c 18 52 05 86  59 b0 b6 e7 42 74 54 ea  |K..,.R..Y...BtT.|
-00000040  e6 96 de ec 82 dc 1f 3a  6c 5c 15 03 01 00 20 cc  |.......:l\.... .|
-00000050  11 da e4 75 e5 0c 06 84  e5 89 3e a4 ef 3c 28 10  |...u......>..<(.|
-00000060  68 0a 6f d4 6e ae 14 a6  ca 7c ba 98 c4 28 7e     |h.o.n....|...(~|
+00000000  17 03 01 00 20 0f d0 65  cd d4 59 d0 9e 07 06 6d  |.... ..e..Y....m|
+00000010  8a 11 34 d9 3a 31 59 70  02 39 08 ef 28 98 36 2f  |..4.:1Yp.9..(.6/|
+00000020  0d 5b d0 23 3f 17 03 01  00 20 5b 16 82 9c 29 c6  |.[.#?.... [...).|
+00000030  78 34 76 09 5e bb 01 5e  fc 01 b2 55 9b ef 67 a8  |x4v.^..^...U..g.|
+00000040  ca 9f b9 6d b5 ea 87 48  8e 76 15 03 01 00 20 43  |...m...H.v.... C|
+00000050  12 3b f6 99 31 67 d8 8a  94 d1 37 ef 01 ca a1 62  |.;..1g....7....b|
+00000060  9f d7 2a eb 7e 37 79 d9  a4 07 15 5f fb 84 32     |..*.~7y...._..2|
index 687eba43e6cf8c93255d9dd6bbc01713f0cb7454..b02fe3d25b9db185c515ff3b54c4ef598b4d26ac 100644 (file)
 000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
 00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 48 c6 a1 aa 01  |....]...Y..H....|
-00000010  b8 4b a1 f5 6d 71 28 f7  fd 76 9d 12 50 d3 56 e2  |.K..mq(..v..P.V.|
-00000020  ca 77 d4 82 07 65 e2 c5  12 40 35 20 e3 ee 0a df  |.w...e...@5 ....|
-00000030  1f 4a d9 b3 a6 6f a0 24  49 8d ab d9 d8 3c 24 36  |.J...o.$I....<$6|
-00000040  35 ba 64 8b 7d ec 29 91  d9 26 5e 61 c0 13 00 00  |5.d.}.)..&^a....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 0b 4b bc a9 e8  |....]...Y...K...|
+00000010  4a 08 69 de 73 f8 fc 53  c6 e9 cd cf 25 7a 5f b6  |J.i.s..S....%z_.|
+00000020  60 48 65 3e f5 5f 9f 14  e7 38 a0 20 ec fe 94 b2  |`He>._...8. ....|
+00000030  6d a9 d7 91 c4 92 6b 3e  a4 2e 88 72 07 c3 47 12  |m.....k>...r..G.|
+00000040  78 cc 45 86 f9 56 16 f9  d7 d9 38 c2 c0 13 00 00  |x.E..V....8.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 55 51 65  |............ UQe|
-000002d0  bb 06 22 d7 d6 97 39 d1  f4 dc 95 06 b3 a4 a7 00  |.."...9.........|
-000002e0  d1 e5 98 bc 97 12 03 25  03 12 ab 20 4f 00 80 71  |.......%... O..q|
-000002f0  8d 3c 54 44 ba df 73 92  76 16 d1 ec b1 de a2 27  |.<TD..s.v......'|
-00000300  97 b1 e9 31 37 ea a7 5d  a9 00 ce 85 08 5a b3 ac  |...17..].....Z..|
-00000310  ef a6 8d c3 9f a5 ba 97  e8 bc 9f 81 63 77 7b 2e  |............cw{.|
-00000320  92 5f 36 a1 00 04 c1 3f  e9 76 bb 58 da aa 03 ba  |._6....?.v.X....|
-00000330  cd 11 9b 9a 56 2e 64 53  74 b4 62 00 89 4a 57 0f  |....V.dSt.b..JW.|
-00000340  a2 a9 f2 16 17 ab a3 72  3d 16 4d 41 4a df 54 b1  |.......r=.MAJ.T.|
-00000350  72 ab 8b bf a3 74 af 1c  30 d0 75 27 a6 ce a1 56  |r....t..0.u'...V|
-00000360  ec 08 f9 c0 c9 9d 71 7a  83 a4 bd 33 af 7a 5e 16  |......qz...3.z^.|
+000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 fc 77 2f  |............ .w/|
+000002d0  88 9a a9 71 3a 14 bf 27  27 40 e0 28 ce e8 e8 3b  |...q:..''@.(...;|
+000002e0  cd 0a 43 21 75 c9 93 70  9a 22 f1 ec 3a 00 80 d2  |..C!u..p."..:...|
+000002f0  cd 71 ae f6 d8 54 5c f3  a4 da c7 64 51 b8 36 b8  |.q...T\....dQ.6.|
+00000300  46 d5 8c b1 a0 43 9b f2  b5 2c 12 89 08 39 2b c3  |F....C...,...9+.|
+00000310  79 4e 5d 3d 7e 7f d5 51  c3 c5 1e 9e 3b 7c 39 c4  |yN]=~..Q....;|9.|
+00000320  c3 64 52 91 94 2f 2c ee  aa 7c 0e ed fd 7a 65 bb  |.dR../,..|...ze.|
+00000330  5a 62 f4 45 24 3d e7 e3  f2 8a 72 74 a7 9d f2 d5  |Zb.E$=....rt....|
+00000340  69 be dc 6e 23 fb 68 bb  6e 64 9e 43 a8 f4 08 2b  |i..n#.h.nd.C...+|
+00000350  86 be ea 88 40 13 5f 3f  0b 18 74 e3 43 76 be 98  |....@._?..t.Cv..|
+00000360  b8 15 ea 4d cb 6e 23 3c  8b a9 ce d4 6a e3 13 16  |...M.n#<....j...|
 00000370  03 01 00 0a 0d 00 00 06  03 01 02 40 00 00 16 03  |...........@....|
 00000380  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
 00000210  03 01 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
 00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 90 0f 00  |...._X.;t.......|
-00000240  00 8c 00 8a 30 81 87 02  41 79 c5 57 74 46 9a 18  |....0...Ay.WtF..|
-00000250  ad e0 b0 ba 68 f5 0e e2  58 94 dc 73 84 5a f8 86  |....h...X..s.Z..|
-00000260  86 8e 2a 37 82 02 a1 4b  19 cd 71 b3 99 04 64 b0  |..*7...K..q...d.|
-00000270  db 4a cc 41 a6 17 28 38  f1 67 bd 59 16 97 71 32  |.J.A..(8.g.Y..q2|
-00000280  06 71 24 2c f3 df 34 1b  a3 b8 02 42 01 2f 2f db  |.q$,..4....B.//.|
-00000290  45 07 94 53 89 81 59 0b  92 9d 1a 05 42 b3 1c 40  |E..S..Y.....B..@|
-000002a0  38 50 a1 8e a6 35 15 76  ca 75 7e fc 8d 7b 36 f3  |8P...5.v.u~..{6.|
-000002b0  e3 e7 bf f9 bd 94 35 a0  c5 2b 35 88 be 5d ee f1  |......5..+5..]..|
-000002c0  00 f9 9c a8 01 a8 92 5d  d6 17 b6 54 98 e4 14 03  |.......]...T....|
-000002d0  01 00 01 01 16 03 01 00  30 1f d6 11 ac 58 b3 20  |........0....X. |
-000002e0  31 6d 3b f5 83 98 50 75  ff 4f 79 61 2b fc 0f 6c  |1m;...Pu.Oya+..l|
-000002f0  a6 4d 9e 65 38 e3 ca 12  76 0a 56 1e dd 73 da e1  |.M.e8...v.V..s..|
-00000300  66 5a 33 62 8f 7d c3 ed  ad                       |fZ3b.}...|
+00000240  00 8c 00 8a 30 81 87 02  41 2c f8 d2 c2 28 75 28  |....0...A,...(u(|
+00000250  67 de 75 fb 7a 09 20 8a  ec 06 a6 42 03 ad 3c 95  |g.u.z. ....B..<.|
+00000260  bb 00 f6 10 71 c7 90 fe  08 16 fa ed 7d 71 24 a2  |....q.......}q$.|
+00000270  b6 76 ce f9 1b ff a9 ff  05 b6 dd d8 63 2b 74 86  |.v..........c+t.|
+00000280  65 f5 ef f7 36 41 47 77  b5 88 02 42 00 8a 80 f8  |e...6AGw...B....|
+00000290  9b cf de a6 b7 c3 d8 48  a1 a0 47 7e cf 33 fc f7  |.......H..G~.3..|
+000002a0  fc 87 40 cf 8d c3 81 85  c7 19 9e 37 9e 54 f7 3e  |..@........7.T.>|
+000002b0  d1 1c 42 83 21 d7 2e ae  02 7b 3c ce 97 f3 9b a0  |..B.!....{<.....|
+000002c0  a3 4e b9 a0 9c 78 f0 7e  9c 96 fc 78 e6 08 14 03  |.N...x.~...x....|
+000002d0  01 00 01 01 16 03 01 00  30 84 a0 4f 8d 01 40 ca  |........0..O..@.|
+000002e0  c0 fd ea 1a 9c df 27 cc  25 00 56 e2 30 05 c0 d9  |......'.%.V.0...|
+000002f0  c7 21 48 37 6b 35 c3 a4  4e bf 67 98 87 78 0f 3c  |.!H7k5..N.g..x.<|
+00000300  74 72 4f 6a c5 0d fd 0c  84                       |trOj.....|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 92 36 25 46 a5  |..........0.6%F.|
-00000010  44 e6 31 25 cd 24 15 df  13 f8 5b a3 af 7c 12 43  |D.1%.$....[..|.C|
-00000020  b8 8c 39 84 bc 25 06 02  02 86 78 20 1b ec 98 1a  |..9..%....x ....|
-00000030  31 b3 b8 cf 82 92 77 ff  08 87 fb                 |1.....w....|
+00000000  14 03 01 00 01 01 16 03  01 00 30 01 da 6e 2a 83  |..........0..n*.|
+00000010  20 ad 52 16 f2 c6 c1 55  b8 77 0d 5f c6 48 dc e7  | .R....U.w._.H..|
+00000020  72 29 88 0a 2b 1a d1 1e  fd fb c0 c3 18 c8 43 47  |r)..+.........CG|
+00000030  a9 8f d3 fe f3 d8 d2 a8  ce 79 44                 |.........yD|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 2f bd ab  e0 2f 9a 81 58 99 35 bb  |.... /.../..X.5.|
-00000010  86 61 6e 15 be 31 d7 ad  44 1d d9 cf 2f fc d9 f6  |.an..1..D.../...|
-00000020  da b6 48 32 27 17 03 01  00 20 76 70 b7 7d 1b 05  |..H2'.... vp.}..|
-00000030  ee 54 99 bf 89 79 79 b5  68 c1 84 3c 6d 47 5c d1  |.T...yy.h..<mG\.|
-00000040  a6 a1 81 65 e6 e9 b1 05  e0 45 15 03 01 00 20 4e  |...e.....E.... N|
-00000050  92 00 b5 bc b9 b8 c6 fe  d1 5c d1 93 f8 cd 7c 3f  |.........\....|?|
-00000060  bd 47 82 ff b0 00 3b 96  f0 7a 3b a4 cc 15 f3     |.G....;..z;....|
+00000000  17 03 01 00 20 e5 74 9a  b9 0b 6c 43 0f 4e db e4  |.... .t...lC.N..|
+00000010  ba 10 5d 9a f0 96 16 17  ad a5 42 d8 0d a3 39 86  |..].......B...9.|
+00000020  6c f0 8a 64 70 17 03 01  00 20 d2 11 27 ea f2 80  |l..dp.... ..'...|
+00000030  a5 5d ba 7b 99 4b 94 25  13 24 29 05 7b 64 00 51  |.].{.K.%.$).{d.Q|
+00000040  14 8e d5 e9 e2 c0 5d 98  96 30 15 03 01 00 20 7e  |......]..0.... ~|
+00000050  87 d2 6c 5c b5 1c 11 72  e1 c4 e5 e0 f3 16 6b db  |..l\...r......k.|
+00000060  55 c3 c7 ae a9 38 d3 07  04 41 be c5 42 43 a4     |U....8...A..BC.|
index b56ac9f0c4b317447fa11e9771dee2fc2ebb77eb..55cff1d489e6d30e171c5d6e2d14b4ff7228fdaa 100644 (file)
 000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
 00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 d4 19 2c 08 c6  |....]...Y....,..|
-00000010  ef 32 88 79 a1 84 fc 79  38 62 b2 dd 4b a7 0b b3  |.2.y...y8b..K...|
-00000020  d3 13 3d d4 f7 c7 4d d9  8b c6 8e 20 56 8e 90 3d  |..=...M.... V..=|
-00000030  2b 6e 2d cf 7e c1 c6 b0  e5 d8 d2 af 3a 06 88 c6  |+n-.~.......:...|
-00000040  ed e7 18 76 ab 45 c5 76  47 67 95 ad c0 09 00 00  |...v.E.vGg......|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 58 a7 ae 6c fc  |....]...Y..X..l.|
+00000010  0d 53 51 d5 37 8d 1f 88  75 27 bf 34 8f 3d d3 ee  |.SQ.7...u'.4.=..|
+00000020  95 db 77 d9 c0 3b f1 57  4f 84 e2 20 7f 0d d1 84  |..w..;.WO.. ....|
+00000030  0c 7a 4e 41 7f 74 58 6c  f5 38 e6 8d 5b 04 15 e1  |.zNA.tXl.8..[...|
+00000040  3d 4a ba 7e 58 f4 e8 bf  f4 42 8a f5 c0 09 00 00  |=J.~X....B......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 03  00 b7 0c 00 00 b3 03 00  |....*...........|
-00000280  1d 20 e9 3c ed d4 07 43  c1 20 f5 41 35 e1 49 4a  |. .<...C. .A5.IJ|
-00000290  1c 52 5d 77 f2 07 59 18  55 e0 66 d1 49 ab 95 74  |.R]w..Y.U.f.I..t|
-000002a0  81 1c 04 03 00 8b 30 81  88 02 42 01 f1 52 e7 13  |......0...B..R..|
-000002b0  3e 9b 3b 4f 90 0f d2 9b  50 11 fe df 1f 12 f2 d9  |>.;O....P.......|
-000002c0  0d 89 bc 6c 01 93 45 ca  b8 3c 09 cf b2 01 e9 99  |...l..E..<......|
-000002d0  87 fb 1d ac 91 7f 77 a2  21 5e 07 5e 65 3b ec 31  |......w.!^.^e;.1|
-000002e0  d7 b5 b9 1d 88 c8 82 f5  03 a9 37 e8 b9 02 42 01  |..........7...B.|
-000002f0  78 c4 90 fb e3 7f 5a 7a  66 0a 44 f5 66 0e 1e ac  |x.....Zzf.D.f...|
-00000300  cb 53 c4 74 55 3a b8 b7  ec b3 f6 4c e1 a8 b6 cb  |.S.tU:.....L....|
-00000310  a1 e5 37 ac e2 17 e2 6c  8f 71 37 b0 f1 ca b8 1b  |..7....l.q7.....|
-00000320  df 91 16 a4 7f 31 b1 4f  3e e4 30 f0 5a 5e df 93  |.....1.O>.0.Z^..|
-00000330  85 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
-00000340  04 03 05 03 06 03 08 07  08 08 08 09 08 0a 08 0b  |................|
-00000350  08 04 08 05 08 06 04 01  05 01 06 01 03 03 02 03  |................|
-00000360  03 01 02 01 03 02 02 02  04 02 05 02 06 02 00 00  |................|
-00000370  16 03 03 00 04 0e 00 00  00                       |.........|
+00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
+00000280  1d 20 b2 5c fe 84 12 a5  2f 8f da 91 3f 44 52 4e  |. .\..../...?DRN|
+00000290  03 ad e4 f9 8a 14 71 0d  0b 46 86 81 d2 1b 4a 5b  |......q..F....J[|
+000002a0  d9 4e 04 03 00 8a 30 81  87 02 42 01 78 d2 c2 a9  |.N....0...B.x...|
+000002b0  b7 77 f8 eb 8d 9d 36 1f  79 e7 d1 74 a9 9d a4 53  |.w....6.y..t...S|
+000002c0  5e 08 4a 92 dc ac b3 32  bf ce e7 f0 80 af 56 48  |^.J....2......VH|
+000002d0  42 e2 fd 22 c7 35 11 13  db 2a 6d 74 4a e5 02 ce  |B..".5...*mtJ...|
+000002e0  ea 43 e6 b0 69 18 3e d3  86 85 76 ff 56 02 41 44  |.C..i.>...v.V.AD|
+000002f0  2a e1 6b ae 5d f9 39 5c  ec 76 ee 01 d7 04 42 ca  |*.k.].9\.v....B.|
+00000300  45 07 e0 59 38 75 d4 47  61 a4 5b 0f a9 7a ba 79  |E..Y8u.Ga.[..z.y|
+00000310  fa 79 92 41 88 8a d3 be  c2 38 3e f7 95 6c 99 3f  |.y.A.....8>..l.?|
+00000320  4c ff af 10 33 14 25 e0  d7 8a fd 70 17 2b 73 ee  |L...3.%....p.+s.|
+00000330  16 03 03 00 3a 0d 00 00  36 03 01 02 40 00 2e 04  |....:...6...@...|
+00000340  03 05 03 06 03 08 07 08  08 08 09 08 0a 08 0b 08  |................|
+00000350  04 08 05 08 06 04 01 05  01 06 01 03 03 02 03 03  |................|
+00000360  01 02 01 03 02 02 02 04  02 05 02 06 02 00 00 16  |................|
+00000370  03 03 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0|
 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5|
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
 00000210  03 03 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 93 0f 00  |...._X.;t.......|
-00000240  00 8f 04 03 00 8b 30 81  88 02 42 01 c9 2c e8 1f  |......0...B..,..|
-00000250  5b a0 97 0f 70 2d 46 e3  6e b4 4c 82 fc be df 05  |[...p-F.n.L.....|
-00000260  09 b0 d7 e4 0a 06 71 66  d6 3b 3e b6 56 2c 22 c7  |......qf.;>.V,".|
-00000270  7c 3a 63 5c 34 22 5b 3a  49 a2 97 f3 2f 58 e7 2a  ||:c\4"[:I.../X.*|
-00000280  cd f4 05 84 db 8b 0b 22  e3 50 1b e7 6d 02 42 01  |.......".P..m.B.|
-00000290  fd 1e bc 64 8b 01 3f a0  f8 8b 41 be 4d 97 07 6c  |...d..?...A.M..l|
-000002a0  3b 09 74 d6 00 76 b3 a0  c0 d0 92 d0 78 24 d7 b2  |;.t..v......x$..|
-000002b0  1f c0 86 90 59 3a fb a8  e1 f6 80 23 db f7 90 93  |....Y:.....#....|
-000002c0  95 fd 37 14 8c 34 f3 07  10 f8 dd e3 66 28 1c b2  |..7..4......f(..|
-000002d0  a0 14 03 03 00 01 01 16  03 03 00 40 00 00 00 00  |...........@....|
-000002e0  00 00 00 00 00 00 00 00  00 00 00 00 6c b8 ab 0b  |............l...|
-000002f0  c1 2d 2f 4e d2 25 14 96  24 c6 18 97 82 93 1c 1b  |.-/N.%..$.......|
-00000300  b4 ca 77 8b 17 7c cf 08  ca 06 e2 ef f3 97 6a 31  |..w..|........j1|
-00000310  88 aa 46 a2 d3 7b 65 56  e2 77 72 df              |..F..{eV.wr.|
+00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 92 0f 00  |...._X.;t.......|
+00000240  00 8e 04 03 00 8a 30 81  87 02 41 0c 11 31 08 e0  |......0...A..1..|
+00000250  7d 4e 11 1e 80 7c 50 70  ea 1b 68 16 d9 e6 93 b7  |}N...|Pp..h.....|
+00000260  fb 6f 0d 6e ce 8b d2 7c  86 70 c3 e9 ed 35 3c 29  |.o.n...|.p...5<)|
+00000270  c7 d8 6c 8f 43 c9 a1 7a  4a ae 19 22 6e e3 85 7e  |..l.C..zJ.."n..~|
+00000280  a0 5d 7f 19 a5 b7 25 ad  d7 1a 5f 42 02 42 00 d8  |.]....%..._B.B..|
+00000290  6a 25 47 2a 0e 1a 38 51  1c 73 aa 2d 10 9e 4b 65  |j%G*..8Q.s.-..Ke|
+000002a0  56 34 72 e5 02 09 f6 30  ce a8 a0 59 75 7b 13 42  |V4r....0...Yu{.B|
+000002b0  1e 31 f3 dd 08 a9 65 df  2d e6 aa 29 5d 9a 5c eb  |.1....e.-..)].\.|
+000002c0  d3 67 af 29 4e d2 76 e5  17 1d 7e e7 0a 50 c4 d0  |.g.)N.v...~..P..|
+000002d0  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
+000002e0  00 00 00 00 00 00 00 00  00 00 00 8b ef 24 70 ef  |.............$p.|
+000002f0  b9 b3 fd 59 49 62 b7 18  9c bc 7f 74 06 21 21 ab  |...YIb.....t.!!.|
+00000300  9c 4d cf 70 0c 6b 3b d3  d4 12 51 a7 f9 09 65 d1  |.M.p.k;...Q...e.|
+00000310  ce b7 28 01 c1 e9 0b e4  41 55 b6                 |..(.....AU.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 40 b8 19 a7 e2 35  |..........@....5|
-00000010  8a be 5f 4c 91 d2 db 3f  f3 42 90 8e b5 7f ea f7  |.._L...?.B......|
-00000020  52 3e 61 2f 4d ef 25 8d  ce 82 77 22 05 6f 0d b6  |R>a/M.%...w".o..|
-00000030  04 c1 f0 f0 a2 9d bf 80  a9 f5 e1 62 5c e2 30 ef  |...........b\.0.|
-00000040  83 e7 c5 78 de 8f 17 4e  d3 57 dd                 |...x...N.W.|
+00000000  14 03 03 00 01 01 16 03  03 00 40 af 82 f6 ba d1  |..........@.....|
+00000010  e8 f9 c5 58 0e ba 94 ec  98 68 b3 20 5b db 4e 8c  |...X.....h. [.N.|
+00000020  f5 00 29 e8 9a c1 34 35  ac 77 af e2 a0 6a 6f 45  |..)...45.w...joE|
+00000030  05 56 d4 a0 5b 75 19 c6  1b 8a c8 65 04 ed 3d f3  |.V..[u.....e..=.|
+00000040  84 e5 1b c0 26 31 5d 03  d5 b4 31                 |....&1]...1|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 cb 79 13  ea 9e 7a 63 8f 5a 2b 8c  |......y...zc.Z+.|
-00000020  3a f3 bb 7e dc ff d1 2c  4a a6 4a aa ad bf 44 b8  |:..~...,J.J...D.|
-00000030  cb 67 ce 3d f0 15 03 03  00 30 00 00 00 00 00 00  |.g.=.....0......|
-00000040  00 00 00 00 00 00 00 00  00 00 f4 15 a0 f0 64 d1  |..............d.|
-00000050  dd 5f 14 66 6c ce 51 95  bc b5 0b f8 4f 42 48 57  |._.fl.Q.....OBHW|
-00000060  cf f3 09 62 75 0d 3e 64  64 e0                    |...bu.>dd.|
+00000010  00 00 00 00 00 2e a5 7c  6f cc f7 44 1a 38 99 4a  |.......|o..D.8.J|
+00000020  2e a4 4b 79 bf ee b6 c9  12 57 f5 2e 98 dd 1d 2a  |..Ky.....W.....*|
+00000030  5b 79 d5 ef 44 15 03 03  00 30 00 00 00 00 00 00  |[y..D....0......|
+00000040  00 00 00 00 00 00 00 00  00 00 3d fe 37 cb 65 03  |..........=.7.e.|
+00000050  13 ce 3d 3b c2 18 c2 27  f9 a4 b7 fc e6 37 eb 2a  |..=;...'.....7.*|
+00000060  27 6c 52 38 2f 3a 61 d4  a9 e6                    |'lR8/:a...|
index 692092e34f91dce70c78651d97f823e4c95fb857..de57515d38297c254b997e8da7f99e077e66d222 100644 (file)
 000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
 00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 ed c3 6f 59 34  |....]...Y....oY4|
-00000010  78 33 49 00 68 50 1f a5  aa 93 45 9a 87 34 c4 4e  |x3I.hP....E..4.N|
-00000020  71 b0 ab 5e 43 f7 a1 5c  89 e8 2f 20 f7 42 d7 2a  |q..^C..\../ .B.*|
-00000030  a5 fe 16 76 ac 6f cf 20  1d a6 bc d5 9d 27 9d 81  |...v.o. .....'..|
-00000040  80 b4 0d 4e 12 89 de 7b  7a 5b a0 2b c0 2f 00 00  |...N...{z[.+./..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 f8 3d 7c a4 a8  |....]...Y...=|..|
+00000010  11 e3 56 0f 1c 7e 2e 7c  50 7e 75 5c de 1c 51 8e  |..V..~.|P~u\..Q.|
+00000020  de d3 8a 84 d2 90 84 f9  e9 07 d5 20 98 6a a8 c1  |........... .j..|
+00000030  f4 28 bd 0f 6a 25 a5 26  3d 8d 35 b6 3e bb 77 c6  |.(..j%.&=.5.>.w.|
+00000040  8e ab 36 bd 7d c8 a9 b1  5b 30 0f b2 c0 2f 00 00  |..6.}...[0.../..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 d9 02 16  |............ ...|
-000002d0  ba b6 db c0 c6 65 6d fb  b8 69 dc 04 1a 8d 4a 36  |.....em..i....J6|
-000002e0  27 6b f0 53 c3 72 56 1a  99 07 0f b9 79 08 04 00  |'k.S.rV.....y...|
-000002f0  80 5d c6 1e a2 20 7d ae  35 e6 20 2f ff 7a 7b 8d  |.]... }.5. /.z{.|
-00000300  3f fd 49 d4 ce 26 f7 d0  c2 51 2a 42 03 26 b7 30  |?.I..&...Q*B.&.0|
-00000310  af 5f 7d 34 1d 7d 37 ef  8a 1c e6 be 19 99 f1 30  |._}4.}7........0|
-00000320  2e 26 6d 7b 83 cd 6e 26  c4 03 f5 7a 30 8f bf e3  |.&m{..n&...z0...|
-00000330  c1 64 da 43 fc f0 32 c9  a2 68 e4 97 d0 34 8a c4  |.d.C..2..h...4..|
-00000340  fc f8 bb 61 ec df 69 f7  d0 d7 1e 19 c0 5b 21 86  |...a..i......[!.|
-00000350  eb 79 93 46 3b 7a 50 83  41 8b d3 7c 59 d5 34 8a  |.y.F;zP.A..|Y.4.|
-00000360  0c b5 70 e4 86 38 3a 6c  11 04 57 d6 94 c0 78 c7  |..p..8:l..W...x.|
-00000370  91 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 5f c1 31  |............ _.1|
+000002d0  d7 64 f0 0b 72 6a 66 2c  49 d7 d1 9c dd 6f e3 3a  |.d..rjf,I....o.:|
+000002e0  ab 2c 78 6d ca b0 ed 16  26 65 9f ff 66 08 04 00  |.,xm....&e..f...|
+000002f0  80 a6 91 d0 03 b8 d2 67  48 69 16 8e 30 dc 5b 3f  |.......gHi..0.[?|
+00000300  ac 4d e4 33 5f 46 e7 0c  49 a0 71 9d 8c 60 63 f2  |.M.3_F..I.q..`c.|
+00000310  2d ff 9e 89 21 7d af 71  ce 41 6b d2 22 fc 1f bd  |-...!}.q.Ak."...|
+00000320  a9 9e 15 2c d7 c3 cb 69  6d df 23 07 7c 13 e9 2b  |...,...im.#.|..+|
+00000330  7d 05 f0 18 1e 86 c8 37  ad cd 9e 39 26 0c 8a 9b  |}......7...9&...|
+00000340  12 90 60 12 95 06 e9 bb  f2 46 41 20 10 f5 64 ea  |..`......FA ..d.|
+00000350  66 13 cb 8e 51 7e 41 78  2a 40 fa 15 e2 0d 5b 37  |f...Q~Ax*@....[7|
+00000360  a7 a8 4a f6 8e 93 82 2a  a2 91 06 66 4e 49 72 68  |..J....*...fNIrh|
+00000370  f9 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
 00000380  04 03 05 03 06 03 08 07  08 08 08 09 08 0a 08 0b  |................|
 00000390  08 04 08 05 08 06 04 01  05 01 06 01 03 03 02 03  |................|
 000003a0  03 01 02 01 03 02 02 02  04 02 05 02 06 02 00 00  |................|
 00000210  03 03 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
 00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 93 0f 00  |...._X.;t.......|
-00000240  00 8f 04 03 00 8b 30 81  88 02 42 01 a3 80 63 a4  |......0...B...c.|
-00000250  49 60 35 5c 06 87 9f 7f  ae 40 37 d0 64 58 b2 60  |I`5\.....@7.dX.`|
-00000260  61 59 8b 6d a6 d9 55 67  81 f6 7e 9c de 40 69 00  |aY.m..Ug..~..@i.|
-00000270  42 e1 2e 67 0d 48 cf 23  a7 28 f2 e0 9e 26 61 20  |B..g.H.#.(...&a |
-00000280  4f 50 b6 e3 85 0b f5 f6  96 ec 03 32 35 02 42 01  |OP.........25.B.|
-00000290  bd 3b 3e d6 03 98 b5 09  9a aa a9 73 1d 98 6a a5  |.;>........s..j.|
-000002a0  29 ff e5 b3 f8 1f 58 2a  a1 92 ea 2d 6d e9 71 d3  |).....X*...-m.q.|
-000002b0  ce 04 46 ef d6 fb e4 5e  e3 70 19 01 1a 22 85 70  |..F....^.p...".p|
-000002c0  06 ec 15 bd ff ef af ed  2b 6d 00 97 cb 67 1f cb  |........+m...g..|
-000002d0  f6 14 03 03 00 01 01 16  03 03 00 28 00 00 00 00  |...........(....|
-000002e0  00 00 00 00 80 da 31 59  19 74 39 ff a4 8c 30 1b  |......1Y.t9...0.|
-000002f0  25 fd 6b 25 57 ef 26 57  bd a1 df 90 4e d6 6a 47  |%.k%W.&W....N.jG|
-00000300  96 08 54 92                                       |..T.|
+00000240  00 8f 04 03 00 8b 30 81  88 02 42 01 0f 51 5e 59  |......0...B..Q^Y|
+00000250  78 34 8f 99 03 da 07 66  3b 0d 48 b2 79 57 e2 d5  |x4.....f;.H.yW..|
+00000260  d2 c2 f3 81 8e 25 98 81  e2 9a f7 1f 02 99 b0 7d  |.....%.........}|
+00000270  1c d1 1f e4 ef d7 bc a1  ad 67 c7 a9 cc 4f 67 58  |.........g...OgX|
+00000280  8b 1e 8c 3f 04 73 31 53  60 aa 67 33 27 02 42 01  |...?.s1S`.g3'.B.|
+00000290  f1 66 ba 8f ec 9e 3f 76  76 ac 7a e7 56 cb fb 46  |.f....?vv.z.V..F|
+000002a0  f4 9b 64 03 3a 72 5a d7  cf 49 39 69 26 19 68 52  |..d.:rZ..I9i&.hR|
+000002b0  8b 98 8e ea d3 8e d9 6d  93 f5 e8 23 cd 20 a8 5a  |.......m...#. .Z|
+000002c0  4c 24 10 70 bd a2 ae a3  b1 4f 38 17 dd b9 f5 93  |L$.p.....O8.....|
+000002d0  4b 14 03 03 00 01 01 16  03 03 00 28 00 00 00 00  |K..........(....|
+000002e0  00 00 00 00 e1 2b da c6  4a 5c d2 03 c0 7e f0 eb  |.....+..J\...~..|
+000002f0  a0 4b ed a1 7d e4 45 93  ec f9 37 a0 5b 7e bb 64  |.K..}.E...7.[~.d|
+00000300  af d4 fc ac                                       |....|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 0e 1f ce 8a 46  |..........(....F|
-00000010  77 28 6d e2 fc c4 e4 39  70 6b ab 6e 14 14 2a 34  |w(m....9pk.n..*4|
-00000020  13 a0 5b c5 95 f5 fa a9  a2 f6 60 20 e3 1f c5 84  |..[.......` ....|
-00000030  9c 00 5e                                          |..^|
+00000000  14 03 03 00 01 01 16 03  03 00 28 d3 4a 1e 2b ea  |..........(.J.+.|
+00000010  26 12 c9 fd b0 7b e6 bf  e4 bb b6 d2 6b b4 3c 05  |&....{......k.<.|
+00000020  1f 6c 46 44 5e 25 e6 f9  80 c8 b9 16 19 59 68 90  |.lFD^%.......Yh.|
+00000030  5a 90 16                                          |Z..|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 88 d1 a4  |................|
-00000010  c9 1b a6 a5 21 4d 93 e8  04 8b 3b 69 a9 2f bd 7d  |....!M....;i./.}|
-00000020  97 c1 3d 15 03 03 00 1a  00 00 00 00 00 00 00 02  |..=.............|
-00000030  ba 48 db 22 9e ae d8 a9  24 b7 a6 52 13 92 68 d6  |.H."....$..R..h.|
-00000040  aa b5                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 35 25 df  |.............5%.|
+00000010  1f 16 81 00 e3 c4 9e 45  e2 a1 ef 54 72 66 99 3d  |.......E...Trf.=|
+00000020  30 13 25 15 03 03 00 1a  00 00 00 00 00 00 00 02  |0.%.............|
+00000030  16 a5 e9 36 c1 fb 02 d7  c8 7a aa bc aa 77 7b 5c  |...6.....z...w{\|
+00000040  4f a1                                             |O.|
index 8984790aab6801650be9be6cde58b054efd9ab00..db13bd638760f264fadea8fae7c98822e13163f7 100644 (file)
 000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
 00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 ea 8b 99 cb 5b  |....z...v......[|
-00000010  d8 fb e9 14 7f 17 20 9c  b8 41 01 dd ce 8a 90 4e  |...... ..A.....N|
-00000020  a9 f0 fb eb 71 37 24 02  d2 ee 96 20 00 00 00 00  |....q7$.... ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 37 0c 23 2f 26  |....z...v..7.#/&|
+00000010  2a b0 8d 47 84 3b 9b 9c  7e 0f 0a cd 77 39 6c c2  |*..G.;..~...w9l.|
+00000020  7b c0 56 a8 9d 07 a0 ec  b6 e5 79 20 00 00 00 00  |{.V.......y ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 c8  |..+.....3.$... .|
-00000060  c6 52 8e 3c 6f 0d ab 2d  be 4c e0 01 c8 af 1f 8e  |.R.<o..-.L......|
-00000070  41 46 1a 0a 93 cf 12 33  c4 79 41 aa 73 fc 12 14  |AF.....3.yA.s...|
-00000080  03 03 00 01 01 17 03 03  00 17 7d c4 d7 dd 02 23  |..........}....#|
-00000090  a5 5b 1f 1b 31 ba fa 77  21 9f a0 21 bd 94 19 e3  |.[..1..w!..!....|
-000000a0  44 17 03 03 00 42 b7 5e  0d fe db fd 32 64 15 d2  |D....B.^....2d..|
-000000b0  b6 14 7f 18 fe 39 f3 50  c2 d4 0d 36 cd 60 e7 49  |.....9.P...6.`.I|
-000000c0  e1 eb fe 36 be ec dd b1  3a 75 d4 12 b1 13 7d eb  |...6....:u....}.|
-000000d0  a0 47 18 4a e1 b4 1c 1f  91 33 5f a7 99 28 89 d0  |.G.J.....3_..(..|
-000000e0  0e 4e 79 9e be 5c 7e 36  17 03 03 02 6d 0b b3 0e  |.Ny..\~6....m...|
-000000f0  03 f8 e4 35 b7 d5 3f 3e  8c 8c a1 dc a3 b5 0c 74  |...5..?>.......t|
-00000100  69 88 5d 8e a4 fa 02 b0  6f f4 0e 38 cc 95 12 e2  |i.].....o..8....|
-00000110  f1 e3 47 89 a6 1d 80 26  cb 23 6e f3 83 1c e4 85  |..G....&.#n.....|
-00000120  7b 1a 4d 12 c8 bf ff 07  39 a9 4e 4e d7 45 35 23  |{.M.....9.NN.E5#|
-00000130  9b f9 59 6d a5 b0 49 1b  5f e7 42 62 17 00 1e 57  |..Ym..I._.Bb...W|
-00000140  53 c5 22 fb 05 89 fd fe  5d de 71 e8 26 fd 6d e3  |S.".....].q.&.m.|
-00000150  fc b9 cb 1f d5 d4 84 d1  67 fe 8a a0 74 ff ad ff  |........g...t...|
-00000160  c8 35 fe c2 9a 17 33 18  51 c2 cd 19 7c dc 5d c5  |.5....3.Q...|.].|
-00000170  7c e6 d0 38 ab 28 0b 8c  78 51 aa 7f ef f0 9a c3  ||..8.(..xQ......|
-00000180  df 26 d2 bc 1b b6 98 b1  16 35 9d f0 73 b7 15 f7  |.&.......5..s...|
-00000190  7d 9f 3e fe 4c 75 e7 c7  5d cb c2 e5 29 4a 30 32  |}.>.Lu..]...)J02|
-000001a0  e2 da 3c 2c 16 ba 89 41  28 5c 33 75 b3 ed d1 e6  |..<,...A(\3u....|
-000001b0  4f f6 bb 33 62 53 9d be  fe d3 53 b5 bd 3e e3 b5  |O..3bS....S..>..|
-000001c0  0a 37 67 60 33 c3 72 a8  ea 55 73 3c b2 7f ed 8b  |.7g`3.r..Us<....|
-000001d0  59 5e 44 e4 76 0d 1e 3c  3e 1c 9c 8c 86 3d 0a a3  |Y^D.v..<>....=..|
-000001e0  78 bd 13 77 eb dc 22 e5  96 ff ae 44 94 cd ef ae  |x..w.."....D....|
-000001f0  ca 64 ec 06 a1 38 49 17  ce a5 c4 34 86 fd 55 1f  |.d...8I....4..U.|
-00000200  32 31 d5 b0 8c d6 b5 bc  b8 29 29 97 b5 39 a0 f8  |21.......))..9..|
-00000210  b1 b5 72 24 ff ce 6f 7d  6a 0d 18 26 8f 9a e8 d3  |..r$..o}j..&....|
-00000220  e6 e0 7c 9c 56 45 ca 48  44 69 05 53 40 eb 96 c5  |..|.VE.HDi.S@...|
-00000230  17 aa 28 56 20 ee 82 fd  de d1 55 b8 e9 27 ae 3d  |..(V .....U..'.=|
-00000240  e1 44 d6 0b b9 7a 25 77  b0 f1 be 64 ae cc 0d 44  |.D...z%w...d...D|
-00000250  af 57 32 9f cf bc c0 07  00 0b 19 97 08 0a d5 50  |.W2............P|
-00000260  20 0e ef d5 1e 2e 68 82  ae 2d 84 47 3d 9b 5b 24  | .....h..-.G=.[$|
-00000270  55 95 b2 93 e0 60 a2 cd  e5 72 69 b3 e2 de da 70  |U....`...ri....p|
-00000280  76 88 be 1f 5a 8e 7a d8  ff 94 db b0 92 b2 a1 a1  |v...Z.z.........|
-00000290  26 5b 3b d5 5e 67 16 b7  6a 9f dc ab 21 7e df 6e  |&[;.^g..j...!~.n|
-000002a0  2a 73 e9 20 40 4b c8 34  fc 4b be f6 d8 ba 78 d7  |*s. @K.4.K....x.|
-000002b0  a4 c2 ed a9 52 f9 ea 88  67 5e 10 92 8f ba 83 cd  |....R...g^......|
-000002c0  19 79 82 c5 76 06 d9 98  9f 68 2e 34 82 2f 9a 41  |.y..v....h.4./.A|
-000002d0  fb 63 b6 8c 79 56 62 9d  bb bc b5 22 ab 28 35 f7  |.c..yVb....".(5.|
-000002e0  bc c6 a8 6b e7 86 01 c3  6c e5 88 28 57 09 65 31  |...k....l..(W.e1|
-000002f0  b2 5c 0a 60 46 af 94 2c  d4 37 49 9b 4c e4 4b bb  |.\.`F..,.7I.L.K.|
-00000300  fb 0d 87 94 82 11 09 26  04 6f ec e9 a6 f4 9c ca  |.......&.o......|
-00000310  79 a0 d0 48 32 5a 02 58  70 81 d0 b6 6d 77 2f 6f  |y..H2Z.Xp...mw/o|
-00000320  4e 9b db ca 82 38 ed a6  60 8e e2 b6 14 33 f5 02  |N....8..`....3..|
-00000330  4b 97 a4 86 2f 43 9d ee  88 2c 1c 58 7e 47 30 cc  |K.../C...,.X~G0.|
-00000340  ec 0d aa 22 13 60 be e2  c9 c4 59 90 67 96 9b 2a  |...".`....Y.g..*|
-00000350  41 79 49 00 71 80 e9 0d  12 c3 17 03 03 00 99 ec  |AyI.q...........|
-00000360  f5 a1 45 64 61 fc 61 35  d5 2f bf 20 02 68 0b 10  |..Eda.a5./. .h..|
-00000370  df c4 4b e7 2c 43 bc f5  3d 0b 7e 9f a4 71 09 2c  |..K.,C..=.~..q.,|
-00000380  a6 cf f4 f4 b4 2c 08 0c  03 50 ac 47 74 ad 24 f1  |.....,...P.Gt.$.|
-00000390  04 f3 d4 83 42 3f 35 a5  57 ff ab 59 0c 9a a2 ca  |....B?5.W..Y....|
-000003a0  6c 30 b7 87 73 af 53 f9  1d 6b e7 44 ec d1 bd 14  |l0..s.S..k.D....|
-000003b0  15 09 cf ff 82 5e a2 6d  ba 00 53 b8 b3 7c 0e e5  |.....^.m..S..|..|
-000003c0  d1 e2 a2 38 25 88 aa ee  93 c8 d9 d1 88 42 42 90  |...8%........BB.|
-000003d0  43 8d 22 d8 48 02 57 22  6a f4 e9 23 71 f0 64 30  |C.".H.W"j..#q.d0|
-000003e0  6a 68 12 a5 3c 8c 61 5e  bc 73 91 6a 01 3a 14 14  |jh..<.a^.s.j.:..|
-000003f0  86 7c 4d f5 aa cc 2f f5  17 03 03 00 35 7e f6 f5  |.|M.../.....5~..|
-00000400  6b 75 e2 63 64 5a 6b 9b  ce 6b 76 d7 47 bc 1b 47  |ku.cdZk..kv.G..G|
-00000410  9e 68 25 fe 47 2b 06 a9  72 d0 a7 3f 23 3d 71 4a  |.h%.G+..r..?#=qJ|
-00000420  da 29 fb e3 dd ee e6 f6  a5 32 cc eb da 61 2b 52  |.).......2...a+R|
-00000430  24 26                                             |$&|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 5e  |..+.....3.$... ^|
+00000060  9a da 1d cb 90 03 f2 d2  23 e3 54 fc 3d 9b 8c 92  |........#.T.=...|
+00000070  42 df cf 7a 3d 47 3f 66  a4 a6 7a 07 44 76 5c 14  |B..z=G?f..z.Dv\.|
+00000080  03 03 00 01 01 17 03 03  00 17 53 54 e6 de 6a af  |..........ST..j.|
+00000090  c2 d9 b8 39 b6 ae 3e 9f  54 60 e1 fa 29 5a fb 16  |...9..>.T`..)Z..|
+000000a0  20 17 03 03 00 42 f4 a5  7f e3 e7 ba 6a 88 e1 f2  | ....B......j...|
+000000b0  fd 25 3e ba 05 00 29 77  ff 69 6e e0 ac 50 99 50  |.%>...)w.in..P.P|
+000000c0  ac 1e bd 8c 52 e6 28 5d  67 bb bb 20 61 69 5b 97  |....R.(]g.. ai[.|
+000000d0  7f 29 79 97 bf 13 24 25  ad 3b 01 78 c4 a4 4e 9a  |.)y...$%.;.x..N.|
+000000e0  06 d6 20 da 63 27 97 8d  17 03 03 02 6d 79 7e 9e  |.. .c'......my~.|
+000000f0  01 98 a9 7c ba 63 43 2b  21 b1 bc 2c b2 17 c2 35  |...|.cC+!..,...5|
+00000100  76 f2 30 01 69 45 d4 56  e0 5a 2c 62 aa 6f a8 1f  |v.0.iE.V.Z,b.o..|
+00000110  b8 31 df be 6f 3f 60 16  dc 61 5c 9f 99 a9 63 7d  |.1..o?`..a\...c}|
+00000120  7e 2b d2 ae 02 46 12 db  be 51 9e 15 dd 1c 96 b0  |~+...F...Q......|
+00000130  74 69 20 c0 e1 78 46 01  a6 23 72 28 ba c7 a3 48  |ti ..xF..#r(...H|
+00000140  1e dc 0b 57 c9 b4 39 88  3d 39 c7 6c 38 c7 3a 29  |...W..9.=9.l8.:)|
+00000150  a4 45 79 10 04 61 cd db  df 5b 88 c1 35 4b 38 ea  |.Ey..a...[..5K8.|
+00000160  6d 72 57 9f e0 2e 37 61  3d c8 aa b2 25 a6 11 5c  |mrW...7a=...%..\|
+00000170  09 e2 3a 17 d3 c5 37 2f  a7 b4 73 fe e2 61 df 1d  |..:...7/..s..a..|
+00000180  cd 4f 72 4a 67 c3 c7 e2  53 78 61 78 2c 37 44 12  |.OrJg...Sxax,7D.|
+00000190  4d 0e 8c 14 0b de 3b a4  cf ad 8f d4 74 61 77 4b  |M.....;.....tawK|
+000001a0  36 2d f2 8f 68 95 38 9d  e2 9f cf cc 03 15 89 b9  |6-..h.8.........|
+000001b0  96 c4 47 e5 2f 65 0a 5c  5d 8f 5c 64 9d c8 76 d2  |..G./e.\].\d..v.|
+000001c0  5d a7 90 4d f5 84 2d 31  2d 6c bd ee 0d 45 2b 50  |]..M..-1-l...E+P|
+000001d0  79 f7 8c 34 40 f9 bc f4  38 b3 56 a9 6b ca 54 50  |y..4@...8.V.k.TP|
+000001e0  19 f8 9a 73 74 9b 0a 92  ee 22 53 05 01 38 43 3a  |...st...."S..8C:|
+000001f0  49 fe 2d e9 39 c1 76 b0  04 df 8a 3d cc fc 9b 84  |I.-.9.v....=....|
+00000200  cd 22 ba 40 24 69 93 b9  c5 b3 ed fd ad 94 1b 83  |.".@$i..........|
+00000210  b5 07 a9 e7 94 14 4b c1  59 89 78 56 03 28 29 c3  |......K.Y.xV.().|
+00000220  a8 a4 96 14 5a 51 9a 50  f9 34 3c 5a 76 8f 74 68  |....ZQ.P.4<Zv.th|
+00000230  63 cc 5c 0c de e2 30 b8  c0 46 13 78 c5 92 97 7f  |c.\...0..F.x....|
+00000240  23 74 0b 54 4e ea 6e 5d  bd 8e b8 89 12 2c 01 b0  |#t.TN.n].....,..|
+00000250  ed 03 4d 67 1e 96 22 03  77 78 d1 4f c0 b7 4a 71  |..Mg..".wx.O..Jq|
+00000260  6b 11 a3 c4 18 7a da c4  b5 7b 78 74 21 f5 44 49  |k....z...{xt!.DI|
+00000270  70 0e 78 34 fb 66 ed a1  86 52 3c 93 de 17 a1 4d  |p.x4.f...R<....M|
+00000280  4a f3 f6 9e ff f8 e1 18  b9 80 12 9a 34 7a 58 bb  |J...........4zX.|
+00000290  7a aa 95 d0 c7 a7 88 d2  d3 86 bf 7a c9 e3 fc 83  |z..........z....|
+000002a0  c6 b9 db ee ad eb b8 fd  4b 82 4f 34 9d eb 45 eb  |........K.O4..E.|
+000002b0  33 19 aa a5 b6 82 47 b3  5b f4 e7 be f0 49 bd 76  |3.....G.[....I.v|
+000002c0  41 82 8d 09 86 82 cb 45  12 f8 aa 9a 99 43 da 31  |A......E.....C.1|
+000002d0  4f cb 9e c4 f6 a0 40 85  2b 9d 55 6e 15 66 b5 f8  |O.....@.+.Un.f..|
+000002e0  0b 3e 0e aa 4b aa 2e 6b  2a 44 3f ea 23 d5 ab 55  |.>..K..k*D?.#..U|
+000002f0  a0 11 51 04 0b 82 02 d9  24 85 13 2e d1 29 44 9a  |..Q.....$....)D.|
+00000300  15 7f a4 1b c4 f5 36 44  88 9a 6e 5a 1e 2f 14 fa  |......6D..nZ./..|
+00000310  d0 e7 fc 6a fa e5 f3 4a  55 20 73 9b e4 73 2e 47  |...j...JU s..s.G|
+00000320  88 25 b7 69 d9 28 fe 50  8c fc f2 94 29 84 c4 7f  |.%.i.(.P....)...|
+00000330  d6 b2 eb 28 fa 51 8e ff  00 09 35 d3 b2 32 3a c6  |...(.Q....5..2:.|
+00000340  bb 91 a7 c4 b7 88 df 4b  f7 09 ef e7 e1 92 60 cd  |.......K......`.|
+00000350  de 34 4f 39 ee b8 ce 50  6a b9 17 03 03 00 99 64  |.4O9...Pj......d|
+00000360  76 ab 48 eb 68 7d a6 68  60 aa c2 93 bd 31 81 c8  |v.H.h}.h`....1..|
+00000370  b6 15 ba d1 54 94 04 1b  4b 29 86 e1 12 84 ad d5  |....T...K)......|
+00000380  ba eb 4a 7a 7a a8 56 41  04 8c 84 c7 83 46 8c 50  |..Jzz.VA.....F.P|
+00000390  c4 e3 02 d0 28 a4 fe 24  c4 b8 96 13 4f 87 27 ec  |....(..$....O.'.|
+000003a0  6b e3 84 4b 97 13 65 fa  1e 5e 9d ac 85 ea a0 3d  |k..K..e..^.....=|
+000003b0  67 96 e5 ec 88 84 6b 79  d9 16 55 c1 1c 72 17 aa  |g.....ky..U..r..|
+000003c0  9b 49 13 86 d4 39 0d 2a  c8 88 b3 5f f5 11 cb 5f  |.I...9.*..._..._|
+000003d0  bd 22 57 2c bc c1 01 72  b9 c3 f5 d9 a2 3b 8e ff  |."W,...r.....;..|
+000003e0  44 b2 82 b6 5b 35 75 b5  7a 50 40 81 4e a7 2d 40  |D...[5u.zP@.N.-@|
+000003f0  21 28 d9 c4 d9 e5 07 e1  17 03 03 00 35 23 ab b2  |!(..........5#..|
+00000400  60 56 47 6a fe cb 0e 54  22 d5 8f 29 0a 34 e6 82  |`VGj...T"..).4..|
+00000410  5b 10 35 ac 93 97 92 6b  39 5d b8 01 54 9c 86 b0  |[.5....k9]..T...|
+00000420  41 70 52 88 92 cf dd b7  f8 5d d1 18 e1 1f 78 53  |ApR......]....xS|
+00000430  e4 43                                             |.C|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 1e 67 f8 08 c4 15  |...........g....|
-00000010  47 a9 da 91 df f1 61 0f  50 21 f6 da dd a9 a6 e4  |G.....a.P!......|
-00000020  00 05 29 62 d2 cc fe 14  57 a2 aa 46 16 b3 46 6e  |..)b....W..F..Fn|
-00000030  82 87 dc bb 1a d9 e7 c6  e9 1a 3b 7e a5 94 9b 7e  |..........;~...~|
-00000040  bb 07 b8 f3 de cc f1 85  d5 ee ff 0b 5a 19 c1 e3  |............Z...|
-00000050  5f 47 f4 81 f4 d3 2d 85  f8 38 90 00 10 54 9a 3e  |_G....-..8...T.>|
-00000060  56 e4 99 a5 31 b1 dc d4  77 fe 28 3a b4 3e 63 42  |V...1...w.(:.>cB|
-00000070  bc 05 c7 8a e5 d9 01 5c  c9 18 39 1e 62 4f b4 58  |.......\..9.bO.X|
-00000080  d3 9a 6a e1 a4 d3 ef 7f  b8 0f 35 ac 2a 4a ba 77  |..j.......5.*J.w|
-00000090  24 1e 24 6e 0e a2 8e f1  ba 5f fe 24 03 ed 1d e7  |$.$n....._.$....|
-000000a0  43 2d fb bb 2e a9 a5 9a  18 11 39 99 a1 5a b7 92  |C-........9..Z..|
-000000b0  37 91 f2 80 b2 f6 57 87  f9 a5 d9 da 36 b5 db 1a  |7.....W.....6...|
-000000c0  28 d8 9e f7 92 6f cf 0c  57 9a 95 42 ef 6a 50 f6  |(....o..W..B.jP.|
-000000d0  38 4f 74 52 09 34 ca 8a  d8 c7 a2 d2 69 bb db 13  |8OtR.4......i...|
-000000e0  b1 ef f2 6d d3 f0 dd 5d  b7 93 25 87 84 cd 87 6d  |...m...]..%....m|
-000000f0  c7 24 99 2b c8 02 25 1c  58 bc 98 03 33 15 ee 3e  |.$.+..%.X...3..>|
-00000100  96 d0 af 82 c7 74 71 ec  ef a6 eb 88 20 55 1b fa  |.....tq..... U..|
-00000110  ea 01 38 5b 68 77 f1 3b  2a e6 d1 96 bc 28 b3 97  |..8[hw.;*....(..|
-00000120  47 94 14 3f 6b 73 82 bf  b0 ba fe 45 2a 45 45 1c  |G..?ks.....E*EE.|
-00000130  30 68 f5 74 07 15 18 00  a7 4f 62 df 7c ff 4c 0a  |0h.t.....Ob.|.L.|
-00000140  93 d6 60 8b 1f 0e 7f d3  88 43 90 f6 18 05 f1 ae  |..`......C......|
-00000150  ac 04 63 8b 43 b8 11 74  b1 87 e6 bc 2d 72 4a 2e  |..c.C..t....-rJ.|
-00000160  75 ab 16 5e 0e bc 76 6d  d6 0e bc 39 0d 3c 76 01  |u..^..vm...9.<v.|
-00000170  1f 54 73 11 8a ee 25 da  54 18 9d ce c5 4c 97 ef  |.Ts...%.T....L..|
-00000180  a9 3a 83 1f dc 8f 18 48  87 64 6e 9d 01 db 7d a7  |.:.....H.dn...}.|
-00000190  46 28 11 6d 45 83 04 43  b0 71 23 b7 84 20 ab 98  |F(.mE..C.q#.. ..|
-000001a0  f2 e0 f5 3e 66 44 63 4b  43 e6 25 28 44 d2 2d 04  |...>fDcKC.%(D.-.|
-000001b0  39 0e cd 15 a3 04 d9 db  4f a4 03 cb d2 84 da 41  |9.......O......A|
-000001c0  5c 60 bf 00 77 19 68 b1  50 99 c2 88 d2 56 1e 29  |\`..w.h.P....V.)|
-000001d0  c9 8c 83 98 7a 2f 04 e6  d6 09 5c 27 af a7 69 c4  |....z/....\'..i.|
-000001e0  f7 4a ed b5 db d3 7a aa  75 f1 b2 8d 87 15 9a d1  |.J....z.u.......|
-000001f0  00 fa 7f 58 06 2d 72 2b  f7 27 b3 5b 76 57 21 35  |...X.-r+.'.[vW!5|
-00000200  80 ce 8e bd e4 bb 45 01  c4 6b 43 f1 44 0a 5f 21  |......E..kC.D._!|
-00000210  76 48 ae ce 8e 1d ba f7  7c 4f ae a2 d8 77 ce 9c  |vH......|O...w..|
-00000220  6d 69 b7 1e 78 ab 02 ed  15 17 03 03 00 a3 84 ed  |mi..x...........|
-00000230  ba 37 b6 6f 96 68 ef 9e  b7 c6 23 5a 9f 1b ed ad  |.7.o.h....#Z....|
-00000240  3b 5d ab d4 22 d8 3e ab  db db c5 b9 57 f8 68 d1  |;]..".>.....W.h.|
-00000250  93 d5 36 fe 0c c0 fe 29  88 8b 63 ac 0e 06 4e bd  |..6....)..c...N.|
-00000260  9e b9 24 65 b5 9c e7 b9  58 4c 8a 07 10 9c 17 f7  |..$e....XL......|
-00000270  c0 67 af ff c8 ff fc 87  1b fa c8 21 21 17 2d 43  |.g.........!!.-C|
-00000280  f5 fc 4f 0d bf 01 58 b6  f1 58 08 39 f4 0d 94 69  |..O...X..X.9...i|
-00000290  8f f0 c1 14 93 41 56 32  41 11 84 58 73 13 69 2a  |.....AV2A..Xs.i*|
-000002a0  ed 2a 34 61 73 8d 47 41  62 33 39 66 fa 3d 2a e5  |.*4as.GAb39f.=*.|
-000002b0  bf 09 d6 c0 1e 3c 98 b3  86 a6 87 b5 a7 d2 cf d9  |.....<..........|
-000002c0  dd f8 2e 86 f7 13 84 4a  f7 3b ec 8e e5 06 f5 cd  |.......J.;......|
-000002d0  42 17 03 03 00 35 b2 38  87 30 58 9e 03 6e 44 dd  |B....5.8.0X..nD.|
-000002e0  fb 87 11 3a a0 e7 c1 2d  74 3b 35 d0 3f bc de cd  |...:...-t;5.?...|
-000002f0  71 61 8b 7c a5 7e c6 2d  76 67 44 9e 75 e5 9b 3b  |qa.|.~.-vgD.u..;|
-00000300  c5 2b 42 8a 4a 7f 0e 12  4c 2e 0f 17 03 03 00 17  |.+B.J...L.......|
-00000310  d3 61 ed 75 dd 2e ee dd  79 fe d1 7c 4d 23 b1 95  |.a.u....y..|M#..|
-00000320  ea 14 d6 27 d0 02 46 17  03 03 00 13 84 c1 07 6f  |...'..F........o|
-00000330  1c c6 22 a8 ae 6d a8 e8  62 54 ac b2 53 57 bb     |.."..m..bT..SW.|
+00000000  14 03 03 00 01 01 17 03  03 02 1e 19 c5 11 9d 64  |...............d|
+00000010  8f f5 a9 21 53 fa cc 91  67 30 39 c0 77 d6 35 7b  |...!S...g09.w.5{|
+00000020  b8 a3 ae 44 8a 9a b1 68  5a 20 72 a6 ae 3a 1b 9f  |...D...hZ r..:..|
+00000030  03 eb d9 ed 91 20 49 ba  88 39 99 1c 4e 3a 2b 1b  |..... I..9..N:+.|
+00000040  42 b7 a3 97 a3 a3 6c 7e  3b 4c c1 74 dc 71 e6 14  |B.....l~;L.t.q..|
+00000050  6c 5a 36 12 cb 87 a6 75  ce b3 e3 a8 f2 c8 36 12  |lZ6....u......6.|
+00000060  3d c8 b8 2a 36 e4 40 38  3e 20 1d de 2a 31 b1 04  |=..*6.@8> ..*1..|
+00000070  86 cb 9b c1 f3 fc 01 67  7e 40 0b b8 c4 fa 8f a0  |.......g~@......|
+00000080  a7 5b 24 43 a9 d3 eb 55  99 ec 0b 19 cb ec 19 97  |.[$C...U........|
+00000090  c8 0f c0 5e 8c b2 b1 93  80 70 7c 0b aa 7c 6c 44  |...^.....p|..|lD|
+000000a0  1a 11 dc bd 0d 97 18 f3  ca c6 50 68 ca 77 ab 18  |..........Ph.w..|
+000000b0  79 a9 8b 73 13 48 90 c3  4a cd ae f2 60 ea 0c 20  |y..s.H..J...`.. |
+000000c0  eb ad 84 fb 2f 01 7e 2c  f6 7d ea da 22 59 5f 88  |..../.~,.}.."Y_.|
+000000d0  ff 10 19 81 d5 29 1b 0f  36 7b 84 66 eb bf e3 f9  |.....)..6{.f....|
+000000e0  1c 68 fa 03 93 3e ba c6  58 e2 a9 57 94 8c a8 29  |.h...>..X..W...)|
+000000f0  e2 f9 4b 6d 85 01 e8 f2  11 a2 04 38 73 8e 69 49  |..Km.......8s.iI|
+00000100  4b 7f ca be aa 5f 50 ac  82 16 e6 92 78 87 13 f4  |K...._P.....x...|
+00000110  fc 21 e8 2d 89 d0 f7 fb  73 0b f3 b7 6a 67 24 e8  |.!.-....s...jg$.|
+00000120  d9 33 59 49 d6 88 24 a2  66 f5 c8 4d fe 88 93 77  |.3YI..$.f..M...w|
+00000130  f9 3f ee ae 0b 6a 23 7a  8f b7 66 d4 68 7d 38 51  |.?...j#z..f.h}8Q|
+00000140  85 0a a0 f5 03 f6 e8 2f  cd 0b ac 58 64 82 38 20  |......./...Xd.8 |
+00000150  f2 72 0a 85 83 55 cb db  62 59 f4 40 08 28 f9 8a  |.r...U..bY.@.(..|
+00000160  47 a2 ea a1 1b e1 4c 0a  a4 74 cb a2 11 6f e5 68  |G.....L..t...o.h|
+00000170  e4 ff 38 b0 a5 fc 21 9e  eb de 43 b6 e7 27 cf 9a  |..8...!...C..'..|
+00000180  80 23 59 a2 e9 a8 12 ae  47 09 5c 48 c2 cb c8 e0  |.#Y.....G.\H....|
+00000190  a6 fa 81 c5 49 a4 77 4b  d3 83 0a ce 6e a5 2b 88  |....I.wK....n.+.|
+000001a0  f2 f5 12 2f 0e 7e 10 20  5b c7 31 39 54 ed 19 33  |.../.~. [.19T..3|
+000001b0  5c 94 b5 56 16 fa 0c b0  ec 28 76 fa 38 ca 08 c6  |\..V.....(v.8...|
+000001c0  13 c3 1f 8a 20 35 73 4b  bb bf d8 96 65 de cd f3  |.... 5sK....e...|
+000001d0  44 d4 5b 3d 54 aa ac 53  a9 cc 31 99 86 22 5a f9  |D.[=T..S..1.."Z.|
+000001e0  9e bd f1 f3 74 07 e4 fe  f7 3a 35 44 e5 c6 48 3f  |....t....:5D..H?|
+000001f0  a3 81 1e 67 96 51 0f e6  7d 43 67 9c 12 6c dd 91  |...g.Q..}Cg..l..|
+00000200  c4 f9 20 4d 88 41 fc 40  c5 ee c2 11 fb f1 67 da  |.. M.A.@......g.|
+00000210  7b b6 d0 1b f8 6e f7 8b  07 f2 9e 12 56 dc 75 31  |{....n......V.u1|
+00000220  cd b9 53 62 3f 2f 72 cf  ee 17 03 03 00 a4 f9 ec  |..Sb?/r.........|
+00000230  72 94 94 1c 52 ab 9e 6d  04 5a 26 07 15 3a f5 dd  |r...R..m.Z&..:..|
+00000240  f3 45 18 20 de 2e 97 f7  6a a4 7c 92 68 aa 71 55  |.E. ....j.|.h.qU|
+00000250  b7 7a 3c 8f 54 e7 cc 31  e1 54 9c ad 8e b4 57 11  |.z<.T..1.T....W.|
+00000260  1d 79 85 4a da 3f 1b ab  fb f4 d4 d9 4d 8a 2e da  |.y.J.?......M...|
+00000270  68 3e f9 aa 16 52 cc 4e  49 7a 00 bf fc e8 b5 16  |h>...R.NIz......|
+00000280  43 0c 6d aa 82 49 3c 16  43 56 55 35 ee 47 c3 1c  |C.m..I<.CVU5.G..|
+00000290  99 25 6d 30 89 64 5e 23  bf de fc cc 7c 40 94 28  |.%m0.d^#....|@.(|
+000002a0  d8 ed ec c2 e2 8b 24 64  64 b6 e8 6c 29 82 b5 ba  |......$dd..l)...|
+000002b0  d5 59 7a 6f 11 6e cc 30  91 c8 c0 8b 9f dd 13 59  |.Yzo.n.0.......Y|
+000002c0  a9 72 18 f6 6e ce 3a 47  6b 4f 26 55 61 bf 20 7a  |.r..n.:GkO&Ua. z|
+000002d0  d8 c3 17 03 03 00 35 d7  fc bc 10 29 75 c3 70 0a  |......5....)u.p.|
+000002e0  02 e4 cf 36 20 49 5d 64  78 e9 27 db 2d e3 1a 66  |...6 I]dx.'.-..f|
+000002f0  f3 a8 82 7e 64 f0 29 27  81 6c bd b7 a7 86 a2 6a  |...~d.)'.l.....j|
+00000300  ac 4e 7b da 48 7c d8 9c  39 6c 95 45 17 03 03 00  |.N{.H|..9l.E....|
+00000310  17 c9 13 54 e9 22 62 7e  89 17 de 98 52 93 26 76  |...T."b~....R.&v|
+00000320  73 a0 7d 2c 60 68 c8 68  17 03 03 00 13 ad 3a 53  |s.},`h.h......:S|
+00000330  d1 41 0e 99 26 c8 fb 22  8f e6 d3 a4 1d 83 ff 28  |.A..&..".......(|
index c5d947c2ce8c46c8cbcbf1dd18399d470adff483..3bc3a75b366e7a8fbe8f0c0c8feef418d0cfd1ee 100644 (file)
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 51 01 00 00  4d 03 01 5e bf ff e7 c2  |....Q...M..^....|
-00000010  c1 98 4a a3 cf 5a e8 8d  8f 19 9e 85 48 5b 92 cc  |..J..Z......H[..|
-00000020  7d 0c 14 1e 2e 50 5b d7  dd fe ef 00 00 04 c0 0a  |}....P[.........|
+00000000  16 03 01 00 51 01 00 00  4d 03 01 76 4b 58 ef 57  |....Q...M..vKX.W|
+00000010  d5 8d ba b7 0b fe d4 b3  2b a7 76 7c f1 72 59 39  |........+.v|.rY9|
+00000020  fa 02 66 88 4a 55 72 15  9e 42 8c 00 00 04 c0 0a  |..f.JUr..B......|
 00000030  00 ff 01 00 00 20 00 0b  00 04 03 00 01 02 00 0a  |..... ..........|
 00000040  00 0c 00 0a 00 1d 00 17  00 1e 00 19 00 18 00 16  |................|
 00000050  00 00 00 17 00 00                                 |......|
 00000220  c1 33 13 83 0d 94 06 bb  d4 37 7a f6 ec 7a c9 86  |.3.......7z..z..|
 00000230  2e dd d7 11 69 7f 85 7c  56 de fb 31 78 2b e4 c7  |....i..|V..1x+..|
 00000240  78 0d ae cb be 9e 4e 36  24 31 7b 6a 0f 39 95 12  |x.....N6$1{j.9..|
-00000250  07 8f 2a 16 03 01 00 b5  0c 00 00 b1 03 00 1d 20  |..*............ |
+00000250  07 8f 2a 16 03 01 00 b3  0c 00 00 af 03 00 1d 20  |..*............ |
 00000260  2f e5 7d a3 47 cd 62 43  15 28 da ac 5f bb 29 07  |/.}.G.bC.(.._.).|
 00000270  30 ff f6 84 af c4 cf c2  ed 90 99 5f 58 cb 3b 74  |0.........._X.;t|
-00000280  00 8b 30 81 88 02 42 00  c3 eb 60 b8 d3 af cb 2d  |..0...B...`....-|
-00000290  4f ca 46 6d e4 fe 47 41  82 1e d4 14 0f 08 ab b6  |O.Fm..GA........|
-000002a0  b8 41 8b 46 f5 28 bb 87  28 73 a0 5c e9 ce f5 56  |.A.F.(..(s.\...V|
-000002b0  11 02 17 2c 39 b6 28 6c  ec de 12 bf 22 91 3d 06  |...,9.(l....".=.|
-000002c0  ac 8e 0a 92 b1 46 69 86  44 02 42 01 fd 70 6e 63  |.....Fi.D.B..pnc|
-000002d0  1b 2a 21 47 9b 42 9c d4  4a 38 20 dd 94 05 c4 0f  |.*!G.B..J8 .....|
-000002e0  5d b2 48 c8 17 90 01 4d  4f 7e 7a ef bb b2 5b 26  |].H....MO~z...[&|
-000002f0  7e e1 24 f5 80 93 69 72  3f cf bb 5d 52 ee ec b4  |~.$...ir?..]R...|
-00000300  cc 0c 96 1f 93 4c d6 a8  c7 b2 91 f5 6d 16 03 01  |.....L......m...|
-00000310  00 04 0e 00 00 00                                 |......|
+00000280  00 89 30 81 86 02 41 00  b5 7c a4 63 77 fa 75 cd  |..0...A..|.cw.u.|
+00000290  82 a5 75 15 08 09 e8 6d  e9 ba 07 1f f9 9c 24 a5  |..u....m......$.|
+000002a0  30 08 d0 51 3b d1 82 14  14 dd 5a 5d c9 2d 91 6f  |0..Q;.....Z].-.o|
+000002b0  b3 92 30 f1 38 36 e8 34  9e 99 50 a0 c4 29 04 ef  |..0.86.4..P..)..|
+000002c0  97 f3 cd dc be 22 86 b9  02 41 6a dd 3a 57 5b 61  |....."...Aj.:W[a|
+000002d0  ff 68 7d 1e 5e bb 67 5f  76 44 7c f2 f2 03 95 f2  |.h}.^.g_vD|.....|
+000002e0  e0 1a 53 70 ce b0 fa cc  7a f3 9a e3 2f 37 a3 cf  |..Sp....z.../7..|
+000002f0  b5 ca 1d fb fe a3 0d e2  d6 c1 d2 7d 48 80 5b 82  |...........}H.[.|
+00000300  56 29 1b b7 43 2e b3 38  19 39 49 16 03 01 00 04  |V)..C..8.9I.....|
+00000310  0e 00 00 00                                       |....|
 >>> Flow 3 (client to server)
-00000000  16 03 01 00 25 10 00 00  21 20 ec f2 2d ca 02 ce  |....%...! ..-...|
-00000010  11 2d eb 26 d7 d9 fc b2  a7 2d 34 5b a9 3a 0b 2f  |.-.&.....-4[.:./|
-00000020  5c 49 a9 69 1a 3a 83 90  ec 5f 14 03 01 00 01 01  |\I.i.:..._......|
-00000030  16 03 01 00 30 9f 06 c7  a7 a0 c3 a5 3d 60 6e fb  |....0.......=`n.|
-00000040  c6 18 a4 d2 80 2e ad 8f  cf 92 84 94 36 f8 81 28  |............6..(|
-00000050  c5 3f 37 e8 d6 e7 6d a3  f5 32 63 a0 ab 7a db 12  |.?7...m..2c..z..|
-00000060  17 e1 e4 33 d6                                    |...3.|
+00000000  16 03 01 00 25 10 00 00  21 20 82 03 ad 10 45 0a  |....%...! ....E.|
+00000010  b9 a4 85 0d 88 bb 9e 16  f1 6c 6a 17 c0 11 09 48  |.........lj....H|
+00000020  b4 8b 27 4e 3a 45 a1 b7  a2 03 14 03 01 00 01 01  |..'N:E..........|
+00000030  16 03 01 00 30 33 5d a1  85 df 96 6d cf a1 b3 c4  |....03]....m....|
+00000040  3f 3c 40 aa 05 25 af 62  ee e9 ce 48 ba e8 08 88  |?<@..%.b...H....|
+00000050  95 77 c7 f1 87 c6 ce 46  a2 50 2f 41 3c 8f bf 1a  |.w.....F.P/A<...|
+00000060  1e 1e 1b 39 9c                                    |...9.|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 18 29 35 d7 c5  |..........0.)5..|
-00000010  a2 31 3b 26 85 de 50 26  39 4d 16 22 58 a2 17 bd  |.1;&..P&9M."X...|
-00000020  4b 73 33 8d dc 3f 92 20  f2 ca 22 00 f5 31 db a7  |Ks3..?. .."..1..|
-00000030  18 79 fc 71 87 68 a5 1d  a6 db 33 17 03 01 00 20  |.y.q.h....3.... |
-00000040  0d be 57 e4 12 6d 2d 3a  33 24 a0 0c c4 9b 27 09  |..W..m-:3$....'.|
-00000050  85 e0 0e 42 04 79 21 9a  bf 47 fa 0b 38 1a ce 8f  |...B.y!..G..8...|
-00000060  17 03 01 00 30 6d 27 f1  9b cf 55 4d 65 48 38 1b  |....0m'...UMeH8.|
-00000070  d9 dd 1d 5b 81 2f 10 a5  65 28 83 93 b3 b1 3a 72  |...[./..e(....:r|
-00000080  f0 15 9a e5 9f 21 80 f1  59 a5 0e f1 0c 2b d1 0c  |.....!..Y....+..|
-00000090  d4 27 73 f3 7e 15 03 01  00 20 6f 08 27 3a d2 60  |.'s.~.... o.':.`|
-000000a0  c3 27 bc 73 55 bb 43 53  e2 e0 87 16 ca 8f 49 f0  |.'.sU.CS......I.|
-000000b0  88 a8 20 30 9d 42 86 d9  c3 36                    |.. 0.B...6|
+00000000  14 03 01 00 01 01 16 03  01 00 30 7b 30 af df 92  |..........0{0...|
+00000010  2b ee 4d 02 e3 6c 6f 8b  72 32 16 0e 4d ba 71 0d  |+.M..lo.r2..M.q.|
+00000020  86 0d f5 7d fe dd 07 05  3d fe 70 9b 7f d9 2b c6  |...}....=.p...+.|
+00000030  7e 04 82 5f ef 0c 0b c1  e7 a5 18 17 03 01 00 20  |~.._........... |
+00000040  ad bd 43 a6 10 e8 e2 41  39 35 69 af a0 00 5f 81  |..C....A95i..._.|
+00000050  1e 0a 5e 78 45 2f 66 27  cb 4f db 06 22 c0 ea 0f  |..^xE/f'.O.."...|
+00000060  17 03 01 00 30 16 69 7f  fa 1c 89 36 9f 99 c6 49  |....0.i....6...I|
+00000070  e6 0d 9a b7 81 00 75 f5  2d cc 89 e8 be 47 64 76  |......u.-....Gdv|
+00000080  ef 34 27 a2 46 bd 8c 14  5b 15 67 ab f1 d9 30 c3  |.4'.F...[.g...0.|
+00000090  df 96 a1 59 17 15 03 01  00 20 77 ea 6f e2 ae 81  |...Y..... w.o...|
+000000a0  80 4f 37 7b ee 37 3f 40  df a3 e4 be 80 1e 3e 83  |.O7{.7?@......>.|
+000000b0  9b 42 f7 95 50 af ab a5  60 54                    |.B..P...`T|
index 697b8102dd38d3a790ea346ba818cb2e3e14b589..f0d266bdc7af1305a66e376998f248f58e542a8e 100644 (file)
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 85 01 00 00  81 03 03 83 21 a6 e4 ea  |............!...|
-00000010  e9 7b 3a 7c 72 28 ee 68  c5 c7 fa f1 98 ed 4a be  |.{:|r(.h......J.|
-00000020  b8 42 13 fb d3 ab 63 16  d2 74 c8 00 00 04 c0 0a  |.B....c..t......|
+00000000  16 03 01 00 85 01 00 00  81 03 03 19 8a e1 c7 50  |...............P|
+00000010  ba 63 15 9b d5 85 f1 8c  55 43 d3 ce 9c d6 35 20  |.c......UC....5 |
+00000020  f3 49 3d 55 a5 11 57 6d  db 42 1d 00 00 04 c0 0a  |.I=U..Wm.B......|
 00000030  00 ff 01 00 00 54 00 0b  00 04 03 00 01 02 00 0a  |.....T..........|
 00000040  00 0c 00 0a 00 1d 00 17  00 1e 00 19 00 18 00 16  |................|
 00000050  00 00 00 17 00 00 00 0d  00 30 00 2e 04 03 05 03  |.........0......|
 00000220  c1 33 13 83 0d 94 06 bb  d4 37 7a f6 ec 7a c9 86  |.3.......7z..z..|
 00000230  2e dd d7 11 69 7f 85 7c  56 de fb 31 78 2b e4 c7  |....i..|V..1x+..|
 00000240  78 0d ae cb be 9e 4e 36  24 31 7b 6a 0f 39 95 12  |x.....N6$1{j.9..|
-00000250  07 8f 2a 16 03 03 00 b7  0c 00 00 b3 03 00 1d 20  |..*............ |
+00000250  07 8f 2a 16 03 03 00 b6  0c 00 00 b2 03 00 1d 20  |..*............ |
 00000260  2f e5 7d a3 47 cd 62 43  15 28 da ac 5f bb 29 07  |/.}.G.bC.(.._.).|
 00000270  30 ff f6 84 af c4 cf c2  ed 90 99 5f 58 cb 3b 74  |0.........._X.;t|
-00000280  04 03 00 8b 30 81 88 02  42 00 b9 39 44 59 12 77  |....0...B..9DY.w|
-00000290  8d e2 79 25 01 d1 6a 05  3d 53 ea f3 91 d6 c5 09  |..y%..j.=S......|
-000002a0  24 bd 0c ad 24 cc 1c a7  fb 03 eb 0a 0d f4 30 96  |$...$.........0.|
-000002b0  8d 28 a1 b3 64 ba 30 27  95 29 23 22 91 62 c3 1f  |.(..d.0'.)#".b..|
-000002c0  51 aa c8 be 17 85 31 8e  f5 40 3e 02 42 00 ee a1  |Q.....1..@>.B...|
-000002d0  64 14 a1 52 b3 e5 54 c9  24 53 94 5a 43 d8 4f 79  |d..R..T.$S.ZC.Oy|
-000002e0  69 4b a8 51 ee de b3 b0  f7 1a 57 a3 28 72 d2 13  |iK.Q......W.(r..|
-000002f0  a6 d3 17 0b c4 45 34 7f  10 3b 81 cb 0c 8d 51 b6  |.....E4..;....Q.|
-00000300  0b 86 21 d0 ee 1d 7e 73  6b ea 77 8c 66 dc 65 16  |..!...~sk.w.f.e.|
-00000310  03 03 00 04 0e 00 00 00                           |........|
+00000280  04 03 00 8a 30 81 87 02  42 01 f2 09 77 4a e7 f5  |....0...B...wJ..|
+00000290  a8 35 3b dd 9d 62 5a 07  97 1e 76 93 b6 07 21 3e  |.5;..bZ...v...!>|
+000002a0  c8 fd 99 35 50 8a 8b ad  e5 de 03 07 c8 5e fe 03  |...5P........^..|
+000002b0  c1 99 04 ad 53 b6 76 67  eb 04 99 54 11 4d 4d e9  |....S.vg...T.MM.|
+000002c0  74 3f 89 6e d9 c8 02 98  c5 3c cf 02 41 4e 64 21  |t?.n.....<..ANd!|
+000002d0  1a 01 5f 2e 89 17 cc 65  33 d0 59 ed 17 59 c4 43  |.._....e3.Y..Y.C|
+000002e0  0a fc 68 30 9c e2 c3 86  fb 2a c1 4a ae 32 ef 1d  |..h0.....*.J.2..|
+000002f0  06 27 36 7d d5 cd 68 23  4c e9 7e 64 b8 eb 42 05  |.'6}..h#L.~d..B.|
+00000300  ef 83 36 b2 9e a7 ae 1a  cd b0 3a 17 3a 46 16 03  |..6.......:.:F..|
+00000310  03 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
-00000000  16 03 03 00 25 10 00 00  21 20 ed 3e ba a7 43 53  |....%...! .>..CS|
-00000010  5e e4 60 aa 31 3f e1 69  60 32 25 3d fd 8b 32 da  |^.`.1?.i`2%=..2.|
-00000020  f2 c5 db c7 02 e6 4d d0  de 15 14 03 03 00 01 01  |......M.........|
-00000030  16 03 03 00 40 ee 28 f2  27 82 24 9d 17 d1 48 7a  |....@.(.'.$...Hz|
-00000040  74 2d dd 16 18 b7 70 97  2f 2b 91 47 eb c2 1d ae  |t-....p./+.G....|
-00000050  3f 48 52 cd ff e7 9e 0b  35 ad 1f 60 5e 07 b1 5e  |?HR.....5..`^..^|
-00000060  1c ba 6a 85 bb 6b 30 94  41 8a 59 81 cf 37 5f 26  |..j..k0.A.Y..7_&|
-00000070  b1 52 36 5f df                                    |.R6_.|
+00000000  16 03 03 00 25 10 00 00  21 20 73 43 c2 08 92 f5  |....%...! sC....|
+00000010  db bf 2f 8a eb 49 55 f7  5d 6b 80 64 f7 d9 75 1f  |../..IU.]k.d..u.|
+00000020  67 f6 35 21 3c 95 3f 1c  04 1a 14 03 03 00 01 01  |g.5!<.?.........|
+00000030  16 03 03 00 40 59 bb 5a  5d 76 73 a5 30 0e 29 d3  |....@Y.Z]vs.0.).|
+00000040  17 d8 2f 30 e6 ed 02 c6  83 12 44 42 d8 79 86 e0  |../0......DB.y..|
+00000050  78 7b 43 8d 5b 7c 85 42  fb 7c 67 b0 d0 71 03 0e  |x{C.[|.B.|g..q..|
+00000060  d0 6b b6 06 f1 16 72 c0  16 66 cf 53 df ae 62 3b  |.k....r..f.S..b;|
+00000070  f3 57 52 4d 08                                    |.WRM.|
 >>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 f5 05 5a a6 22  |.............Z."|
-00000020  90 4e 8d d9 f1 55 c4 78  f2 ec 9d 97 cd fe af ae  |.N...U.x........|
-00000030  b7 62 00 67 2e b2 d9 1e  0c a3 c8 6a bf d2 3c 42  |.b.g.......j..<B|
-00000040  c4 0a d1 08 36 64 8e bd  0a 2f a2 17 03 03 00 40  |....6d.../.....@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 c3 13 7d 0a ed  |.............}..|
+00000020  12 16 0f a5 e9 09 bb 38  9e bb 25 3f d3 36 f2 57  |.......8..%?.6.W|
+00000030  37 2b cf c7 9e d4 ed b6  ee 0e 07 8e a7 ae 71 c9  |7+............q.|
+00000040  1e cb 40 65 8b c5 9c e0  14 c5 f3 17 03 03 00 40  |..@e...........@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  ef 16 5e cb e7 c4 2d a8  76 77 da 18 91 bd cb 78  |..^...-.vw.....x|
-00000070  76 c5 5d 70 e5 ba 57 2a  1f 2b 11 3f 18 18 e6 1b  |v.]p..W*.+.?....|
-00000080  36 78 c9 f1 5e 71 f1 71  f1 01 31 e6 37 fa 76 92  |6x..^q.q..1.7.v.|
+00000060  0d 8e c2 8a a5 5a 8b bc  d8 86 a0 05 cf c6 39 a7  |.....Z........9.|
+00000070  6d 65 f1 a7 bb 74 25 1d  3e 75 fd f8 1f a5 06 b6  |me...t%.>u......|
+00000080  cd 14 5b 4b 0a 7b a2 e6  54 b3 bd 3c f0 eb ca 78  |..[K.{..T..<...x|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 13 3e 42  a5 61 84 ae 49 8b b9 91  |......>B.a..I...|
-000000b0  c2 a3 76 74 1e 4f 53 0a  fc 71 de 0d d2 44 c8 ac  |..vt.OS..q...D..|
-000000c0  2e 09 27 e6 ad                                    |..'..|
+000000a0  00 00 00 00 00 e6 4b 35  cc 69 58 89 49 67 99 f4  |......K5.iX.Ig..|
+000000b0  c2 14 2a bb e7 21 2b fe  fe b5 60 ae b2 2a 96 15  |..*..!+...`..*..|
+000000c0  e0 65 d2 54 0b                                    |.e.T.|
index d2ed2ee64e9bb5b0a33b94c28a603fd7f4a383c3..d80662d169a4464bed3a179e868065bda29114cc 100644 (file)
@@ -1,93 +1,93 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ca 01 00 00  c6 03 03 be 5b 8c 08 2b  |............[..+|
-00000010  26 a0 41 0f e3 4e b6 5c  9f 5d 53 04 67 4a 1d a2  |&.A..N.\.]S.gJ..|
-00000020  26 3b 83 ab b4 7b c6 ec  f8 a6 41 20 a6 de ad e2  |&;...{....A ....|
-00000030  0c fd 02 99 11 51 c6 be  e8 52 df 0b e2 b3 6f fe  |.....Q...R....o.|
-00000040  33 3e 2f 90 ac d2 e8 a2  53 8b d9 05 00 04 13 01  |3>/.....S.......|
+00000000  16 03 01 00 ca 01 00 00  c6 03 03 1d 95 21 d3 93  |.............!..|
+00000010  6b 69 ad 44 69 28 2d 2e  74 c3 77 24 86 82 52 91  |ki.Di(-.t.w$..R.|
+00000020  a8 15 64 82 15 2e 02 f8  41 3d c5 20 87 ff 55 4c  |..d.....A=. ..UL|
+00000030  00 16 80 c2 f7 44 15 18  bc 00 81 d8 7b d8 2c 88  |.....D......{.,.|
+00000040  cb 19 31 89 23 d0 82 be  d8 7f a4 26 00 04 13 01  |..1.#......&....|
 00000050  00 ff 01 00 00 79 00 0b  00 04 03 00 01 02 00 0a  |.....y..........|
 00000060  00 0c 00 0a 00 1d 00 17  00 1e 00 19 00 18 00 16  |................|
 00000070  00 00 00 17 00 00 00 0d  00 1e 00 1c 04 03 05 03  |................|
 00000080  06 03 08 07 08 08 08 09  08 0a 08 0b 08 04 08 05  |................|
 00000090  08 06 04 01 05 01 06 01  00 2b 00 03 02 03 04 00  |.........+......|
-000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 31  |-.....3.&.$... 1|
-000000b0  8e dd f4 7c cf 22 04 c1  c3 04 5c 24 49 db ae ab  |...|."....\$I...|
-000000c0  0a d0 42 e8 70 51 c7 4f  88 e2 4e 2e 0b 80 65     |..B.pQ.O..N...e|
+000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 8d  |-.....3.&.$... .|
+000000b0  18 6e 7e 5a 97 58 25 0d  07 9e af 9c 9b bd 6f 92  |.n~Z.X%.......o.|
+000000c0  e9 08 8f 92 55 28 d2 90  3f fe bc dd db b7 00     |....U(..?......|
 >>> Flow 2 (server to client)
 00000000  16 03 03 00 7a 02 00 00  76 03 03 00 00 00 00 00  |....z...v.......|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000020  00 00 00 00 00 00 00 00  00 00 00 20 a6 de ad e2  |........... ....|
-00000030  0c fd 02 99 11 51 c6 be  e8 52 df 0b e2 b3 6f fe  |.....Q...R....o.|
-00000040  33 3e 2f 90 ac d2 e8 a2  53 8b d9 05 13 01 00 00  |3>/.....S.......|
+00000020  00 00 00 00 00 00 00 00  00 00 00 20 87 ff 55 4c  |........... ..UL|
+00000030  00 16 80 c2 f7 44 15 18  bc 00 81 d8 7b d8 2c 88  |.....D......{.,.|
+00000040  cb 19 31 89 23 d0 82 be  d8 7f a4 26 13 01 00 00  |..1.#......&....|
 00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 2f  |..+.....3.$... /|
 00000060  e5 7d a3 47 cd 62 43 15  28 da ac 5f bb 29 07 30  |.}.G.bC.(.._.).0|
 00000070  ff f6 84 af c4 cf c2 ed  90 99 5f 58 cb 3b 74 14  |.........._X.;t.|
-00000080  03 03 00 01 01 17 03 03  00 17 cc d0 60 a1 dc d6  |............`...|
-00000090  46 57 69 3d df 0e 0f 7f  a8 34 2d 87 71 84 16 54  |FWi=.....4-.q..T|
-000000a0  9d 17 03 03 02 22 cb 9c  f9 3e a0 fd bf 07 03 7c  |....."...>.....||
-000000b0  53 0c 15 22 0b 78 e5 02  36 e6 e7 6c 5b f9 aa 8d  |S..".x..6..l[...|
-000000c0  54 8e b1 15 d4 23 05 12  5e 6e 0f 0f 65 77 bf b5  |T....#..^n..ew..|
-000000d0  32 28 0e 32 ca 9f 61 c3  37 23 87 e8 ec 19 1d ba  |2(.2..a.7#......|
-000000e0  ef f5 18 eb ba 49 2d 86  a6 d1 f7 c1 9e 67 10 9f  |.....I-......g..|
-000000f0  a1 d2 62 bd 4c 6c 5e a4  41 f6 1e fa fd e7 55 bc  |..b.Ll^.A.....U.|
-00000100  16 ad 91 91 de 03 86 d7  e1 88 87 ab 0e f4 f5 bb  |................|
-00000110  16 da 37 bb a4 ce 4e 6c  5f 88 41 f9 a2 90 9a 2d  |..7...Nl_.A....-|
-00000120  5c 14 d5 01 28 06 a9 20  a4 ae 92 17 c5 95 b1 dc  |\...(.. ........|
-00000130  02 a8 3f 3b a7 97 91 5a  4f 56 bb db b6 30 0d 80  |..?;...ZOV...0..|
-00000140  35 ac 91 6f 4f ba 1e 10  c6 fc d2 ca 96 e4 9d 1f  |5..oO...........|
-00000150  2f 29 00 3a 11 b7 77 dd  d5 ed 76 9f 67 a1 b1 0c  |/).:..w...v.g...|
-00000160  5d 34 34 eb 42 49 23 15  49 12 24 24 73 be a9 65  |]44.BI#.I.$$s..e|
-00000170  99 b6 b4 3f 18 0c d1 32  26 eb 86 93 5c 0e e8 06  |...?...2&...\...|
-00000180  fb d7 9f 0e d9 26 14 47  b8 e5 67 8c c8 cb 0c 55  |.....&.G..g....U|
-00000190  61 70 a9 ce 0d 4e bf ca  40 9c e7 0d 2b 5d 54 b7  |ap...N..@...+]T.|
-000001a0  5a 64 50 e6 a1 c9 fc 47  7d e7 0a 13 36 8d 70 eb  |ZdP....G}...6.p.|
-000001b0  68 65 e4 9b 9d 12 d1 d9  0d 32 72 59 0f 46 b2 e2  |he.......2rY.F..|
-000001c0  21 ab 13 d4 ab f3 6e b6  44 16 b8 85 bb dc f4 f7  |!.....n.D.......|
-000001d0  d6 ce 5c 9f c0 4c 28 8f  36 39 ec 29 c7 33 bd ea  |..\..L(.69.).3..|
-000001e0  2d 10 16 84 50 c5 18 5b  2c a3 99 bb 3b 0b 70 66  |-...P..[,...;.pf|
-000001f0  72 9a 83 01 06 2a bf 4a  60 c5 5d 41 a1 f0 92 bb  |r....*.J`.]A....|
-00000200  3b 2a 1a 41 3a 57 c3 22  13 2c b4 7b 3e 47 52 ea  |;*.A:W.".,.{>GR.|
-00000210  79 8a bf ef 2e 2c f7 89  c7 36 5a df 38 c2 04 b6  |y....,...6Z.8...|
-00000220  6f 96 cd 7c 01 b3 e3 cd  4a 83 56 40 06 58 8a 7c  |o..|....J.V@.X.||
-00000230  8c 75 df b6 b8 76 63 71  89 72 0a 64 de 23 7d 50  |.u...vcq.r.d.#}P|
-00000240  77 a8 f6 a0 81 9d e9 ed  81 5e 20 c8 9f 65 3c 95  |w........^ ..e<.|
-00000250  cf ed 99 80 71 06 5e 00  46 0d 0c 22 b3 88 f0 c5  |....q.^.F.."....|
-00000260  33 3e 13 6b f2 07 9c db  20 31 9c 8d ea d7 73 e8  |3>.k.... 1....s.|
-00000270  00 e1 2b f4 c8 d7 34 37  4a 98 b9 4d 28 db 15 8a  |..+...47J..M(...|
-00000280  af 53 14 3b 02 54 a3 0b  5f 10 ff 5d 20 1c 19 ae  |.S.;.T.._..] ...|
-00000290  6b 8a 99 a5 8f e0 ac dd  c1 ba 1f 85 56 a3 94 bc  |k...........V...|
-000002a0  79 03 5f d5 dd e1 8e 62  b7 82 fa 92 c3 d5 8a fc  |y._....b........|
-000002b0  6b 17 24 d9 af db 3d 9c  0f 51 82 3d a2 ec 5f 9c  |k.$...=..Q.=.._.|
-000002c0  dc 69 a5 ce db d8 8b 87  17 03 03 00 a3 69 cd 7b  |.i...........i.{|
-000002d0  9f ac ad 72 11 b2 5d ee  19 63 d0 35 12 6d 5e 3f  |...r..]..c.5.m^?|
-000002e0  81 a8 18 4a d4 09 f3 80  38 4a 31 08 3e a0 4c 78  |...J....8J1.>.Lx|
-000002f0  48 08 e9 90 ba e7 2a b4  73 2e 2b 2b 15 60 ce 09  |H.....*.s.++.`..|
-00000300  7d df 49 31 e1 9d ff 92  1d b4 af 2e 8c f8 a6 2e  |}.I1............|
-00000310  93 d7 b9 10 69 10 7f 04  0d 8d e2 37 09 a7 d0 2a  |....i......7...*|
-00000320  ac ea 51 49 50 1d 1c 54  7f b9 15 ad 8c 77 ef 1d  |..QIP..T.....w..|
-00000330  a6 59 a3 bf b2 53 f7 6c  21 92 e0 36 c5 0d 61 94  |.Y...S.l!..6..a.|
-00000340  be 61 5e 77 25 35 df e4  5f 67 c1 c6 af 51 e4 ce  |.a^w%5.._g...Q..|
-00000350  c4 28 c5 4e bc f6 c6 ba  32 dc 8e c7 45 f3 4d a1  |.(.N....2...E.M.|
-00000360  70 53 98 46 8f 39 c2 cc  b7 fc f7 24 11 97 72 b3  |pS.F.9.....$..r.|
-00000370  17 03 03 00 35 76 be b6  7a 3f e3 08 7a a2 65 25  |....5v..z?..z.e%|
-00000380  fd 0b c3 87 be ba eb ca  cb 3d c1 25 10 e0 7b 00  |.........=.%..{.|
-00000390  37 7a 52 9e d6 b2 e7 ba  8e 51 de 15 c4 e8 16 eb  |7zR......Q......|
-000003a0  c6 21 92 42 b1 62 f4 ce  27 ba 17 03 03 00 8b 54  |.!.B.b..'......T|
-000003b0  03 de d7 a7 85 2f 4b 23  2d d5 3a b4 3d 3d f6 00  |...../K#-.:.==..|
-000003c0  ac ab bd 6f dd bf 9f 24  fb 1b d4 01 39 3e c0 87  |...o...$....9>..|
-000003d0  bb 32 ca f6 61 b2 ef 5d  9c 2c 1b a5 10 66 7b fd  |.2..a..].,...f{.|
-000003e0  4b d0 03 dc 53 a9 0d 5a  d5 c4 4c 25 9c 55 e6 f8  |K...S..Z..L%.U..|
-000003f0  d1 d8 49 dc 36 a1 92 ae  f1 3e 2f 11 66 87 93 69  |..I.6....>/.f..i|
-00000400  24 2e 5d 6c f6 79 15 68  a8 99 2e 1a 9c e2 85 4e  |$.]l.y.h.......N|
-00000410  5f d6 a8 3c 70 e1 67 cb  df b2 1b ab 2b ed dc b6  |_..<p.g.....+...|
-00000420  64 f4 bc 22 35 20 7f ff  64 b3 be d9 eb a1 ab 5d  |d.."5 ..d......]|
-00000430  d9 3b ae 30 46 76 70 48  04 43                    |.;.0FvpH.C|
+00000080  03 03 00 01 01 17 03 03  00 17 55 0c 9b 36 df 28  |..........U..6.(|
+00000090  4c fb 72 f6 89 a1 7f e2  3e 9f ab 62 c7 8d b8 4f  |L.r.....>..b...O|
+000000a0  e8 17 03 03 02 22 3f 87  53 63 dc 59 f7 32 60 4b  |....."?.Sc.Y.2`K|
+000000b0  bd 9f e1 fc 4c 9a 98 18  94 e1 c1 07 ab 11 33 dc  |....L.........3.|
+000000c0  f1 48 67 e6 66 83 3c 88  53 c7 dc af e2 87 bc 0b  |.Hg.f.<.S.......|
+000000d0  d7 60 99 83 29 a1 1c 30  09 ba 4a e1 a9 c2 0e 34  |.`..)..0..J....4|
+000000e0  cb a6 f2 8b 1b a0 b0 e6  21 27 3d b8 b4 90 0c 61  |........!'=....a|
+000000f0  af 38 db fe fe 9c 34 09  1e 1a c8 f2 e9 05 68 ee  |.8....4.......h.|
+00000100  9c ec 74 b8 10 25 29 3d  52 71 87 c6 88 22 5a e9  |..t..%)=Rq..."Z.|
+00000110  33 d0 d3 75 a8 94 b2 6d  48 4f 63 d1 32 f2 a3 70  |3..u...mHOc.2..p|
+00000120  f1 a5 0b 4c 5d 7c 91 9b  04 d4 c3 9e 37 dd 67 a1  |...L]|......7.g.|
+00000130  aa 23 6f 2b d0 42 b9 30  5c ed ae 12 36 f1 7c b3  |.#o+.B.0\...6.|.|
+00000140  92 de 02 3a 99 c3 98 91  a3 09 43 ef 24 8d 67 e7  |...:......C.$.g.|
+00000150  0d 68 22 e1 cc 99 8e 8e  64 09 be 50 f7 4a 37 0a  |.h".....d..P.J7.|
+00000160  02 af 88 db 8b a0 68 0d  7e 97 d9 9c 48 c3 bd aa  |......h.~...H...|
+00000170  db 01 69 2b 2b e6 f5 4b  66 c0 7a 8c fe 4d 8f 7b  |..i++..Kf.z..M.{|
+00000180  94 be 58 b5 44 67 df 26  3f 79 ee 55 bf bf aa 52  |..X.Dg.&?y.U...R|
+00000190  95 ec 6b 7f 2b 68 f0 5a  81 4e 13 25 91 bd 9a df  |..k.+h.Z.N.%....|
+000001a0  dd 2c ae 6d c3 47 27 c2  3f 51 98 a3 b7 06 ec 2f  |.,.m.G'.?Q...../|
+000001b0  d6 c0 7f 1f e5 5e 3c 50  d3 6e 82 33 be 07 48 0b  |.....^<P.n.3..H.|
+000001c0  81 c4 ae 6d 64 f6 85 36  73 7d f7 35 a2 71 39 9d  |...md..6s}.5.q9.|
+000001d0  09 06 dc 78 14 36 0a c6  4e c5 ef 28 1b f9 72 e3  |...x.6..N..(..r.|
+000001e0  4e dc 9d 4f 29 63 67 68  38 27 66 ff d5 9d d6 e6  |N..O)cgh8'f.....|
+000001f0  60 be ac 8e 7f 59 0b 29  e8 5b f0 45 c1 86 22 e4  |`....Y.).[.E..".|
+00000200  14 4f f2 8d 7b 42 5f c8  f5 74 cc 7e 49 fb 43 ad  |.O..{B_..t.~I.C.|
+00000210  67 ec 70 b8 47 bb 50 74  fb 65 49 22 03 d4 81 6f  |g.p.G.Pt.eI"...o|
+00000220  fc 2a 22 7b 2a 26 6d 51  8f 7b f2 53 d3 25 d2 19  |.*"{*&mQ.{.S.%..|
+00000230  f1 d6 19 a9 6f bd a1 4c  01 80 f0 ba db 6d 0a e2  |....o..L.....m..|
+00000240  1b 54 78 c1 b3 d3 f4 de  6f 78 97 71 ff 39 dd 88  |.Tx.....ox.q.9..|
+00000250  c2 56 3e aa a6 7d d0 8f  da ee a4 48 55 42 c3 14  |.V>..}.....HUB..|
+00000260  d0 b2 8e 4d c6 26 bb 77  9e 3f e0 0a 90 a4 3b eb  |...M.&.w.?....;.|
+00000270  37 94 c4 e8 39 12 82 24  b3 8b 6d 0d ed 9c 31 f0  |7...9..$..m...1.|
+00000280  d0 5a cb b0 79 9b d2 ed  ab 08 8b 9d ad 25 7a ce  |.Z..y........%z.|
+00000290  d7 6d c8 11 0a 60 f4 81  e9 e3 e3 42 7b 3d 95 67  |.m...`.....B{=.g|
+000002a0  c2 4e 3e 80 11 2e 09 53  94 03 c0 88 cb 23 7e d2  |.N>....S.....#~.|
+000002b0  ad e2 dc e7 e2 0b ba 74  9c 04 ad 75 e6 7f 5a fb  |.......t...u..Z.|
+000002c0  53 5a 98 14 18 4f 1d 2b  17 03 03 00 a4 7a ce c7  |SZ...O.+.....z..|
+000002d0  9c de bc 27 04 f7 8b 4b  a1 73 7d 0d fa b5 a1 e2  |...'...K.s}.....|
+000002e0  fe 8b 33 8d 48 64 65 13  68 e2 5d e2 d7 3e 67 f2  |..3.Hde.h.]..>g.|
+000002f0  db bd ff f9 e5 3e 4c b1  56 e3 22 95 88 23 48 fe  |.....>L.V."..#H.|
+00000300  0f 80 4c 5c 1c 74 0e 26  d4 7c 17 83 65 d6 a3 51  |..L\.t.&.|..e..Q|
+00000310  5a 01 a5 12 9c db 0b c9  0b 8b 53 c7 03 75 b9 04  |Z.........S..u..|
+00000320  a0 62 df 11 75 ae ff 33  7b 98 6b 7b 35 3e 41 4c  |.b..u..3{.k{5>AL|
+00000330  9b 16 12 b4 39 ce 9a d5  e9 83 78 b3 4b 3e d6 82  |....9.....x.K>..|
+00000340  75 66 bf 73 e4 26 e6 22  8e 2f fe 4d 49 e4 b5 03  |uf.s.&."./.MI...|
+00000350  04 a6 65 59 c2 aa e2 e6  ec f0 e2 99 b5 c4 55 75  |..eY..........Uu|
+00000360  e1 90 a4 73 cb 21 78 df  4e 96 e2 99 75 15 77 59  |...s.!x.N...u.wY|
+00000370  db 17 03 03 00 35 bc 1c  15 d7 b0 62 21 d4 dd 09  |.....5.....b!...|
+00000380  1d aa 05 3c e3 ea 0a 9d  89 1f aa 2f f7 75 93 86  |...<......./.u..|
+00000390  35 ee 5f 06 20 99 17 ca  4c 05 65 07 f7 56 9f 62  |5._. ...L.e..V.b|
+000003a0  2a ea e2 05 f0 be fe bf  d6 09 46 17 03 03 00 8b  |*.........F.....|
+000003b0  37 1a 6c e5 ea 27 e7 b2  d7 87 9a 1a a1 41 b5 64  |7.l..'.......A.d|
+000003c0  61 8b bb 1c 64 a2 37 de  39 b3 5b f4 5b 9f bf d8  |a...d.7.9.[.[...|
+000003d0  e7 3d be ad 96 6c 69 19  ce 8e a8 12 14 5d 1e 79  |.=...li......].y|
+000003e0  c5 12 53 c3 13 81 5a 22  44 e5 6e c4 97 cc 18 19  |..S...Z"D.n.....|
+000003f0  c4 04 08 cf 16 dd df 3d  4f 13 40 5f 33 38 f5 0f  |.......=O.@_38..|
+00000400  4f bb 41 e2 85 85 43 de  d0 b5 7a 61 d8 3a 53 41  |O.A...C...za.:SA|
+00000410  d2 ad 7b e4 bf 02 d2 14  7d f7 0c 05 b8 bb 21 90  |..{.....}.....!.|
+00000420  a5 61 76 7e 07 5d bf e2  a1 f8 1a a6 77 42 2a 7c  |.av~.]......wB*||
+00000430  7a 41 a7 5e 04 c2 49 02  45 a8 f5                 |zA.^..I.E..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 46 8b fa 42 0d  |..........5F..B.|
-00000010  fa 3e 9e 80 76 12 ce 73  ae 85 67 ee af 1e 25 6e  |.>..v..s..g...%n|
-00000020  0b 46 4c bd 5a 46 8e 5c  27 7a 0a 8d d3 9c 3c 29  |.FL.ZF.\'z....<)|
-00000030  4c c8 08 78 ac 9f f4 7a  38 8d 49 6a 01 b6 f5 83  |L..x...z8.Ij....|
+00000000  14 03 03 00 01 01 17 03  03 00 35 3d f2 27 fe 81  |..........5=.'..|
+00000010  4c 6e 61 1f 34 f8 3d 25  1f 33 d6 22 aa 7f ab 08  |Lna.4.=%.3."....|
+00000020  2c 48 44 39 74 2c e9 be  78 7f c7 db 27 b0 b0 6d  |,HD9t,..x...'..m|
+00000030  b2 8b 87 6c e5 5c 38 79  9f ed 3d 4f 92 81 dc ea  |...l.\8y..=O....|
 >>> Flow 4 (server to client)
-00000000  17 03 03 00 1e c2 1a dc  0a cb 9a 11 f7 a1 c2 1f  |................|
-00000010  54 7d 32 6f 0e 13 b6 6b  9f e1 c6 14 63 fc 18 b9  |T}2o...k....c...|
-00000020  81 53 44 17 03 03 00 13  c9 72 ae 5e 2b c1 6f 64  |.SD......r.^+.od|
-00000030  e0 70 47 15 b1 ec c3 25  00 7f 4e                 |.pG....%..N|
+00000000  17 03 03 00 1e f7 99 f9  d8 a2 00 d9 e3 48 d9 b2  |.............H..|
+00000010  35 37 93 6f b0 1f d5 81  b1 16 b1 e4 d8 b4 40 ce  |57.o..........@.|
+00000020  97 9f 16 17 03 03 00 13  a4 cb 62 61 70 e9 67 c3  |..........bap.g.|
+00000030  21 02 19 bc 01 01 5d 9b  15 d4 84                 |!.....]....|