lsqpack 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +19 -0
- data/Gemfile.lock +82 -0
- data/LICENSE +21 -0
- data/README.md +36 -0
- data/Rakefile +19 -0
- data/Steepfile +6 -0
- data/ext/lsqpack/extconf.rb +18 -0
- data/ext/lsqpack/lsqpack.c +426 -0
- data/ext/lsqpack/lsqpack.h +6 -0
- data/lib/lsqpack/version.rb +5 -0
- data/lib/lsqpack.rb +30 -0
- data/ls-qpack/.appveyor.yml +14 -0
- data/ls-qpack/.cirrus.yml +6 -0
- data/ls-qpack/.travis.yml +32 -0
- data/ls-qpack/CMakeLists.txt +66 -0
- data/ls-qpack/LICENSE +21 -0
- data/ls-qpack/README.md +65 -0
- data/ls-qpack/bin/CMakeLists.txt +21 -0
- data/ls-qpack/bin/encode-int.c +87 -0
- data/ls-qpack/bin/fuzz-decode.c +247 -0
- data/ls-qpack/bin/interop-decode.c +433 -0
- data/ls-qpack/bin/interop-encode.c +554 -0
- data/ls-qpack/deps/xxhash/xxhash.c +941 -0
- data/ls-qpack/deps/xxhash/xxhash.h +160 -0
- data/ls-qpack/fuzz/decode/a/README +3 -0
- data/ls-qpack/fuzz/decode/a/preamble +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000390,op_havoc,rep_4 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000579,op_flip1,pos_14 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,src_000000,op_flip2,pos_12 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000001,sig_11,src_000579,op_havoc,rep_4 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000002,sig_11,src_000481,op_int16,pos_15,val_-1 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000002,src_000000,op_havoc,rep_8 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000006,src_000285,op_flip2,pos_14 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000008,src_000285,op_flip2,pos_20 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000010,src_000306,op_flip2,pos_75 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000011,src_000344,op_havoc,rep_2 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000014,src_000366,op_flip2,pos_28 +0 -0
- data/ls-qpack/fuzz/decode/b/README +1 -0
- data/ls-qpack/fuzz/decode/b/preamble +0 -0
- data/ls-qpack/fuzz/decode/b/test-cases/seed +0 -0
- data/ls-qpack/fuzz/decode/c/setup.sh +3 -0
- data/ls-qpack/fuzz/decode/c/test-cases/fb-req.qif.proxygen.out.256.100.0-chopped +0 -0
- data/ls-qpack/fuzz/decode/d/preamble +0 -0
- data/ls-qpack/fuzz/decode/d/setup.sh +3 -0
- data/ls-qpack/fuzz/decode/d/test-cases/fb-resp.minhq.256.128.0.ack +0 -0
- data/ls-qpack/fuzz/input/256.100.1/fb-req.out.256.100.1 +0 -0
- data/ls-qpack/fuzz/input/256.100.1/fb-resp.out.256.100.1 +0 -0
- data/ls-qpack/fuzz/input/256.100.1/netbsd.out.256.100.1 +0 -0
- data/ls-qpack/huff-tables.h +136247 -0
- data/ls-qpack/lsqpack.c +5547 -0
- data/ls-qpack/lsqpack.h +768 -0
- data/ls-qpack/test/CMakeLists.txt +76 -0
- data/ls-qpack/test/lsqpack-test.h +43 -0
- data/ls-qpack/test/qifs/fb-req.qif +4917 -0
- data/ls-qpack/test/qifs/fb-resp.qif +5982 -0
- data/ls-qpack/test/qifs/long-codes.qif +5984 -0
- data/ls-qpack/test/qifs/netbsd.qif +235 -0
- data/ls-qpack/test/run-qif.pl +97 -0
- data/ls-qpack/test/run-scenario.sh +68 -0
- data/ls-qpack/test/scenarios/0.95-reset.sce +10 -0
- data/ls-qpack/test/scenarios/cancel-stream.sce +22 -0
- data/ls-qpack/test/scenarios/drain-2.sce +37 -0
- data/ls-qpack/test/scenarios/drain.sce +37 -0
- data/ls-qpack/test/scenarios/end-dst-2.sce +14 -0
- data/ls-qpack/test/scenarios/end-dst.sce +14 -0
- data/ls-qpack/test/scenarios/incl-name.sce +13 -0
- data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-1.sce +110 -0
- data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-2.sce +161 -0
- data/ls-qpack/test/scenarios/post-base-1.sce +10 -0
- data/ls-qpack/test/scenarios/post-base-2.sce +13 -0
- data/ls-qpack/test/scenarios/post-base-nr.sce +10 -0
- data/ls-qpack/test/scenarios/set-max-cap.sce +15 -0
- data/ls-qpack/test/test_enc_str.c +139 -0
- data/ls-qpack/test/test_get_stx_id.c +144 -0
- data/ls-qpack/test/test_huff_dec.c +399 -0
- data/ls-qpack/test/test_int.c +220 -0
- data/ls-qpack/test/test_qpack.c +856 -0
- data/ls-qpack/test/test_read_enc_stream.c +256 -0
- data/ls-qpack/tools/har2qif.pl +139 -0
- data/ls-qpack/tools/randomize-cookies.pl +41 -0
- data/ls-qpack/tools/sort-qif.pl +31 -0
- data/ls-qpack/wincompat/getopt.c +758 -0
- data/ls-qpack/wincompat/getopt.h +131 -0
- data/ls-qpack/wincompat/getopt1.c +188 -0
- data/ls-qpack/wincompat/sys/queue.h +859 -0
- data/lsqpack.gemspec +39 -0
- data/sig/lsqpack.rbs +29 -0
- metadata +135 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
/*
|
2
|
+
xxHash - Extremely Fast Hash algorithm
|
3
|
+
Header File
|
4
|
+
Copyright (C) 2012-2014, Yann Collet.
|
5
|
+
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms, with or without
|
8
|
+
modification, are permitted provided that the following conditions are
|
9
|
+
met:
|
10
|
+
|
11
|
+
* Redistributions of source code must retain the above copyright
|
12
|
+
notice, this list of conditions and the following disclaimer.
|
13
|
+
* Redistributions in binary form must reproduce the above
|
14
|
+
copyright notice, this list of conditions and the following disclaimer
|
15
|
+
in the documentation and/or other materials provided with the
|
16
|
+
distribution.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
You can contact the author at :
|
31
|
+
- xxHash source repository : http://code.google.com/p/xxhash/
|
32
|
+
*/
|
33
|
+
|
34
|
+
/* Notice extracted from xxHash homepage :
|
35
|
+
|
36
|
+
xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
|
37
|
+
It also successfully passes all tests from the SMHasher suite.
|
38
|
+
|
39
|
+
Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)
|
40
|
+
|
41
|
+
Name Speed Q.Score Author
|
42
|
+
xxHash 5.4 GB/s 10
|
43
|
+
CrapWow 3.2 GB/s 2 Andrew
|
44
|
+
MumurHash 3a 2.7 GB/s 10 Austin Appleby
|
45
|
+
SpookyHash 2.0 GB/s 10 Bob Jenkins
|
46
|
+
SBox 1.4 GB/s 9 Bret Mulvey
|
47
|
+
Lookup3 1.2 GB/s 9 Bob Jenkins
|
48
|
+
SuperFastHash 1.2 GB/s 1 Paul Hsieh
|
49
|
+
CityHash64 1.05 GB/s 10 Pike & Alakuijala
|
50
|
+
FNV 0.55 GB/s 5 Fowler, Noll, Vo
|
51
|
+
CRC32 0.43 GB/s 9
|
52
|
+
MD5-32 0.33 GB/s 10 Ronald L. Rivest
|
53
|
+
SHA1-32 0.28 GB/s 10
|
54
|
+
|
55
|
+
Q.Score is a measure of quality of the hash function.
|
56
|
+
It depends on successfully passing SMHasher test set.
|
57
|
+
10 is a perfect score.
|
58
|
+
*/
|
59
|
+
|
60
|
+
#pragma once
|
61
|
+
|
62
|
+
#if defined (__cplusplus)
|
63
|
+
extern "C" {
|
64
|
+
#endif
|
65
|
+
|
66
|
+
|
67
|
+
/*****************************
|
68
|
+
Includes
|
69
|
+
*****************************/
|
70
|
+
#include <stddef.h> /* size_t */
|
71
|
+
|
72
|
+
|
73
|
+
/*****************************
|
74
|
+
Type
|
75
|
+
*****************************/
|
76
|
+
typedef enum { XXH_OK = 0, XXH_ERROR } XXH_errorcode;
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
/*****************************
|
81
|
+
Simple Hash Functions
|
82
|
+
*****************************/
|
83
|
+
|
84
|
+
unsigned int XXH32(const void *input, size_t length, unsigned seed);
|
85
|
+
unsigned long long XXH64(const void *input, size_t length,
|
86
|
+
unsigned long long seed);
|
87
|
+
|
88
|
+
/*
|
89
|
+
XXH32() :
|
90
|
+
Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input".
|
91
|
+
The memory between input & input+length must be valid (allocated and read-accessible).
|
92
|
+
"seed" can be used to alter the result predictably.
|
93
|
+
This function successfully passes all SMHasher tests.
|
94
|
+
Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
|
95
|
+
XXH64() :
|
96
|
+
Calculate the 64-bits hash of sequence of length "len" stored at memory address "input".
|
97
|
+
*/
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
/*****************************
|
102
|
+
Advanced Hash Functions
|
103
|
+
*****************************/
|
104
|
+
typedef struct { long long ll[ 6]; } XXH32_state_t;
|
105
|
+
typedef struct { long long ll[11]; } XXH64_state_t;
|
106
|
+
|
107
|
+
/*
|
108
|
+
These structures allow static allocation of XXH states.
|
109
|
+
States must then be initialized using XXHnn_reset() before first use.
|
110
|
+
|
111
|
+
If you prefer dynamic allocation, please refer to functions below.
|
112
|
+
*/
|
113
|
+
|
114
|
+
XXH32_state_t *XXH32_createState(void);
|
115
|
+
XXH_errorcode XXH32_freeState(XXH32_state_t *statePtr);
|
116
|
+
|
117
|
+
XXH64_state_t *XXH64_createState(void);
|
118
|
+
XXH_errorcode XXH64_freeState(XXH64_state_t *statePtr);
|
119
|
+
|
120
|
+
/*
|
121
|
+
These functions create and release memory for XXH state.
|
122
|
+
States must then be initialized using XXHnn_reset() before first use.
|
123
|
+
*/
|
124
|
+
|
125
|
+
|
126
|
+
XXH_errorcode XXH32_reset(XXH32_state_t *statePtr, unsigned seed);
|
127
|
+
XXH_errorcode XXH32_update(XXH32_state_t *statePtr, const void *input,
|
128
|
+
size_t length);
|
129
|
+
unsigned int XXH32_digest(const XXH32_state_t *statePtr);
|
130
|
+
|
131
|
+
XXH_errorcode XXH64_reset(XXH64_state_t *statePtr,
|
132
|
+
unsigned long long seed);
|
133
|
+
XXH_errorcode XXH64_update(XXH64_state_t *statePtr, const void *input,
|
134
|
+
size_t length);
|
135
|
+
unsigned long long XXH64_digest(const XXH64_state_t *statePtr);
|
136
|
+
|
137
|
+
/*
|
138
|
+
These functions calculate the xxHash of an input provided in multiple smaller packets,
|
139
|
+
as opposed to an input provided as a single block.
|
140
|
+
|
141
|
+
XXH state space must first be allocated, using either static or dynamic method provided above.
|
142
|
+
|
143
|
+
Start a new hash by initializing state with a seed, using XXHnn_reset().
|
144
|
+
|
145
|
+
Then, feed the hash state by calling XXHnn_update() as many times as necessary.
|
146
|
+
Obviously, input must be valid, meaning allocated and read accessible.
|
147
|
+
The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
|
148
|
+
|
149
|
+
Finally, you can produce a hash anytime, by using XXHnn_digest().
|
150
|
+
This function returns the final nn-bits hash.
|
151
|
+
You can nonetheless continue feeding the hash state with more input,
|
152
|
+
and therefore get some new hashes, by calling again XXHnn_digest().
|
153
|
+
|
154
|
+
When you are done, don't forget to free XXH state space, using typically XXHnn_freeState().
|
155
|
+
*/
|
156
|
+
|
157
|
+
|
158
|
+
#if defined (__cplusplus)
|
159
|
+
}
|
160
|
+
#endif
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
Table size: 4096
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|