Fix wrong EC constant of Version-27-Q. Fix issue #7.
This commit is contained in:
parent
d5d0c0c7a0
commit
673ee09ef9
190
src/ec.rs
190
src/ec.rs
|
@ -325,118 +325,126 @@ static GENERATOR_POLYNOMIALS: [&'static [u8]; 70] = [
|
|||
/// `EC_BYTES_PER_BLOCK` provides the number of codewords (bytes) used for error
|
||||
/// correction per block in each version.
|
||||
///
|
||||
/// This is a copy of ISO/IEC 18004:2006, §6.5.1, Table 9.
|
||||
/// This is a copy of ISO/IEC 18004:2006, §6.5.1, Table 9 (The 4th column divide
|
||||
/// by the sum of the 6th column).
|
||||
static EC_BYTES_PER_BLOCK: [[usize; 4]; 44] = [
|
||||
// Normal versions.
|
||||
[7, 10, 13, 17],
|
||||
[10, 16, 22, 28],
|
||||
[15, 26, 18, 22],
|
||||
[20, 18, 26, 16],
|
||||
[26, 24, 18, 22],
|
||||
[18, 16, 24, 28],
|
||||
[20, 18, 18, 26],
|
||||
[24, 22, 22, 26],
|
||||
[30, 22, 20, 24],
|
||||
[18, 26, 24, 28],
|
||||
[20, 30, 28, 24],
|
||||
[24, 22, 26, 28],
|
||||
[26, 22, 24, 22],
|
||||
[30, 24, 20, 24],
|
||||
[22, 24, 30, 24],
|
||||
[24, 28, 24, 30],
|
||||
[28, 28, 28, 28],
|
||||
[30, 26, 28, 28],
|
||||
[28, 26, 26, 26],
|
||||
[28, 26, 30, 28],
|
||||
[28, 26, 28, 30],
|
||||
[28, 28, 30, 24],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[26, 28, 30, 30],
|
||||
[28, 28, 28, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[30, 28, 30, 30],
|
||||
[7, 10, 13, 17], // 1
|
||||
[10, 16, 22, 28], // 2
|
||||
[15, 26, 18, 22], // 3
|
||||
[20, 18, 26, 16], // 4
|
||||
[26, 24, 18, 22], // 5
|
||||
[18, 16, 24, 28], // 6
|
||||
[20, 18, 18, 26], // 7
|
||||
[24, 22, 22, 26], // 8
|
||||
[30, 22, 20, 24], // 9
|
||||
[18, 26, 24, 28], // 10
|
||||
|
||||
[20, 30, 28, 24], // 11
|
||||
[24, 22, 26, 28], // 12
|
||||
[26, 22, 24, 22], // 13
|
||||
[30, 24, 20, 24], // 14
|
||||
[22, 24, 30, 24], // 15
|
||||
[24, 28, 24, 30], // 16
|
||||
[28, 28, 28, 28], // 17
|
||||
[30, 26, 28, 28], // 18
|
||||
[28, 26, 26, 26], // 19
|
||||
[28, 26, 30, 28], // 20
|
||||
|
||||
[28, 26, 28, 30], // 21
|
||||
[28, 28, 30, 24], // 22
|
||||
[30, 28, 30, 30], // 23
|
||||
[30, 28, 30, 30], // 24
|
||||
[26, 28, 30, 30], // 25
|
||||
[28, 28, 28, 30], // 26
|
||||
[30, 28, 30, 30], // 27
|
||||
[30, 28, 30, 30], // 28
|
||||
[30, 28, 30, 30], // 29
|
||||
[30, 28, 30, 30], // 30
|
||||
|
||||
[30, 28, 30, 30], // 31
|
||||
[30, 28, 30, 30], // 32
|
||||
[30, 28, 30, 30], // 33
|
||||
[30, 28, 30, 30], // 34
|
||||
[30, 28, 30, 30], // 35
|
||||
[30, 28, 30, 30], // 36
|
||||
[30, 28, 30, 30], // 37
|
||||
[30, 28, 30, 30], // 38
|
||||
[30, 28, 30, 30], // 39
|
||||
[30, 28, 30, 30], // 40
|
||||
|
||||
// Micro versions.
|
||||
[2, 0, 0, 0],
|
||||
[5, 6, 0, 0],
|
||||
[6, 8, 0, 0],
|
||||
[8, 10, 14, 0],
|
||||
[2, 0, 0, 0], // M1
|
||||
[5, 6, 0, 0], // M2
|
||||
[6, 8, 0, 0], // M3
|
||||
[8, 10, 14, 0], // M4
|
||||
];
|
||||
|
||||
/// `DATA_BYTES_PER_BLOCK` provides the number of codewords (bytes) used for
|
||||
/// real data per block in each version.
|
||||
///
|
||||
/// This is a copy of ISO/IEC 18004:2006, §6.5.1, Table 9.
|
||||
/// This is a copy of ISO/IEC 18004:2006, §6.5.1, Table 9 (The value "k" of the
|
||||
/// 7th column, followed by the 6th column).
|
||||
///
|
||||
/// Every entry is a 4-tuple. Take `DATA_BYTES_PER_BLOCK[39][3] == (15, 20, 16, 61)`
|
||||
/// as an example, this means in version 40 with correction level H, there are
|
||||
/// 20 blocks with 15 bytes in size, and 61 blocks with 16 bytes in size.
|
||||
static DATA_BYTES_PER_BLOCK: [[(usize, usize, usize, usize); 4]; 44] = [
|
||||
// Normal versions.
|
||||
[(19, 1, 0, 0), (16, 1, 0, 0), (13, 1, 0, 0), (9, 1, 0, 0)],
|
||||
[(34, 1, 0, 0), (28, 1, 0, 0), (22, 1, 0, 0), (16, 1, 0, 0)],
|
||||
[(55, 1, 0, 0), (44, 1, 0, 0), (17, 2, 0, 0), (13, 2, 0, 0)],
|
||||
[(80, 1, 0, 0), (32, 2, 0, 0), (24, 2, 0, 0), (9, 4, 0, 0)],
|
||||
[(108, 1, 0, 0), (43, 2, 0, 0), (15, 2, 16, 2), (11, 2, 12, 2)],
|
||||
[(68, 2, 0, 0), (27, 4, 0, 0), (19, 4, 0, 0), (15, 4, 0, 0)],
|
||||
[(78, 2, 0, 0), (31, 4, 0, 0), (14, 2, 15, 4), (13, 4, 14, 1)],
|
||||
[(97, 2, 0, 0), (38, 2, 39, 2), (18, 4, 19, 2), (14, 4, 15, 2)],
|
||||
[(116, 2, 0, 0), (36, 3, 37, 2), (16, 4, 17, 4), (12, 4, 13, 4)],
|
||||
[(68, 2, 69, 2), (43, 4, 44, 1), (19, 6, 20, 2), (15, 6, 16, 2)],
|
||||
[(81, 4, 0, 0), (50, 1, 51, 4), (22, 4, 23, 4), (12, 3, 13, 8)],
|
||||
[(92, 2, 93, 2), (36, 6, 37, 2), (20, 4, 21, 6), (14, 7, 15, 4)],
|
||||
[(107, 4, 0, 0), (37, 8, 38, 1), (20, 8, 21, 4), (11, 12, 12, 4)],
|
||||
[(115, 3, 116, 1), (40, 4, 41, 5), (16, 11, 17, 5), (12, 11, 13, 5)],
|
||||
[(87, 5, 88, 1), (41, 5, 42, 5), (24, 5, 25, 7), (12, 11, 13, 7)],
|
||||
[(98, 5, 99, 1), (45, 7, 46, 3), (19, 15, 20, 2), (15, 3, 16, 13)],
|
||||
[(107, 1, 108, 5), (46, 10, 47, 1), (22, 1, 23, 15), (14, 2, 15, 17)],
|
||||
[(120, 5, 121, 1), (43, 9, 44, 4), (22, 17, 23, 1), (14, 2, 15, 19)],
|
||||
[(113, 3, 114, 4), (44, 3, 45, 11), (21, 17, 22, 4), (13, 9, 14, 16)],
|
||||
[(107, 3, 108, 5), (41, 3, 42, 13), (24, 15, 25, 5), (15, 15, 16, 10)],
|
||||
[(116, 4, 117, 4), (42, 17, 0, 0), (22, 17, 23, 6), (16, 19, 17, 6)],
|
||||
[(111, 2, 112, 7), (46, 17, 0, 0), (24, 7, 25, 16), (13, 34, 0, 0)],
|
||||
[(121, 4, 122, 5), (47, 4, 48, 14), (24, 11, 25, 14), (15, 16, 16, 14)],
|
||||
[(117, 6, 118, 4), (45, 6, 46, 14), (24, 11, 25, 16), (16, 30, 17, 2)],
|
||||
[(106, 8, 107, 4), (47, 8, 48, 13), (24, 7, 25, 22), (15, 22, 16, 13)],
|
||||
[(114, 10, 115, 2), (46, 19, 47, 4), (22, 28, 23, 6), (16, 33, 17, 4)],
|
||||
[(122, 8, 123, 4), (45, 22, 46, 3), (23, 8, 24, 27), (15, 12, 16, 28)],
|
||||
[(117, 3, 118, 10), (45, 3, 46, 23), (24, 4, 25, 31), (15, 11, 16, 31)],
|
||||
[(116, 7, 117, 7), (45, 21, 46, 7), (23, 1, 24, 37), (15, 19, 16, 26)],
|
||||
[(115, 5, 116, 10), (47, 19, 48, 10), (24, 15, 25, 25), (15, 23, 16, 25)],
|
||||
[(115, 13, 116, 3), (46, 2, 47, 29), (24, 42, 25, 1), (15, 23, 16, 28)],
|
||||
[(115, 17, 0, 0), (46, 10, 47, 23), (24, 10, 25, 35), (15, 19, 16, 35)],
|
||||
[(115, 17, 116, 1), (46, 14, 47, 21), (24, 29, 25, 19), (15, 11, 16, 46)],
|
||||
[(115, 13, 116, 6), (46, 14, 47, 23), (24, 44, 25, 7), (16, 59, 17, 1)],
|
||||
[(121, 12, 122, 7), (47, 12, 48, 26), (24, 39, 25, 14), (15, 22, 16, 41)],
|
||||
[(121, 6, 122, 14), (47, 6, 48, 34), (24, 46, 25, 10), (15, 2, 16, 64)],
|
||||
[(122, 17, 123, 4), (46, 29, 47, 14), (24, 49, 25, 10), (15, 24, 16, 46)],
|
||||
[(122, 4, 123, 18), (46, 13, 47, 32), (24, 48, 25, 14), (15, 42, 16, 32)],
|
||||
[(117, 20, 118, 4), (47, 40, 48, 7), (24, 43, 25, 22), (15, 10, 16, 67)],
|
||||
[(118, 19, 119, 6), (47, 18, 48, 31), (24, 34, 25, 34), (15, 20, 16, 61)],
|
||||
[(19, 1, 0, 0), (16, 1, 0, 0), (13, 1, 0, 0), (9, 1, 0, 0)], // 1
|
||||
[(34, 1, 0, 0), (28, 1, 0, 0), (22, 1, 0, 0), (16, 1, 0, 0)], // 2
|
||||
[(55, 1, 0, 0), (44, 1, 0, 0), (17, 2, 0, 0), (13, 2, 0, 0)], // 3
|
||||
[(80, 1, 0, 0), (32, 2, 0, 0), (24, 2, 0, 0), (9, 4, 0, 0)], // 4
|
||||
[(108, 1, 0, 0), (43, 2, 0, 0), (15, 2, 16, 2), (11, 2, 12, 2)], // 5
|
||||
[(68, 2, 0, 0), (27, 4, 0, 0), (19, 4, 0, 0), (15, 4, 0, 0)], // 6
|
||||
[(78, 2, 0, 0), (31, 4, 0, 0), (14, 2, 15, 4), (13, 4, 14, 1)], // 7
|
||||
[(97, 2, 0, 0), (38, 2, 39, 2), (18, 4, 19, 2), (14, 4, 15, 2)], // 8
|
||||
[(116, 2, 0, 0), (36, 3, 37, 2), (16, 4, 17, 4), (12, 4, 13, 4)], // 9
|
||||
[(68, 2, 69, 2), (43, 4, 44, 1), (19, 6, 20, 2), (15, 6, 16, 2)], // 10
|
||||
|
||||
[(81, 4, 0, 0), (50, 1, 51, 4), (22, 4, 23, 4), (12, 3, 13, 8)], // 11
|
||||
[(92, 2, 93, 2), (36, 6, 37, 2), (20, 4, 21, 6), (14, 7, 15, 4)], // 12
|
||||
[(107, 4, 0, 0), (37, 8, 38, 1), (20, 8, 21, 4), (11, 12, 12, 4)], // 13
|
||||
[(115, 3, 116, 1), (40, 4, 41, 5), (16, 11, 17, 5), (12, 11, 13, 5)], // 14
|
||||
[(87, 5, 88, 1), (41, 5, 42, 5), (24, 5, 25, 7), (12, 11, 13, 7)], // 15
|
||||
[(98, 5, 99, 1), (45, 7, 46, 3), (19, 15, 20, 2), (15, 3, 16, 13)], // 16
|
||||
[(107, 1, 108, 5), (46, 10, 47, 1), (22, 1, 23, 15), (14, 2, 15, 17)], // 17
|
||||
[(120, 5, 121, 1), (43, 9, 44, 4), (22, 17, 23, 1), (14, 2, 15, 19)], // 18
|
||||
[(113, 3, 114, 4), (44, 3, 45, 11), (21, 17, 22, 4), (13, 9, 14, 16)], // 19
|
||||
[(107, 3, 108, 5), (41, 3, 42, 13), (24, 15, 25, 5), (15, 15, 16, 10)], // 20
|
||||
|
||||
[(116, 4, 117, 4), (42, 17, 0, 0), (22, 17, 23, 6), (16, 19, 17, 6)], // 21
|
||||
[(111, 2, 112, 7), (46, 17, 0, 0), (24, 7, 25, 16), (13, 34, 0, 0)], // 22
|
||||
[(121, 4, 122, 5), (47, 4, 48, 14), (24, 11, 25, 14), (15, 16, 16, 14)], // 23
|
||||
[(117, 6, 118, 4), (45, 6, 46, 14), (24, 11, 25, 16), (16, 30, 17, 2)], // 24
|
||||
[(106, 8, 107, 4), (47, 8, 48, 13), (24, 7, 25, 22), (15, 22, 16, 13)], // 25
|
||||
[(114, 10, 115, 2), (46, 19, 47, 4), (22, 28, 23, 6), (16, 33, 17, 4)], // 26
|
||||
[(122, 8, 123, 4), (45, 22, 46, 3), (23, 8, 24, 26), (15, 12, 16, 28)], // 27
|
||||
[(117, 3, 118, 10), (45, 3, 46, 23), (24, 4, 25, 31), (15, 11, 16, 31)], // 28
|
||||
[(116, 7, 117, 7), (45, 21, 46, 7), (23, 1, 24, 37), (15, 19, 16, 26)], // 29
|
||||
[(115, 5, 116, 10), (47, 19, 48, 10), (24, 15, 25, 25), (15, 23, 16, 25)], // 30
|
||||
|
||||
[(115, 13, 116, 3), (46, 2, 47, 29), (24, 42, 25, 1), (15, 23, 16, 28)], // 31
|
||||
[(115, 17, 0, 0), (46, 10, 47, 23), (24, 10, 25, 35), (15, 19, 16, 35)], // 32
|
||||
[(115, 17, 116, 1), (46, 14, 47, 21), (24, 29, 25, 19), (15, 11, 16, 46)], // 33
|
||||
[(115, 13, 116, 6), (46, 14, 47, 23), (24, 44, 25, 7), (16, 59, 17, 1)], // 34
|
||||
[(121, 12, 122, 7), (47, 12, 48, 26), (24, 39, 25, 14), (15, 22, 16, 41)], // 35
|
||||
[(121, 6, 122, 14), (47, 6, 48, 34), (24, 46, 25, 10), (15, 2, 16, 64)], // 36
|
||||
[(122, 17, 123, 4), (46, 29, 47, 14), (24, 49, 25, 10), (15, 24, 16, 46)], // 37
|
||||
[(122, 4, 123, 18), (46, 13, 47, 32), (24, 48, 25, 14), (15, 42, 16, 32)], // 38
|
||||
[(117, 20, 118, 4), (47, 40, 48, 7), (24, 43, 25, 22), (15, 10, 16, 67)], // 39
|
||||
[(118, 19, 119, 6), (47, 18, 48, 31), (24, 34, 25, 34), (15, 20, 16, 61)], // 40
|
||||
|
||||
// Micro versions.
|
||||
[(3, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)],
|
||||
[(5, 1, 0, 0), (4, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)],
|
||||
[(11, 1, 0, 0), (9, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)],
|
||||
[(16, 1, 0, 0), (14, 1, 0, 0), (10, 1, 0, 0), (0, 0, 0, 0)],
|
||||
[(3, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)], // M1
|
||||
[(5, 1, 0, 0), (4, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)], // M2
|
||||
[(11, 1, 0, 0), (9, 1, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)], // M3
|
||||
[(16, 1, 0, 0), (14, 1, 0, 0), (10, 1, 0, 0), (0, 0, 0, 0)], // M4
|
||||
];
|
||||
|
||||
//}}}
|
||||
|
||||
// Copyright 2014 Kenny Chan
|
||||
// Copyright 2014-2016 kennytm
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
// use this file except in compliance with the License. You may obtain a copy of
|
||||
|
|
Loading…
Reference in a new issue