PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/tweetnacl-ts/src

Просмотр файла: sealedbox.ts

import { ByteArray } from './array';
import { BoxLength, box, box_open, box_keyPair } from './box';
import { Blake2B, blake2b_init, blake2b_update, blake2b_final } from './blake2b';

export const enum SealedBoxLength {
    PublicKey = BoxLength.PublicKey,
    SecretKey = BoxLength.SecretKey,
    Nonce = BoxLength.Nonce,
    Overhead = BoxLength.PublicKey + BoxLength.Overhead,
}

export function sealedbox(m: ByteArray, pk: ByteArray): ByteArray {
    const c = ByteArray(SealedBoxLength.Overhead + m.length);
    const ek = box_keyPair();

    c.set(ek.publicKey);

    const nonce = nonce_gen(ek.publicKey, pk);
    const boxed = box(m, nonce, pk, ek.secretKey);

    c.set(boxed, ek.publicKey.length);

    // clear secret key
    for (let i = 0; i < ek.secretKey.length; i++) ek.secretKey[i] = 0;

    return c;
}

export function sealedbox_open(c: ByteArray, pk: ByteArray, sk: ByteArray): ByteArray | undefined {
    if (c.length < SealedBoxLength.Overhead) return;

    const epk = c.subarray(0, SealedBoxLength.PublicKey);
    const nonce = nonce_gen(epk, pk);
    const boxData = c.subarray(SealedBoxLength.PublicKey);

    return box_open(boxData, nonce, epk, sk);
}

function nonce_gen(pk1: ByteArray, pk2: ByteArray) {
    const state: Blake2B = blake2b_init(SealedBoxLength.Nonce);

    blake2b_update(state, pk1);
    blake2b_update(state, pk2);

    return blake2b_final(state);
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!