Browse Source

🦄 refactor: 删除多余文件

Pchen. 3 months ago
parent
commit
137f53f2d9

+ 2 - 2
.gitignore

@@ -1,4 +1,4 @@
 node_modules/
 *.log
-config.json
-uploads/
+uploads/*
+!uploads/.gitkeep

+ 0 - 92
apis/Data/IndexData.js

@@ -1,92 +0,0 @@
-const API = require("../../lib/API");
-const db = require("../../plugin/DataBase/db");
-const AccessControl = require("../../lib/AccessControl");
-const { BaseStdResponse } = require("../../BaseStdResponse");
-
-class IndexData extends API {
-    constructor() {
-        super();
-
-        this.setPath('/Admin/IndexData')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined)) {
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER,
-                endpoint: 1513126
-            })
-        }
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = `
-                    SELECT
-                        (SELECT COUNT(*) FROM jw_account WHERE create_user = ?) AS accounts,
-                        (SELECT COUNT(*) FROM ic_rule) AS rules
-                `
-
-        try {
-            let r = await db.query(sql, [uuid])
-            if (!r)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR
-                })
-            
-            let { accounts, rules } = r[0]
-
-            sql = `
-            SELECT 
-                a.id,
-                a.title,
-                a.\`describe\`,
-                a.views,
-                a.type,
-                a.time,
-                u.username AS author
-            FROM 
-                article a
-            LEFT JOIN 
-                users u 
-            ON 
-                a.author = u.uuid
-            WHERE 
-                a.state = 1 
-                AND a.type = 'news'
-            ORDER BY 
-                a.id DESC
-            LIMIT 9
-        `
-
-            r = await db.query(sql)
-            if(!r)
-                return res.json({
-                    ...BaseStdResponse.DATABASE_ERR
-                })
-
-            res.json({
-                ...BaseStdResponse.OK,
-                data: {
-                    accounts,
-                    rules,
-                    article: r
-                }
-            })
-
-        } catch (err) {
-            return res.json({
-                ...BaseStdResponse.ERR,
-                msg: `获取数据失败!${err.message || ''}`
-            })
-        }
-    }
-}
-
-module.exports.IndexData = IndexData;

+ 0 - 65
apis/QK/Rule/AddRule.js

@@ -1,65 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class AddRule extends API {
-    constructor() {
-        super()
-
-        this.setPath('/QK/Rule')
-        this.setMethod('POST')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session,
-            id,
-            name,
-            account,
-            crouse,
-            state
-        } = req.body
-
-        if ([uuid, session, name, account, crouse].some(value => value === '' || value === null || value === undefined) || (loop && !day_of_week))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql, r
-        const time = new Date().getTime()
-
-        if (!id) {
-            sql = 'INSERT INTO qk_rule (\`name\`, create_user, create_time, account, crouse) VALUES (?, ?, ?, ?, ?)'
-            r = await db.query(sql, [name, uuid, time, account, crouse])
-        } else {
-            sql = 'UPDATE qk_rule SET \`name\` = ?, account = ?, crouse = ?, update_time = ?, \`state\` = ? WHERE id = ? AND create_user = ?'
-            r = await db.query(sql, [name, account, crouse, time, state, id, uuid])
-        }
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`添加规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "添加规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.AddRule = AddRule;

+ 0 - 49
apis/QK/Rule/DeleteRule.js

@@ -1,49 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class DeleteRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/QK/Rule')
-        this.setMethod('DELETE')
-    }
-
-    async onRequest(req, res) {
-        let { uuid, session, id } = req.body
-
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'DELETE FROM qk_rule WHERE id = ? AND create_user = ?'
-        let r = await db.query(sql, [id, uuid])
-
-        try {
-            if (r && r.affectedRows > 0) {
-                res.json({
-                    ...BaseStdResponse.OK
-                })
-            } else {
-                res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除规则失败!数据库错误' })
-            }
-        } catch (err) {
-            this.logger.error(`删除规则失败!${err.stack}`)
-            res.json({
-                ...BaseStdResponse.ERR,
-                msg: "删除规则失败!",
-            });
-        }
-    }
-}
-
-module.exports.DeleteRule = DeleteRule

+ 0 - 47
apis/QK/Rule/GetRule.js

@@ -1,47 +0,0 @@
-const API = require("../../../lib/API");
-const db = require("../../../plugin/DataBase/db");
-const AccessControl = require("../../../lib/AccessControl");
-const { BaseStdResponse } = require("../../../BaseStdResponse");
-
-class GetRule extends API {
-    constructor() {
-        super();
-
-        this.setPath('/QK/Rule')
-        this.setMethod('GET')
-    }
-
-    async onRequest(req, res) {
-        let {
-            uuid,
-            session
-        } = req.query
-
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
-            return res.json({
-                ...BaseStdResponse.MISSING_PARAMETER
-            })
-
-        // 检查 session
-        if (!await AccessControl.checkSession(uuid, session))
-            return res.status(401).json({
-                ...BaseStdResponse.ACCESS_DENIED
-            })
-
-        let sql = 'SELECT * FROM qk_rule WHERE create_user = ?'
-        let rows = await db.query(sql, [uuid])
-
-        if (!rows)
-            return res.json({
-                ...BaseStdResponse.MISSING_FILE,
-                msg: '获取规则列表失败!'
-            })
-
-        res.json({
-            ...BaseStdResponse.OK,
-            data: rows
-        })
-    }
-}
-
-module.exports.GetRule = GetRule;

+ 23 - 0
config.json

@@ -0,0 +1,23 @@
+{
+    "port": 30000,
+    "database": {
+        "host": "8.137.37.202",
+        "database": "gitnexus",
+        "port": 3306,
+        "user": "gitnexus",
+        "password": "Yx3ud937"
+    },
+    "redis": {
+        "host": "localhost",
+        "port": 5173,
+        "password": ""
+    },
+    "email": {
+        "host": "smtp.exmail.qq.com",
+        "port": 465,
+        "secure": true,
+        "user": "mail@ctbu.top",
+        "password": "FPhxUVrt5J9WxgiP"
+    },
+    "url": "https://hk1-api.ctbu.top/"
+}

+ 0 - 192
plugin/Browser/IcCookie.js

@@ -1,192 +0,0 @@
-const puppeteer = require('puppeteer');
-const getCaptcha = require('../Captcha/tesseract');
-const axios = require('axios');
-
-class icCookie {
-    constructor() {
-        console.log('启动浏览器服务')
-        this.browser = 0
-    }
-
-    async getLoginUrl() {
-        return new Promise(async (resolve, reject) => {
-            const url1 = 'https://ic.ctbu.edu.cn/ic-web/auth/address?finalAddress=https:%2F%2Fic.ctbu.edu.cn&errPageUrl=https:%2F%2Fic.ctbu.edu.cn%2F%23%2Ferror&manager=false&consoleType=16';
-
-            try {
-                const res1 = await axios.get(url1, {
-                    maxRedirects: 5, // 增加最大重定向次数
-                    validateStatus: function (status) {
-                        return (status >= 200 && status < 300) || status === 302; // 接受 302 重定向
-                    }
-                });
-
-                let redirectUrl = res1.data.data || res1.headers.location;
-
-                if (!redirectUrl) {
-                    reject('无法获取登录 URL');
-                    return;
-                }
-
-                resolve(redirectUrl);
-            } catch (error) {
-                if (error.response) {
-                    const redirectUrl = error.response.headers.location;
-                    if (redirectUrl) {
-                        resolve(redirectUrl);
-                    } else {
-                        reject(error);
-                    }
-                } else {
-                    reject(error);
-                }
-            }
-        });
-    }
-
-   async refresh(page) {
-        page.evaluate(async () => {
-            // window.location.reload();
-            await refreshCode();
-        });
-    }
-
-    async getAuthcode(page) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                let base64Image = '';
-                const url = await this.getLoginUrl();
-                page.goto(url);
-                page.on('response', async (response) => {
-                    if (response.url().includes('kaptcha?time=')) {
-                        const buffer = await response.buffer();
-                        base64Image = buffer.toString('base64');
-
-                        const authcodeResult = await getCaptcha(base64Image);
-                        if (!authcodeResult.success) {
-                            return await this.refresh(page);
-                        }
-
-                        const authcode = authcodeResult.msg;
-                        resolve(authcode);
-                    }
-                });
-
-                // 超时处理
-                setTimeout(async () => {
-                    if (base64Image === '') {
-                        await this.refresh(page);
-                    }
-                }, 5000);
-            } catch (error) {
-                console.log(error.stack)
-                reject(error);
-            }
-        });
-    }
-
-    async tryLogin(page, username, password, authcode) {
-        return new Promise(async (resolve, reject) => {
-            try {
-                await page.waitForSelector('#username');
-                await page.waitForSelector('#authcode');
-                await page.waitForSelector('#password');
-                await page.waitForSelector('#fm1');
-
-                await page.evaluate(async (username, password, authcode) => {
-                    document.querySelector("#username").value = username;
-                    document.querySelector("#authcode").value = authcode;
-
-                    function checkForm() {
-                        var key = new RSAUtils.getKeyPair(public_exponent, "", Modulus);
-                        var reversedPwd = password.split("").reverse().join("");
-                        var encrypedPwd = RSAUtils.encryptedString(key, reversedPwd);
-
-                        document.querySelector("#password").value = encrypedPwd;
-                        document.querySelector("#fm1").submit();
-
-                        return { public_exponent, Modulus, encrypedPwd, authcode };
-                    }
-                    return checkForm();
-                }, username, password, authcode);
-
-                // 响应处理
-                page.on('response', async (response) => {
-                    if (response.status() >= 300 && response.status() < 400) {
-                        return resolve();
-                    }
-
-                    if (response.url().includes('login?v=')) {
-                        const responseText = await response.text();
-                        if (responseText.includes('验证码输入有误') || responseText.includes('必须录入验证码')) {
-                            reject({ code: -603, msg: '验证码输入有误' });
-                        } else if (responseText.includes('用户名或密码错误')) {
-                            reject({ code: -600, msg: '用户名或密码错误' });
-                        } else if (responseText.includes('锁定')) {
-                            reject({ code: -601, msg: '账户被锁定' });
-                        } else {
-                            reject({ code: -604, msg: '未知错误' });
-                        }
-                    }
-                });
-            } catch (error) {
-                reject({ code: -602, msg: error.message });
-            }
-        });
-    }
-
-    async loading(username, password) {
-        if (this.browser.length >= 5) {
-            return { code: -666, msg: '并发数量达到上限,请稍后再试' };
-        }
-
-        let browser;
-        this.browser += 1
-        try {
-            browser = await puppeteer.launch({
-                headless: true,
-                timeout: 60000
-            });
-
-            const page = await browser.newPage();
-
-            page.setDefaultTimeout(30000);
-
-            const authcode = await this.getAuthcode(page);
-
-            await this.tryLogin(page, username, password, authcode);
-            let cookie = await this.getCookie(page);
-            
-            cookie = cookie.split(';')[0]
-
-            return { code: 0, msg: cookie };
-        } catch (error) {
-            console.error('登录过程错误:', error);
-            return { code: -600, msg: error.message };
-        } finally {
-            this.browser -= 1
-            if (browser) {
-                await browser.close();
-            }
-        }
-    }
-
-    async getCookie (page) {
-        return new Promise((resolve, reject) => {
-            page.on('response', async response => {
-                if (response.url().includes('https://ic.ctbu.edu.cn/ic-web//auth/token?uuid=')) {
-                    // 获取响应头中的 Set-Cookie
-                    const cookies = response.headers()['set-cookie'];
-
-                    if (cookies) {
-                        resolve(cookies); 
-                    } else {
-                        reject('No cookies found in response headers');
-                    }
-                }
-            });
-        });
-    };
-}
-
-let IcCookie = new icCookie()
-module.exports = IcCookie;

+ 0 - 27
plugin/Kaptcha/kaptcha.js

@@ -1,27 +0,0 @@
-const axios = require('axios');
-const apiUrl = 'https://api.kuaishibie.cn/predict';
-
-const getKaptcha = async (base64data) => {
-    try {
-        const response = await axios.post(apiUrl, {
-            username: 'Pchen0', // 用户名
-            password: 'Yx3ud937', // 密码
-            typeid: '3',
-            image: base64data
-        });
-
-        const data = response.data;
-        if (data.success) {
-            const { result } = data.data;
-            return result;
-        } else {
-            console.error(data.message);
-            throw new Error(data.message);
-        }
-    } catch (error) {
-        console.error('请求失败:', error.message);
-        throw error;
-    }
-};
-
-module.exports = getKaptcha;

+ 0 - 696
plugin/RSAUtils/RSAUtils.js

@@ -1,696 +0,0 @@
-/*
- * RSA, a suite of routines for performing RSA public-key computations in JavaScript.
- * Copyright 1998-2005 David Shapiro.
- * Dave Shapiro
- * dave@ohdave.com
- * changed by Fuchun, 2010-05-06
- * fcrpg2005@gmail.com
- */
-/*
- * Modified by +v then, 2018-03-28
- */
-
-var RSAUtils = {}
-
-// var biRadixBase = 2
-var biRadixBits = 16
-var bitsPerDigit = biRadixBits
-var biRadix = 1 << 16 // = 2^16 = 65536
-var biHalfRadix = biRadix >>> 1
-var biRadixSquared = biRadix * biRadix
-var maxDigitVal = biRadix - 1
-// var maxInteger = 9999999999999998
-
-// maxDigits:
-// Change this to accommodate your largest number size. Use setMaxDigits()
-// to change it!
-//
-// In general, if you're working with numbers of size N bits, you'll need 2*N
-// bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need
-//
-// 1024 * 2 / 16 = 128 digits of storage.
-//
-var maxDigits
-var ZERO_ARRAY
-var bigZero, bigOne
-
-var BigInt = function (flag) {
-    if (typeof flag === 'boolean' && flag === true) {
-        this.digits = null
-    } else {
-        this.digits = ZERO_ARRAY.slice(0)
-    }
-    this.isNeg = false
-}
-
-RSAUtils.setMaxDigits = function (value) {
-    maxDigits = value
-    ZERO_ARRAY = new Array(maxDigits)
-    for (var iza = 0; iza < ZERO_ARRAY.length; iza++) {
-        ZERO_ARRAY[iza] = 0
-    }
-    bigZero = new BigInt()
-    bigOne = new BigInt()
-    bigOne.digits[0] = 1
-}
-RSAUtils.setMaxDigits(20)
-
-// The maximum number of digits in base 10 you can convert to an
-// integer without JavaScript throwing up on you.
-var dpl10 = 15
-
-RSAUtils.biFromNumber = function (i) {
-    var result = new BigInt()
-    result.isNeg = i < 0
-    i = Math.abs(i)
-    var j = 0
-    while (i > 0) {
-        result.digits[j++] = i & maxDigitVal
-        i = Math.floor(i / biRadix)
-    }
-    return result
-}
-
-// lr10 = 10 ^ dpl10
-var lr10 = RSAUtils.biFromNumber(1000000000000000)
-
-RSAUtils.biFromDecimal = function (s) {
-    var isNeg = s.charAt(0) === '-'
-    var i = isNeg ? 1 : 0
-    var result
-    // Skip leading zeros.
-    while (i < s.length && s.charAt(i) === '0') ++i
-    if (i === s.length) {
-        result = new BigInt()
-    } else {
-        var digitCount = s.length - i
-        var fgl = digitCount % dpl10
-        if (fgl === 0) fgl = dpl10
-        result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)))
-        i += fgl
-        while (i < s.length) {
-            result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),
-                RSAUtils.biFromNumber(Number(s.substr(i, dpl10))))
-            i += dpl10
-        }
-        result.isNeg = isNeg
-    }
-    return result
-}
-
-RSAUtils.biCopy = function (bi) {
-    var result = new BigInt(true)
-    result.digits = bi.digits.slice(0)
-    result.isNeg = bi.isNeg
-    return result
-}
-
-RSAUtils.reverseStr = function (s) {
-    var result = ''
-    for (var i = s.length - 1; i > -1; --i) {
-        result += s.charAt(i)
-    }
-    return result
-}
-
-var hexatrigesimalToChar = [
-    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
-    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
-    'u', 'v', 'w', 'x', 'y', 'z'
-]
-
-RSAUtils.biToString = function (x, radix) { // 2 <= radix <= 36
-    var b = new BigInt()
-    b.digits[0] = radix
-    var qr = RSAUtils.biDivideModulo(x, b)
-    var result = hexatrigesimalToChar[qr[1].digits[0]]
-    while (RSAUtils.biCompare(qr[0], bigZero) === 1) {
-        qr = RSAUtils.biDivideModulo(qr[0], b)
-        // digit = qr[1].digits[0]
-        result += hexatrigesimalToChar[qr[1].digits[0]]
-    }
-    return (x.isNeg ? '-' : '') + RSAUtils.reverseStr(result)
-}
-
-RSAUtils.biToDecimal = function (x) {
-    var b = new BigInt()
-    b.digits[0] = 10
-    var qr = RSAUtils.biDivideModulo(x, b)
-    var result = String(qr[1].digits[0])
-    while (RSAUtils.biCompare(qr[0], bigZero) === 1) {
-        qr = RSAUtils.biDivideModulo(qr[0], b)
-        result += String(qr[1].digits[0])
-    }
-    return (x.isNeg ? '-' : '') + RSAUtils.reverseStr(result)
-}
-
-var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    'a', 'b', 'c', 'd', 'e', 'f']
-
-RSAUtils.digitToHex = function (n) {
-    var mask = 0xf
-    var result = ''
-    for (var i = 0; i < 4; ++i) {
-        result += hexToChar[n & mask]
-        n >>>= 4
-    }
-    return RSAUtils.reverseStr(result)
-}
-
-RSAUtils.biToHex = function (x) {
-    var result = ''
-    // var n = RSAUtils.biHighIndex(x)
-    for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {
-        result += RSAUtils.digitToHex(x.digits[i])
-    }
-    return result
-}
-
-RSAUtils.charToHex = function (c) {
-    var ZERO = 48
-    var NINE = ZERO + 9
-    var littleA = 97
-    var littleZ = littleA + 25
-    var bigA = 65
-    var bigZ = 65 + 25
-    var result
-
-    if (c >= ZERO && c <= NINE) {
-        result = c - ZERO
-    } else if (c >= bigA && c <= bigZ) {
-        result = 10 + c - bigA
-    } else if (c >= littleA && c <= littleZ) {
-        result = 10 + c - littleA
-    } else {
-        result = 0
-    }
-    return result
-}
-
-RSAUtils.hexToDigit = function (s) {
-    var result = 0
-    var sl = Math.min(s.length, 4)
-    for (var i = 0; i < sl; ++i) {
-        result <<= 4
-        result |= RSAUtils.charToHex(s.charCodeAt(i))
-    }
-    return result
-}
-
-RSAUtils.biFromHex = function (s) {
-    var result = new BigInt()
-    var sl = s.length
-    for (var i = sl, j = 0; i > 0; i -= 4, ++j) {
-        result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)))
-    }
-    return result
-}
-
-RSAUtils.biFromString = function (s, radix) {
-    var isNeg = s.charAt(0) === '-'
-    var istop = isNeg ? 1 : 0
-    var result = new BigInt()
-    var place = new BigInt()
-    place.digits[0] = 1 // radix^0
-    for (var i = s.length - 1; i >= istop; i--) {
-        var c = s.charCodeAt(i)
-        var digit = RSAUtils.charToHex(c)
-        var biDigit = RSAUtils.biMultiplyDigit(place, digit)
-        result = RSAUtils.biAdd(result, biDigit)
-        place = RSAUtils.biMultiplyDigit(place, radix)
-    }
-    result.isNeg = isNeg
-    return result
-}
-
-RSAUtils.biDump = function (b) {
-    return (b.isNeg ? '-' : '') + b.digits.join(' ')
-}
-
-RSAUtils.biAdd = function (x, y) {
-    var result
-
-    if (x.isNeg !== y.isNeg) {
-        y.isNeg = !y.isNeg
-        result = RSAUtils.biSubtract(x, y)
-        y.isNeg = !y.isNeg
-    } else {
-        result = new BigInt()
-        var c = 0
-        var n
-        for (var i = 0; i < x.digits.length; ++i) {
-            n = x.digits[i] + y.digits[i] + c
-            result.digits[i] = n % biRadix
-            c = Number(n >= biRadix)
-        }
-        result.isNeg = x.isNeg
-    }
-    return result
-}
-
-RSAUtils.biSubtract = function (x, y) {
-    var result
-    if (x.isNeg !== y.isNeg) {
-        y.isNeg = !y.isNeg
-        result = RSAUtils.biAdd(x, y)
-        y.isNeg = !y.isNeg
-    } else {
-        result = new BigInt()
-        var n, c
-        c = 0
-        for (var i = 0; i < x.digits.length; ++i) {
-            n = x.digits[i] - y.digits[i] + c
-            result.digits[i] = n % biRadix
-            // Stupid non-conforming modulus operation.
-            if (result.digits[i] < 0) result.digits[i] += biRadix
-            c = 0 - Number(n < 0)
-        }
-        // Fix up the negative sign, if any.
-        if (c === -1) {
-            c = 0
-            for (i = 0; i < x.digits.length; ++i) {
-                n = 0 - result.digits[i] + c
-                result.digits[i] = n % biRadix
-                // Stupid non-conforming modulus operation.
-                if (result.digits[i] < 0) result.digits[i] += biRadix
-                c = 0 - Number(n < 0)
-            }
-            // Result is opposite sign of arguments.
-            result.isNeg = !x.isNeg
-        } else {
-            // Result is same sign.
-            result.isNeg = x.isNeg
-        }
-    }
-    return result
-}
-
-RSAUtils.biHighIndex = function (x) {
-    var result = x.digits.length - 1
-    while (result > 0 && x.digits[result] === 0) --result
-    return result
-}
-
-RSAUtils.biNumBits = function (x) {
-    var n = RSAUtils.biHighIndex(x)
-    var d = x.digits[n]
-    var m = (n + 1) * bitsPerDigit
-    var result
-    for (result = m; result > m - bitsPerDigit; --result) {
-        if ((d & 0x8000) !== 0) break
-        d <<= 1
-    }
-    return result
-}
-
-RSAUtils.biMultiply = function (x, y) {
-    var result = new BigInt()
-    var c
-    var n = RSAUtils.biHighIndex(x)
-    var t = RSAUtils.biHighIndex(y)
-    // var u, uv, k
-    var uv, k
-
-    for (var i = 0; i <= t; ++i) {
-        c = 0
-        k = i
-        for (var j = 0; j <= n; ++j, ++k) {
-            uv = result.digits[k] + x.digits[j] * y.digits[i] + c
-            result.digits[k] = uv & maxDigitVal
-            c = uv >>> biRadixBits
-            // c = Math.floor(uv / biRadix);
-        }
-        result.digits[i + n + 1] = c
-    }
-    // Someone give me a logical xor, please.
-    result.isNeg = x.isNeg !== y.isNeg
-    return result
-}
-
-RSAUtils.biMultiplyDigit = function (x, y) {
-    var n, c, uv, result
-
-    result = new BigInt()
-    n = RSAUtils.biHighIndex(x)
-    c = 0
-    for (var j = 0; j <= n; ++j) {
-        uv = result.digits[j] + x.digits[j] * y + c
-        result.digits[j] = uv & maxDigitVal
-        c = uv >>> biRadixBits
-        // c = Math.floor(uv / biRadix);
-    }
-    result.digits[1 + n] = c
-    return result
-}
-
-RSAUtils.arrayCopy = function (src, srcStart, dest, destStart, n) {
-    var m = Math.min(srcStart + n, src.length)
-    for (var i = srcStart, j = destStart; i < m; ++i, ++j) {
-        dest[j] = src[i]
-    }
-}
-
-var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,
-    0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
-    0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF]
-
-RSAUtils.biShiftLeft = function (x, n) {
-    var digitCount = Math.floor(n / bitsPerDigit)
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,
-        result.digits.length - digitCount)
-    var bits = n % bitsPerDigit
-    var rightBits = bitsPerDigit - bits
-    for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {
-        result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |
-            ((result.digits[i1] & highBitMasks[bits]) >>>
-                (rightBits))
-    }
-    result.digits[0] = ((result.digits[i] << bits) & maxDigitVal)
-    result.isNeg = x.isNeg
-    return result
-}
-
-var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
-    0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
-    0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]
-
-RSAUtils.biShiftRight = function (x, n) {
-    var digitCount = Math.floor(n / bitsPerDigit)
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,
-        x.digits.length - digitCount)
-    var bits = n % bitsPerDigit
-    var leftBits = bitsPerDigit - bits
-    for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
-        result.digits[i] = (result.digits[i] >>> bits) |
-            ((result.digits[i1] & lowBitMasks[bits]) << leftBits)
-    }
-    result.digits[result.digits.length - 1] >>>= bits
-    result.isNeg = x.isNeg
-    return result
-}
-
-RSAUtils.biMultiplyByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n)
-    return result
-}
-
-RSAUtils.biDivideByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n)
-    return result
-}
-
-RSAUtils.biModuloByRadixPower = function (x, n) {
-    var result = new BigInt()
-    RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n)
-    return result
-}
-
-RSAUtils.biCompare = function (x, y) {
-    if (x.isNeg !== y.isNeg) {
-        return 1 - 2 * Number(x.isNeg)
-    }
-    for (var i = x.digits.length - 1; i >= 0; --i) {
-        if (x.digits[i] !== y.digits[i]) {
-            if (x.isNeg) {
-                return 1 - 2 * Number(x.digits[i] > y.digits[i])
-            } else {
-                return 1 - 2 * Number(x.digits[i] < y.digits[i])
-            }
-        }
-    }
-    return 0
-}
-
-RSAUtils.biDivideModulo = function (x, y) {
-    var nb = RSAUtils.biNumBits(x)
-    var tb = RSAUtils.biNumBits(y)
-    var origYIsNeg = y.isNeg
-    var q, r
-    if (nb < tb) {
-        // |x| < |y|
-        if (x.isNeg) {
-            q = RSAUtils.biCopy(bigOne)
-            q.isNeg = !y.isNeg
-            x.isNeg = false
-            y.isNeg = false
-            r = RSAUtils.biSubtract(y, x)
-            // Restore signs, 'cause they're references.
-            x.isNeg = true
-            y.isNeg = origYIsNeg
-        } else {
-            q = new BigInt()
-            r = RSAUtils.biCopy(x)
-        }
-        return [q, r]
-    }
-
-    q = new BigInt()
-    r = x
-
-    // Normalize Y.
-    var t = Math.ceil(tb / bitsPerDigit) - 1
-    var lambda = 0
-    while (y.digits[t] < biHalfRadix) {
-        y = RSAUtils.biShiftLeft(y, 1)
-        ++lambda
-        ++tb
-        t = Math.ceil(tb / bitsPerDigit) - 1
-    }
-    // Shift r over to keep the quotient constant. We'll shift the
-    // remainder back at the end.
-    r = RSAUtils.biShiftLeft(r, lambda)
-    nb += lambda // Update the bit count for x.
-    var n = Math.ceil(nb / bitsPerDigit) - 1
-
-    var b = RSAUtils.biMultiplyByRadixPower(y, n - t)
-    while (RSAUtils.biCompare(r, b) !== -1) {
-        ++q.digits[n - t]
-        r = RSAUtils.biSubtract(r, b)
-    }
-    for (var i = n; i > t; --i) {
-        var ri = (i >= r.digits.length) ? 0 : r.digits[i]
-        var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1]
-        var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2]
-        var yt = (t >= y.digits.length) ? 0 : y.digits[t]
-        var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1]
-        if (ri === yt) {
-            q.digits[i - t - 1] = maxDigitVal
-        } else {
-            q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt)
-        }
-
-        var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1)
-        var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2)
-        while (c1 > c2) {
-            --q.digits[i - t - 1]
-            c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1)
-            c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2)
-        }
-
-        b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1)
-        r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]))
-        if (r.isNeg) {
-            r = RSAUtils.biAdd(r, b)
-            --q.digits[i - t - 1]
-        }
-    }
-    r = RSAUtils.biShiftRight(r, lambda)
-    // Fiddle with the signs and stuff to make sure that 0 <= r < y.
-    q.isNeg = x.isNeg !== origYIsNeg
-    if (x.isNeg) {
-        if (origYIsNeg) {
-            q = RSAUtils.biAdd(q, bigOne)
-        } else {
-            q = RSAUtils.biSubtract(q, bigOne)
-        }
-        y = RSAUtils.biShiftRight(y, lambda)
-        r = RSAUtils.biSubtract(y, r)
-    }
-    // Check for the unbelievably stupid degenerate case of r === -0.
-    if (r.digits[0] === 0 && RSAUtils.biHighIndex(r) === 0) r.isNeg = false
-
-    return [q, r]
-}
-
-RSAUtils.biDivide = function (x, y) {
-    return RSAUtils.biDivideModulo(x, y)[0]
-}
-
-RSAUtils.biModulo = function (x, y) {
-    return RSAUtils.biDivideModulo(x, y)[1]
-}
-
-RSAUtils.biMultiplyMod = function (x, y, m) {
-    return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m)
-}
-
-RSAUtils.biPow = function (x, y) {
-    var result = bigOne
-    var a = x
-    while (true) {
-        if ((y & 1) !== 0) result = RSAUtils.biMultiply(result, a)
-        y >>= 1
-        if (y === 0) break
-        a = RSAUtils.biMultiply(a, a)
-    }
-    return result
-}
-
-RSAUtils.biPowMod = function (x, y, m) {
-    var result = bigOne
-    var a = x
-    var k = y
-    while (true) {
-        if ((k.digits[0] & 1) !== 0) result = RSAUtils.biMultiplyMod(result, a, m)
-        k = RSAUtils.biShiftRight(k, 1)
-        if (k.digits[0] === 0 && RSAUtils.biHighIndex(k) === 0) break
-        a = RSAUtils.biMultiplyMod(a, a, m)
-    }
-    return result
-}
-
-var BarrettMu = function (m) {
-    this.modulus = RSAUtils.biCopy(m)
-    this.k = RSAUtils.biHighIndex(this.modulus) + 1
-    var b2k = new BigInt()
-    b2k.digits[2 * this.k] = 1 // b2k = b^(2k)
-    this.mu = RSAUtils.biDivide(b2k, this.modulus)
-    this.bkplus1 = new BigInt()
-    this.bkplus1.digits[this.k + 1] = 1 // bkplus1 = b^(k+1)
-    this.modulo = BarrettMuModulo
-    this.multiplyMod = BarrettMuMultiplyMod
-    this.powMod = BarrettMuPowMod
-}
-
-function BarrettMuModulo(x) {
-    var $dmath = RSAUtils
-    var q1 = $dmath.biDivideByRadixPower(x, this.k - 1)
-    var q2 = $dmath.biMultiply(q1, this.mu)
-    var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1)
-    var r1 = $dmath.biModuloByRadixPower(x, this.k + 1)
-    var r2term = $dmath.biMultiply(q3, this.modulus)
-    var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1)
-    var r = $dmath.biSubtract(r1, r2)
-    if (r.isNeg) {
-        r = $dmath.biAdd(r, this.bkplus1)
-    }
-    var rgtem = $dmath.biCompare(r, this.modulus) >= 0
-    while (rgtem) {
-        r = $dmath.biSubtract(r, this.modulus)
-        rgtem = $dmath.biCompare(r, this.modulus) >= 0
-    }
-    return r
-}
-
-function BarrettMuMultiplyMod(x, y) {
-    /*
-     x = this.modulo(x);
-     y = this.modulo(y);
-     */
-    var xy = RSAUtils.biMultiply(x, y)
-    return this.modulo(xy)
-}
-
-function BarrettMuPowMod(x, y) {
-    var result = new BigInt()
-    result.digits[0] = 1
-    var a = x
-    var k = y
-    while (true) {
-        if ((k.digits[0] & 1) !== 0) result = this.multiplyMod(result, a)
-        k = RSAUtils.biShiftRight(k, 1)
-        if (k.digits[0] === 0 && RSAUtils.biHighIndex(k) === 0) break
-        a = this.multiplyMod(a, a)
-    }
-    return result
-}
-
-var RSAKeyPair = function (encryptionExponent, decryptionExponent, modulus) {
-    var $dmath = RSAUtils
-    this.e = $dmath.biFromHex(encryptionExponent)
-    this.d = $dmath.biFromHex(decryptionExponent)
-    this.m = $dmath.biFromHex(modulus)
-    // We can do two bytes per digit, so
-    // chunkSize = 2 * (number of digits in modulus - 1).
-    // Since biHighIndex returns the high index, not the number of digits, 1 has
-    // already been subtracted.
-    this.chunkSize = 2 * $dmath.biHighIndex(this.m)
-    this.radix = 16
-    this.barrett = new BarrettMu(this.m)
-}
-
-RSAUtils.getKeyPair = function (encryptionExponent, decryptionExponent, modulus) {
-    return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus)
-}
-
-// var twoDigit = function (n) {
-//   return (n < 10 ? '0' : '') + String(n)
-// }
-
-// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
-// string after it has been converted to an array. This fixes an
-// incompatibility with Flash MX's ActionScript.
-RSAUtils.encryptedString = function (key, s) {
-    var a = []
-    var sl = s.length
-    var i = 0
-    while (i < sl) {
-        a[i] = s.charCodeAt(i)
-        i++
-    }
-
-    while (a.length % key.chunkSize !== 0) {
-        a[i++] = 0
-    }
-
-    var al = a.length
-    var result = ''
-    var j, k, block
-    for (i = 0; i < al; i += key.chunkSize) {
-        block = new BigInt()
-        j = 0
-        for (k = i; k < i + key.chunkSize; ++j) {
-            block.digits[j] = a[k++]
-            block.digits[j] += a[k++] << 8
-        }
-        var crypt = key.barrett.powMod(block, key.e)
-        var text = key.radix === 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix)
-        result += text + ' '
-    }
-    return result.substring(0, result.length - 1) // Remove last space.
-}
-
-RSAUtils.decryptedString = function (key, s) {
-    var blocks = s.split(' ')
-    var result = ''
-    var i, j, block
-    for (i = 0; i < blocks.length; ++i) {
-        var bi
-        if (key.radix === 16) {
-            bi = RSAUtils.biFromHex(blocks[i])
-        } else {
-            bi = RSAUtils.biFromString(blocks[i], key.radix)
-        }
-        block = key.barrett.powMod(bi, key.d)
-        for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {
-            result += String.fromCharCode(block.digits[j] & 255,
-                block.digits[j] >> 8)
-        }
-    }
-    // Remove trailing null, if any.
-    if (result.charCodeAt(result.length - 1) === 0) {
-        result = result.substring(0, result.length - 1)
-    }
-    return result
-}
-
-RSAUtils.setMaxDigits(130)
-
-module.exports = {
-    RSAUtils
-};

+ 0 - 0
uploads/.gitkeep