kaven-basic

Basic library for javascript/typescript.

Usage no npm install needed!

<script type="module">
  import kavenBasic from 'https://cdn.skypack.dev/kaven-basic';
</script>

README

Kaven-Basic

Installing

# NPM
npm install kaven-basic

# Yarn
yarn add kaven-basic

# PNPM
pnpm i kaven-basic

Usage

Node.js:

import { GenerateGuid } from "kaven-basic";

console.log(GenerateGuid());

Browser:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="kaven-basic/bundles/index.umd.js"></script>
</head>

<body>
    <script>alert(KavenBasic.GenerateGuid());</script>
    <script>
(async () => {
    try {
        /**
         * @type { import("../src") }
         */
        const KavenBasic = window.KavenBasic;

        const {
            KavenLog,
            FormatCurrentDate,
            GenerateGuid,
            KavenBrowserRSA,
            SequenceEqual,
        } = KavenBasic;

        {
            KavenLog.CreateLog(FormatCurrentDate()).WriteToConsole();
            KavenLog.CreateInfo(GenerateGuid()).WriteToConsole();
        }

        const str = "test 中文";

        // Create, Encrypt/Decrypt, Sign/Verify
        {
            const rsa = await KavenBrowserRSA.Create();

            console.log(rsa.PublicKey);
            console.log(rsa.PrivateKey);

            // RSA-OAEP
            const enc = new TextEncoder();
            const data = enc.encode(str);

            const encryptedData = await rsa.Encrypt(data);
            const decryptedData = await rsa.Decrypt(encryptedData);

            console.log(SequenceEqual(new Uint8Array(decryptedData), data));

            const dec = new TextDecoder();
            const decryptedStr = dec.decode(decryptedData);

            console.log(str === decryptedStr);

            // RSA-PSS
            const signature = await rsa.Sign(data);
            const pass = await rsa.Verify(data, signature);

            console.log(pass);
        }

        // Import
        {
            const publicKey = `-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArb0e2QEoDsnL41+3esUo1WUp6/lxYwhJd9CvAyahXlZNjLnLOpSK2VjTaGMU+FiL4pwCYpQDAjDl8dPyGokVBwG34e6i4nOmGl0cHnuE+fwPZrP7cQwVMVYHHRpVaVwDLHls3Jmz8xOlvihPEyBxzBYXD5Ssus227Akl0FRhaJ3P+va7vENMGILEIjKTF9HAafHxYWay4qj6fiwyS+mx8DoNVsYaDtcRrgqm2HOiyPST3qBnk9IH171Ozo7bUzJsvQrtBUVnuuYR8MlcbamMQxdlG6sC9fZRX4JCiF2zYcRFVWR9Qr6mrPv+FTRDr6YEB/I4D9+JOf8vrKvLsu3eppV5OXRmTgi3ttxIbzfhJBlnANg87nvdmuXQgPhfJ7UU7gbMwjk/+3PobAA4uHRJz3Et7WNok5rRBv0qTw9GVK99SfGbYJB8xbG61Rj3fOFphlc5CbZn2/7bwUnCr23jU0gzeS0WkhZWNekmAFa+kktW0raG9LuhGCzcE8J0LpXrr3gjQnESLCcWlDhKx3eZhNOKOBWpHQt9uo3DIadmEpSJrkga7SRLw4bTv6B41Y+gm+VBTAZipo77pWbYWEpZ+AkSBTRq06YvepuUteniNYVX+vtjh5LSn0OJRsK2HXxP62zZxwhuc05DaEIFvqo3ihVh7pOab8LkRtMtlhMwIFMCAwEAAQ==
-----END PUBLIC KEY-----`;

            const privateKey = `-----BEGIN PRIVATE KEY-----
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
-----END PRIVATE KEY-----`;

            const str = "kaven@wuwenkai.com 中文";

            const rsa = new KavenBrowserRSA(publicKey, privateKey);

            console.assert(await rsa.DecryptFromString(await rsa.EncryptToString(str)) === str);
            console.assert(await rsa.VerifyFromString(str, await rsa.SignToString(str)));

            // from KavenRSA
            const encryptedData = "HzAXSygyMgIMNr5TlCyL/uYdSjFjL1V0Ccioq85KO5Sx9a6IvTKSZQkVDtNYron4mwcj/n7ZaATpSJDn3cJWHihtTYNiQeMS960WHEaCYtyipx4k43BJoxlRkUy0SDpdPnsQ032V7emDIB+L2x/Ju01xDbF0z5igSTIXJFbtS2epD4kkrmMdHLc/d2WdnBgK5qFJOArehStC007CQN8XsnXTxgFMMYO7emIqGLMCvzrfHBCjN380Ns3yYcOqyws07SeOAxbM7EYG5B9zyJQXdSG00h8GWKDlB+/PqGY0pPuKwwMfRLns5sn1twCM6MVqShvsS6E3yiFWsbZS4NJy4hBPRiQirslpp3XOB0OEEByvQ58dtuFo/bGwyfI9FsNymqof6Kp5Y9SUYZwbCgxCvI0mqAyHdD10uWxi7lm1klazywb5roCzWqMgMhqa8+6XmcyDKZSKWuVu70vV8WZvKLTnOi6TmdSe9xz/5Vo6OoAAj1YPMh+7GMu1HLruthl2/TGfdzwH7F4tkrcaWLZVZ3ZpKP/SXg38NnMlg3L/B3i4gU57XVGSkYPTLvN3zFx4K7/Zld7Y6TZzt7p2qlUt475jBE8eZ5U1Fllwf7V5al2yAZkm3HHq8WUeVdabOq0FySd1GLyy0+Fgqp+kpBoCtRZN47ICxFD+KR/HsYBIJVw=";
            const decryptedStr = await rsa.DecryptFromString(encryptedData);
            console.assert(decryptedStr === str);

            const signature = "QF0gO0tbCUMa5RLm3pY7UoQiR07vMFPBLf/Gt9hcD2HP5wcBDE3/ttgy3WQxoxscW46zy1alR/tNMT+OPvn8W+IU1IJT+oRORsiQAMvWev8UHaF7b5oU0+Oe6Ez0pcR9dSWwziaiGLtQ1yFFwzyivXO/iH+RIAXu5l9cOMIl+ah94d5ZgNd49I+ZnmLbAuzwD0dOiV/bNSB+3+iMgnqOqu9FURqInZZtoWM+rV5mZ7T/QOYGgyUZkpc5hszD7wztBXjNqp/yyIuCnGkSoc34Vu3lcSEOqik3S6caWFv0iJoy9smyo7x3uOcTaQ4+OfGFdJzSQA1DwVZUlfxlmzMpp/cRjO4b5lBmcwzLxoEKJtvhagc+n51bT63/IW1pFhpwf9deZ+moSIbZfAZn2Ytb7eij+zuXe/Jqs2cGLu/rcnhMJEf7/+sCzuxUtd/xBWx7gGTKGjPrgnlw23eSwfnUsL+HvicHBTgyXrOI8lofmMqsT5shnjQGgMpCECs3q9rhq258mLB0syTqtA8Gg9CDz+s1aketjNqLcdaxDCqNM0LYOEvY7kL9AYrmjqyTg5Ke2TdJx5pdXyqbjBSGEWY7FXb+LZhCLQpCdu3SFQ0isV3L7z+zvwEOlIfL8aHqjfKZHxW+NSUiRBXYOCfy8Xe5ZBKLMuks0iQSwGi3mCjGbrU=";
            console.assert(await rsa.VerifyFromString(str, signature));
        }
    } catch (ex) {
        console.error(ex);
    }
})();
    </script>
</body>

</html>

Documentation

Kaven-Basic