Typescript Cipher.getAuthTag не существует - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь выполнить шифрование / дешифрование, используя https://github.com/luke-park/SecureCompatibleEncryptionExamples, но определение Cipher не имеет getAuthTag.

есть ли @types, я должен установить?

EDIT Только что увидел узел / index.d.ts, который прокомментировал getAuthTag и setAAD. Я не считаю правильным удалить комментарий.

Ответы [ 2 ]

0 голосов
/ 02 августа 2019

Принятый ответ хорошо объясняет «почему». Этот ответ для тех, кто сталкивается с проблемой и задается вопросом, что попробовать.

Я столкнулся с этим сегодня. В моем случае алгоритм был переменной, которая была разрешена во время выполнения. Код ниже работал.

private algorithm: "aes-256-gcm" | "aes-128-gcm"; //see link below
//some code
const decipher = crypto.createDecipheriv(
  this.algorithm,
  Buffer.from(rawKey, "hex"),
  Buffer.from(iv)
);

TypeScript скомпилировал это без проблем.

Ссылки: Как запросить определенную строку в интерфейсе TypeScript

0 голосов
/ 30 августа 2018

Если вы перейдете к объявлению Cipher в @types/node, вы заметите, что у него есть подинтерфейсы с getAuthTag:

    export interface Cipher extends NodeJS.ReadWriteStream {
        update(data: string | Buffer | NodeJS.TypedArray | DataView): Buffer;
        update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer;
        update(data: Buffer | NodeJS.TypedArray | DataView, output_encoding: HexBase64BinaryEncoding): string;
        update(data: Buffer | NodeJS.TypedArray | DataView, input_encoding: any, output_encoding: HexBase64BinaryEncoding): string;
        // second arg ignored
        update(data: string, input_encoding: Utf8AsciiBinaryEncoding, output_encoding: HexBase64BinaryEncoding): string;
        final(): Buffer;
        final(output_encoding: string): string;
        setAutoPadding(auto_padding?: boolean): this;
        // getAuthTag(): Buffer;
        // setAAD(buffer: Buffer): this; // docs only say buffer
    }
    export interface CipherCCM extends Cipher {
        setAAD(buffer: Buffer, options: { plaintextLength: number }): this;
        getAuthTag(): Buffer;
    }
    export interface CipherGCM extends Cipher {
        setAAD(buffer: Buffer, options?: { plaintextLength: number }): this;
        getAuthTag(): Buffer;
}

А createCipheriv имеет соответствующие перегрузки : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/index.d.ts#L5914-L5916

export function createCipheriv(algorithm: CipherCCMTypes, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options: CipherCCMOptions): CipherCCM;
export function createCipheriv(algorithm: CipherGCMTypes, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options?: CipherGCMOptions): CipherGCM;
export function createCipheriv(algorithm: string, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Cipher;

Так что, если вы передадите algorithm аргумент, который , известный во время компиляции , принадлежит CipherGCMTypes, то вы сможете вызвать getAuthTag. Если это не работает, пожалуйста, добавьте свой код к вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...