From 18748e6b995ad6e95ab7667e2eb8151bb0fd184f Mon Sep 17 00:00:00 2001 From: york yao Date: Wed, 7 Sep 2016 19:37:50 +0800 Subject: [PATCH 1/3] fix types of node crypto module --- node/node.d.ts | 105 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 75 insertions(+), 30 deletions(-) diff --git a/node/node.d.ts b/node/node.d.ts index 245aa95abe..f6e5ab3769 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -2142,6 +2142,35 @@ declare module "tls" { } declare module "crypto" { + export interface Certificate { + exportChallenge(spkac: string | Buffer): Buffer; + exportPublicKey(spkac: string | Buffer): Buffer; + verifySpkac(spkac: Buffer): boolean; + } + export var Certificate: { + new (): Certificate; + (): Certificate; + } + + export function createECDH(curve_name: string): ECDH; + export interface ECDH { + generateKeys(): Buffer; + generateKeys(encoding: "latin1" | "hex" | "base64"): string; + generateKeys(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + computeSecret(other_public_key: Buffer): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(): Buffer; + getPublicKey(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + setPrivateKey(private_key: Buffer): void; + setPrivateKey(private_key: string, encoding: "latin1" | "hex" | "base64"): void; + } + + export var fips: boolean; + export interface CredentialDetails { pfx: string; key: string; @@ -2154,19 +2183,18 @@ declare module "crypto" { export interface Credentials { context?: any; } export function createCredentials(details: CredentialDetails): Credentials; export function createHash(algorithm: string): Hash; - export function createHmac(algorithm: string, key: string): Hmac; - export function createHmac(algorithm: string, key: Buffer): Hmac; - export interface Hash { - update(data: any, input_encoding?: string): Hash; - digest(encoding: 'buffer'): Buffer; - digest(encoding: string): any; + export function createHmac(algorithm: string, key: string | Buffer): Hmac; + export interface Hash extends NodeJS.ReadWriteStream { + update(data: string | Buffer): Hash; + update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Hash; digest(): Buffer; + digest(encoding: "latin1" | "hex" | "base64"): string; } export interface Hmac extends NodeJS.ReadWriteStream { - update(data: any, input_encoding?: string): Hmac; - digest(encoding: 'buffer'): Buffer; - digest(encoding: string): any; + update(data: string | Buffer): Hmac; + update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Hmac; digest(): Buffer; + digest(encoding: "latin1" | "hex" | "base64"): string; } export function createCipher(algorithm: string, password: any): Cipher; export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; @@ -2177,8 +2205,9 @@ declare module "crypto" { update(data: string, input_encoding: "utf8" | "ascii" | "binary", output_encoding: "binary" | "base64" | "hex"): string; final(): Buffer; final(output_encoding: string): string; - setAutoPadding(auto_padding: boolean): void; + setAutoPadding(auto_padding?: boolean): void; getAuthTag(): Buffer; + setAAD(buffer: Buffer): void; } export function createDecipher(algorithm: string, password: any): Decipher; export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; @@ -2189,37 +2218,51 @@ declare module "crypto" { update(data: string, input_encoding: "binary" | "base64" | "hex", output_encoding: "utf8" | "ascii" | "binary"): string; final(): Buffer; final(output_encoding: string): string; - setAutoPadding(auto_padding: boolean): void; + setAutoPadding(auto_padding?: boolean): void; setAuthTag(tag: Buffer): void; + setAAD(buffer: Buffer): void; } export function createSign(algorithm: string): Signer; export interface Signer extends NodeJS.WritableStream { - update(data: any): void; - sign(private_key: string): Buffer; - sign(private_key: string, output_format: 'latin1' | 'hex' | 'base64'): string; + update(data: string | Buffer): Signer; + update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Signer; + sign(private_key: string | { key: string; passphrase: string }): Buffer; + sign(private_key: string | { key: string; passphrase: string }, output_format: "latin1" | "hex" | "base64"): string; } export function createVerify(algorith: string): Verify; export interface Verify extends NodeJS.WritableStream { - update(data: any): void; + update(data: string | Buffer): Verify; + update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Verify; verify(object: string, signature: Buffer): boolean; - verify(object: string, signature: string, signature_format: 'latin1' | 'hex' | 'base64'): boolean; + verify(object: string, signature: string, signature_format: string): boolean; } - export function createDiffieHellman(prime_length: number): DiffieHellman; - export function createDiffieHellman(prime: number, encoding?: string): DiffieHellman; + export function createDiffieHellman(prime_length: number, generator?: number): DiffieHellman; + export function createDiffieHellman(prime: Buffer): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64"): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64", generator: number | Buffer): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64", generator: string, generator_encoding: "latin1" | "hex" | "base64"): DiffieHellman; export interface DiffieHellman { - generateKeys(encoding?: string): string; - computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string; - getPrime(encoding?: string): string; - getGenerator(encoding: string): string; - getPublicKey(encoding?: string): string; - getPrivateKey(encoding?: string): string; - setPublicKey(public_key: string, encoding?: string): void; - setPrivateKey(public_key: string, encoding?: string): void; + generateKeys(): Buffer; + generateKeys(encoding: "latin1" | "hex" | "base64"): string; + computeSecret(other_public_key: Buffer): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; + getPrime(): Buffer; + getPrime(encoding: "latin1" | "hex" | "base64"): string; + getGenerator(): Buffer; + getGenerator(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(): Buffer; + getPublicKey(encoding: "latin1" | "hex" | "base64"): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; + setPublicKey(public_key: Buffer): void; + setPublicKey(public_key: string, encoding: string): void; + setPrivateKey(private_key: Buffer): void; + setPrivateKey(private_key: string, encoding: string): void; + verifyError: number; } export function getDiffieHellman(group_name: string): DiffieHellman; - export function pbkdf2(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, callback: (err: Error, derivedKey: Buffer) => any): void; export function pbkdf2(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string, callback: (err: Error, derivedKey: Buffer) => any): void; - export function pbkdf2Sync(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number): Buffer; export function pbkdf2Sync(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string): Buffer; export function randomBytes(size: number): Buffer; export function randomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void; @@ -2227,15 +2270,17 @@ declare module "crypto" { export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void; export interface RsaPublicKey { key: string; - padding?: any; + padding?: number; } export interface RsaPrivateKey { key: string; passphrase?: string, - padding?: any; + padding?: number; } export function publicEncrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer export function privateDecrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer + export function privateEncrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer + export function publicDecrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer export function getCiphers(): string[]; export function getCurves(): string[]; export function getHashes(): string[]; From dd581d009ebe7fef6652bc234038ce2af2836902 Mon Sep 17 00:00:00 2001 From: york yao Date: Wed, 7 Sep 2016 20:34:02 +0800 Subject: [PATCH 2/3] merge the 2 ECDH interfaces and createECDH functions --- node/node.d.ts | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/node/node.d.ts b/node/node.d.ts index f6e5ab3769..995084c035 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -2152,23 +2152,6 @@ declare module "crypto" { (): Certificate; } - export function createECDH(curve_name: string): ECDH; - export interface ECDH { - generateKeys(): Buffer; - generateKeys(encoding: "latin1" | "hex" | "base64"): string; - generateKeys(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; - computeSecret(other_public_key: Buffer): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; - getPrivateKey(): Buffer; - getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; - getPublicKey(): Buffer; - getPublicKey(encoding: "latin1" | "hex" | "base64"): string; - getPublicKey(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; - setPrivateKey(private_key: Buffer): void; - setPrivateKey(private_key: string, encoding: "latin1" | "hex" | "base64"): void; - } - export var fips: boolean; export interface CredentialDetails { @@ -2285,12 +2268,19 @@ declare module "crypto" { export function getCurves(): string[]; export function getHashes(): string[]; export interface ECDH { - computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string | Buffer; - generateKeys(encoding?: string, format?: string): string | Buffer; - getPrivateKey(encoding?: string): string | Buffer; - getPublicKey(encodind?: string): string | Buffer; - setPrivateKey(private_key: string | Buffer, encoding?: string): void; - setPublicKey(publick_key: string | Buffer, encoding?: string): void; + generateKeys(): Buffer; + generateKeys(encoding: "latin1" | "hex" | "base64"): string; + generateKeys(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + computeSecret(other_public_key: Buffer): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; + computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(): Buffer; + getPublicKey(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + setPrivateKey(private_key: Buffer): void; + setPrivateKey(private_key: string, encoding: "latin1" | "hex" | "base64"): void; } export function createECDH(curve_name: string): ECDH; } From 2e5799034213ed1ab5c20232f8688d063eb71b32 Mon Sep 17 00:00:00 2001 From: york yao Date: Thu, 8 Sep 2016 07:38:50 +0800 Subject: [PATCH 3/3] fix type of verify in Verify and extract encode and format types --- node/node.d.ts | 71 +++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/node/node.d.ts b/node/node.d.ts index 995084c035..80ff265dfb 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -2167,25 +2167,32 @@ declare module "crypto" { export function createCredentials(details: CredentialDetails): Credentials; export function createHash(algorithm: string): Hash; export function createHmac(algorithm: string, key: string | Buffer): Hmac; + + type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1"; + type HexBase64Latin1Encoding = "latin1" | "hex" | "base64"; + type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary"; + type HexBase64BinaryEncoding = "binary" | "base64" | "hex"; + type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; + export interface Hash extends NodeJS.ReadWriteStream { update(data: string | Buffer): Hash; - update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Hash; + update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hash; digest(): Buffer; - digest(encoding: "latin1" | "hex" | "base64"): string; + digest(encoding: HexBase64Latin1Encoding): string; } export interface Hmac extends NodeJS.ReadWriteStream { update(data: string | Buffer): Hmac; - update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Hmac; + update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hmac; digest(): Buffer; - digest(encoding: "latin1" | "hex" | "base64"): string; + digest(encoding: HexBase64Latin1Encoding): string; } export function createCipher(algorithm: string, password: any): Cipher; export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; export interface Cipher extends NodeJS.ReadWriteStream { update(data: Buffer): Buffer; - update(data: string, input_encoding: "utf8" | "ascii" | "binary"): Buffer; - update(data: Buffer, input_encoding: any, output_encoding: "binary" | "base64" | "hex"): string; - update(data: string, input_encoding: "utf8" | "ascii" | "binary", output_encoding: "binary" | "base64" | "hex"): string; + update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: HexBase64BinaryEncoding): string; + update(data: string, input_encoding: Utf8AsciiBinaryEncoding, output_encoding: HexBase64BinaryEncoding): string; final(): Buffer; final(output_encoding: string): string; setAutoPadding(auto_padding?: boolean): void; @@ -2196,9 +2203,9 @@ declare module "crypto" { export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; export interface Decipher extends NodeJS.ReadWriteStream { update(data: Buffer): Buffer; - update(data: string, input_encoding: "binary" | "base64" | "hex"): Buffer; - update(data: Buffer, input_encoding: any, output_encoding: "utf8" | "ascii" | "binary"): string; - update(data: string, input_encoding: "binary" | "base64" | "hex", output_encoding: "utf8" | "ascii" | "binary"): string; + update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: Utf8AsciiBinaryEncoding): string; + update(data: string, input_encoding: HexBase64BinaryEncoding, output_encoding: Utf8AsciiBinaryEncoding): string; final(): Buffer; final(output_encoding: string): string; setAutoPadding(auto_padding?: boolean): void; @@ -2208,36 +2215,36 @@ declare module "crypto" { export function createSign(algorithm: string): Signer; export interface Signer extends NodeJS.WritableStream { update(data: string | Buffer): Signer; - update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Signer; + update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Signer; sign(private_key: string | { key: string; passphrase: string }): Buffer; - sign(private_key: string | { key: string; passphrase: string }, output_format: "latin1" | "hex" | "base64"): string; + sign(private_key: string | { key: string; passphrase: string }, output_format: HexBase64Latin1Encoding): string; } export function createVerify(algorith: string): Verify; export interface Verify extends NodeJS.WritableStream { update(data: string | Buffer): Verify; - update(data: string | Buffer, input_encoding: "utf8" | "ascii" | "latin1"): Verify; + update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Verify; verify(object: string, signature: Buffer): boolean; - verify(object: string, signature: string, signature_format: string): boolean; + verify(object: string, signature: string, signature_format: HexBase64Latin1Encoding): boolean; } export function createDiffieHellman(prime_length: number, generator?: number): DiffieHellman; export function createDiffieHellman(prime: Buffer): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64"): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64", generator: number | Buffer): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: "latin1" | "hex" | "base64", generator: string, generator_encoding: "latin1" | "hex" | "base64"): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | Buffer): DiffieHellman; + export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman; export interface DiffieHellman { generateKeys(): Buffer; - generateKeys(encoding: "latin1" | "hex" | "base64"): string; + generateKeys(encoding: HexBase64Latin1Encoding): string; computeSecret(other_public_key: Buffer): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; + computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; + computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; getPrime(): Buffer; - getPrime(encoding: "latin1" | "hex" | "base64"): string; + getPrime(encoding: HexBase64Latin1Encoding): string; getGenerator(): Buffer; - getGenerator(encoding: "latin1" | "hex" | "base64"): string; + getGenerator(encoding: HexBase64Latin1Encoding): string; getPublicKey(): Buffer; - getPublicKey(encoding: "latin1" | "hex" | "base64"): string; + getPublicKey(encoding: HexBase64Latin1Encoding): string; getPrivateKey(): Buffer; - getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; + getPrivateKey(encoding: HexBase64Latin1Encoding): string; setPublicKey(public_key: Buffer): void; setPublicKey(public_key: string, encoding: string): void; setPrivateKey(private_key: Buffer): void; @@ -2269,18 +2276,18 @@ declare module "crypto" { export function getHashes(): string[]; export interface ECDH { generateKeys(): Buffer; - generateKeys(encoding: "latin1" | "hex" | "base64"): string; - generateKeys(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + generateKeys(encoding: HexBase64Latin1Encoding): string; + generateKeys(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string; computeSecret(other_public_key: Buffer): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64"): Buffer; - computeSecret(other_public_key: string, input_encoding: "latin1" | "hex" | "base64", output_encoding: "latin1" | "hex" | "base64"): string; + computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; + computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; getPrivateKey(): Buffer; - getPrivateKey(encoding: "latin1" | "hex" | "base64"): string; + getPrivateKey(encoding: HexBase64Latin1Encoding): string; getPublicKey(): Buffer; - getPublicKey(encoding: "latin1" | "hex" | "base64"): string; - getPublicKey(encoding: "latin1" | "hex" | "base64", format: "compressed" | "uncompressed" | "hybrid"): string; + getPublicKey(encoding: HexBase64Latin1Encoding): string; + getPublicKey(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string; setPrivateKey(private_key: Buffer): void; - setPrivateKey(private_key: string, encoding: "latin1" | "hex" | "base64"): void; + setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void; } export function createECDH(curve_name: string): ECDH; }