summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/boombuler/barcode/qr/numeric.go
diff options
context:
space:
mode:
authorAndrew <write@imaginarycode.com>2017-01-15 21:14:29 -0500
committerLunny Xiao <xiaolunwen@gmail.com>2017-01-16 10:14:29 +0800
commit6dd096b7f08799ff27d9e34356fb1163ca10f388 (patch)
treee5823a27df5def081c9c39f5fac1424a81875f6d /vendor/github.com/boombuler/barcode/qr/numeric.go
parent64375d875b4d46a6081026290da8efd82c84b25f (diff)
downloadgitea-6dd096b7f08799ff27d9e34356fb1163ca10f388.tar.gz
gitea-6dd096b7f08799ff27d9e34356fb1163ca10f388.zip
Two factor authentication support (#630)
* Initial commit for 2FA support Signed-off-by: Andrew <write@imaginarycode.com> * Add vendored files * Add missing depends * A few clean ups * Added improvements, proper encryption * Better encryption key * Simplify "key" generation * Make 2FA enrollment page more robust * Fix typo * Rename twofa/2FA to TwoFactor * UNIQUE INDEX -> UNIQUE
Diffstat (limited to 'vendor/github.com/boombuler/barcode/qr/numeric.go')
-rw-r--r--vendor/github.com/boombuler/barcode/qr/numeric.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/vendor/github.com/boombuler/barcode/qr/numeric.go b/vendor/github.com/boombuler/barcode/qr/numeric.go
new file mode 100644
index 0000000000..49b44cc45d
--- /dev/null
+++ b/vendor/github.com/boombuler/barcode/qr/numeric.go
@@ -0,0 +1,56 @@
+package qr
+
+import (
+ "errors"
+ "fmt"
+ "strconv"
+
+ "github.com/boombuler/barcode/utils"
+)
+
+func encodeNumeric(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) {
+ contentBitCount := (len(content) / 3) * 10
+ switch len(content) % 3 {
+ case 1:
+ contentBitCount += 4
+ case 2:
+ contentBitCount += 7
+ }
+ vi := findSmallestVersionInfo(ecl, numericMode, contentBitCount)
+ if vi == nil {
+ return nil, nil, errors.New("To much data to encode")
+ }
+ res := new(utils.BitList)
+ res.AddBits(int(numericMode), 4)
+ res.AddBits(len(content), vi.charCountBits(numericMode))
+
+ for pos := 0; pos < len(content); pos += 3 {
+ var curStr string
+ if pos+3 <= len(content) {
+ curStr = content[pos : pos+3]
+ } else {
+ curStr = content[pos:]
+ }
+
+ i, err := strconv.Atoi(curStr)
+ if err != nil || i < 0 {
+ return nil, nil, fmt.Errorf("\"%s\" can not be encoded as %s", content, Numeric)
+ }
+ var bitCnt byte
+ switch len(curStr) % 3 {
+ case 0:
+ bitCnt = 10
+ case 1:
+ bitCnt = 4
+ break
+ case 2:
+ bitCnt = 7
+ break
+ }
+
+ res.AddBits(i, bitCnt)
+ }
+
+ addPaddingAndTerminator(res, vi)
+ return res, vi, nil
+}