Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,41 @@ export declare class Cased25519KeyPairResult {
}
export type CASED25519KeyPairResult = Cased25519KeyPairResult

export declare class CasMlKemEncapResult {
ciphertext: Array<number>
sharedSecret: Array<number>
constructor(ciphertext: Array<number>, sharedSecret: Array<number>)
}
export type CASMlKemEncapResult = CasMlKemEncapResult

export declare class CasMlKemKeyPairResult {
secretKey: Array<number>
publicKey: Array<number>
constructor(secretKey: Array<number>, publicKey: Array<number>)
}
export type CASMlKemKeyPairResult = CasMlKemKeyPairResult

export declare class CasPbkdf2Result {
derivedKey: Array<number>
salt: Array<number>
constructor(derivedKey: Array<number>, salt: Array<number>)
}
export type CASPbkdf2Result = CasPbkdf2Result

export declare class CasrsaKeyPairResult {
privateKey: string
publicKey: string
constructor(privateKey: string, publicKey: string)
}
export type CASRSAKeyPairResult = CasrsaKeyPairResult

export declare class CasSlhDsaKeyPairResult {
signingKey: Array<number>
verificationKey: Array<number>
constructor(signingKey: Array<number>, verificationKey: Array<number>)
}
export type CASSlhDsaKeyPairResult = CasSlhDsaKeyPairResult

export declare class CaSx25519SecretPublicKeyResult {
publicKey: Array<number>
secretKey: Array<number>
Expand All @@ -39,18 +67,44 @@ export declare function aes128Decrypt(aesKey: Array<number>, nonce: Array<number

export declare function aes128Encrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>

export declare function aes128GcmSivDecrypt(aesKey: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>

export declare function aes128GcmSivEncrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>

export declare function aes128GcmSivKey(): Array<number>

export declare function aes128GcmSivKeyFromVec(keySlice: Array<number>): Array<number>

export declare function aes128GcmSivKeyFromX25519SharedSecret(sharedSecret: Array<number>): Array<number>

export declare function aes128Key(): Array<number>

export declare function aes128KeyFromVec(keySlice: Array<number>): Array<number>

export declare function aes128KeyFromX25519SharedSecret(sharedSecret: Array<number>): Array<number>

export declare function aes256Decrypt(aesKey: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>

export declare function aes256Encrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>

export declare function aes256GcmSivDecrypt(aesKey: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>

export declare function aes256GcmSivEncrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>

export declare function aes256GcmSivKey(): Array<number>

export declare function aes256GcmSivKeyFromVec(keySlice: Array<number>): Array<number>

export declare function aes256GcmSivKeyFromX25519SharedSecret(sharedSecret: Array<number>): Array<number>

export declare function aes256Key(): Array<number>

export declare function aes256KeyFromVec(keySlice: Array<number>): Array<number>

export declare function aes256KeyFromX25519SharedSecret(sharedSecret: Array<number>): Array<number>

export declare function aesGcmSivNonce(): Array<number>

export declare function aesNonce(): Array<number>

export declare function argon2Hash(password: string): string
Expand Down Expand Up @@ -105,6 +159,16 @@ export declare function hpkeEncrypt(plaintext: Array<number>, publicKey: Array<n

export declare function hpkeGenerateKeypair(): HpkeKeyResult

export declare function mlKem1024Decapsulate(secretKey: Array<number>, ciphertext: Array<number>): Array<number>

export declare function mlKem1024Encapsulate(publicKey: Array<number>): CasMlKemEncapResult

export declare function mlKem1024GenerateKeyPair(): CasMlKemKeyPairResult

export declare function pbkdf2Derive(password: Array<number>, numberOfIterations: number): CasPbkdf2Result

export declare function pbkdf2DeriveWithSalt(password: Array<number>, numberOfIterations: number, salt: Array<number>): Array<number>

export declare function scryptHash(passwordToHash: string): string

export declare function scryptHashParams(password: string, cpuMemoryCost: number, blockSize: number, parallelism: number): string
Expand All @@ -123,8 +187,16 @@ export declare function signEd25519(privateKey: Array<number>, message: Array<nu

export declare function signRsa(privateKey: string, hash: Array<number>): Array<number>

export declare function slhDsaGenerateKeyPair(): CasSlhDsaKeyPairResult

export declare function slhDsaSign(message: Array<number>, signingKey: Array<number>): Array<number>

export declare function slhDsaVerify(message: Array<number>, signature: Array<number>, verificationKey: Array<number>): boolean

export declare function verifyEd25519(publicKey: Array<number>, message: Array<number>, signature: Array<number>): boolean

export declare function verifyEd25519WithKeyPair(keyPair: Array<number>, message: Array<number>, signature: Array<number>): boolean

export declare function verifyRsa(publicKey: string, hash: Array<number>, signature: Array<number>): boolean

export declare function x25519DiffieHellman(mySecretKey: Array<number>, usersPublicKey: Array<number>): Array<number>
Expand Down
30 changes: 30 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -589,20 +589,41 @@ if (!nativeBinding) {
module.exports = nativeBinding
module.exports.Cased25519KeyPairResult = nativeBinding.Cased25519KeyPairResult
module.exports.CASED25519KeyPairResult = nativeBinding.CASED25519KeyPairResult
module.exports.CasMlKemEncapResult = nativeBinding.CasMlKemEncapResult
module.exports.CASMlKemEncapResult = nativeBinding.CASMlKemEncapResult
module.exports.CasMlKemKeyPairResult = nativeBinding.CasMlKemKeyPairResult
module.exports.CASMlKemKeyPairResult = nativeBinding.CASMlKemKeyPairResult
module.exports.CasPbkdf2Result = nativeBinding.CasPbkdf2Result
module.exports.CASPbkdf2Result = nativeBinding.CASPbkdf2Result
module.exports.CasrsaKeyPairResult = nativeBinding.CasrsaKeyPairResult
module.exports.CASRSAKeyPairResult = nativeBinding.CASRSAKeyPairResult
module.exports.CasSlhDsaKeyPairResult = nativeBinding.CasSlhDsaKeyPairResult
module.exports.CASSlhDsaKeyPairResult = nativeBinding.CASSlhDsaKeyPairResult
module.exports.CaSx25519SecretPublicKeyResult = nativeBinding.CaSx25519SecretPublicKeyResult
module.exports.CASx25519SecretPublicKeyResult = nativeBinding.CASx25519SecretPublicKeyResult
module.exports.HpkeEncryptResult = nativeBinding.HpkeEncryptResult
module.exports.HpkeKeyResult = nativeBinding.HpkeKeyResult
module.exports.aes128Decrypt = nativeBinding.aes128Decrypt
module.exports.aes128Encrypt = nativeBinding.aes128Encrypt
module.exports.aes128GcmSivDecrypt = nativeBinding.aes128GcmSivDecrypt
module.exports.aes128GcmSivEncrypt = nativeBinding.aes128GcmSivEncrypt
module.exports.aes128GcmSivKey = nativeBinding.aes128GcmSivKey
module.exports.aes128GcmSivKeyFromVec = nativeBinding.aes128GcmSivKeyFromVec
module.exports.aes128GcmSivKeyFromX25519SharedSecret = nativeBinding.aes128GcmSivKeyFromX25519SharedSecret
module.exports.aes128Key = nativeBinding.aes128Key
module.exports.aes128KeyFromVec = nativeBinding.aes128KeyFromVec
module.exports.aes128KeyFromX25519SharedSecret = nativeBinding.aes128KeyFromX25519SharedSecret
module.exports.aes256Decrypt = nativeBinding.aes256Decrypt
module.exports.aes256Encrypt = nativeBinding.aes256Encrypt
module.exports.aes256GcmSivDecrypt = nativeBinding.aes256GcmSivDecrypt
module.exports.aes256GcmSivEncrypt = nativeBinding.aes256GcmSivEncrypt
module.exports.aes256GcmSivKey = nativeBinding.aes256GcmSivKey
module.exports.aes256GcmSivKeyFromVec = nativeBinding.aes256GcmSivKeyFromVec
module.exports.aes256GcmSivKeyFromX25519SharedSecret = nativeBinding.aes256GcmSivKeyFromX25519SharedSecret
module.exports.aes256Key = nativeBinding.aes256Key
module.exports.aes256KeyFromVec = nativeBinding.aes256KeyFromVec
module.exports.aes256KeyFromX25519SharedSecret = nativeBinding.aes256KeyFromX25519SharedSecret
module.exports.aesGcmSivNonce = nativeBinding.aesGcmSivNonce
module.exports.aesNonce = nativeBinding.aesNonce
module.exports.argon2Hash = nativeBinding.argon2Hash
module.exports.argon2HashParams = nativeBinding.argon2HashParams
Expand Down Expand Up @@ -630,6 +651,11 @@ module.exports.hmacVerify = nativeBinding.hmacVerify
module.exports.hpkeDecrypt = nativeBinding.hpkeDecrypt
module.exports.hpkeEncrypt = nativeBinding.hpkeEncrypt
module.exports.hpkeGenerateKeypair = nativeBinding.hpkeGenerateKeypair
module.exports.mlKem1024Decapsulate = nativeBinding.mlKem1024Decapsulate
module.exports.mlKem1024Encapsulate = nativeBinding.mlKem1024Encapsulate
module.exports.mlKem1024GenerateKeyPair = nativeBinding.mlKem1024GenerateKeyPair
module.exports.pbkdf2Derive = nativeBinding.pbkdf2Derive
module.exports.pbkdf2DeriveWithSalt = nativeBinding.pbkdf2DeriveWithSalt
module.exports.scryptHash = nativeBinding.scryptHash
module.exports.scryptHashParams = nativeBinding.scryptHashParams
module.exports.scryptVerify = nativeBinding.scryptVerify
Expand All @@ -639,7 +665,11 @@ module.exports.sha512 = nativeBinding.sha512
module.exports.sha512Verify = nativeBinding.sha512Verify
module.exports.signEd25519 = nativeBinding.signEd25519
module.exports.signRsa = nativeBinding.signRsa
module.exports.slhDsaGenerateKeyPair = nativeBinding.slhDsaGenerateKeyPair
module.exports.slhDsaSign = nativeBinding.slhDsaSign
module.exports.slhDsaVerify = nativeBinding.slhDsaVerify
module.exports.verifyEd25519 = nativeBinding.verifyEd25519
module.exports.verifyEd25519WithKeyPair = nativeBinding.verifyEd25519WithKeyPair
module.exports.verifyRsa = nativeBinding.verifyRsa
module.exports.x25519DiffieHellman = nativeBinding.x25519DiffieHellman
module.exports.x25519GenerateSecretAndPublicKey = nativeBinding.x25519GenerateSecretAndPublicKey
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cas-typescript-sdk",
"version": "1.0.68",
"version": "1.1.000",
"description": "",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
Expand Down
3 changes: 2 additions & 1 deletion src-ts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ export * from "./sponges/index";
export * from "./message/index";
export * from "./signature/index";
export * from "./hybrid/index";
export * from "./compression/index";
export * from "./compression/index";
export * from "./pqc/index";
2 changes: 2 additions & 0 deletions src-ts/password-hashers/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Argon2Wrapper } from "./argon2-wrapper";
import { BCryptWrapper } from "./bcrypt-wrapper";
import { Pbkdf2Wrapper } from "./pbkdf2-wrapper";
import { ScryptWrapper } from "./scrypt-wrapper";

import { PasswordHasherType } from "./password-hasher-type";
Expand All @@ -10,5 +11,6 @@ export {
BCryptWrapper,
PasswordHasherFactory,
PasswordHasherType,
Pbkdf2Wrapper,
ScryptWrapper,
};
36 changes: 36 additions & 0 deletions src-ts/password-hashers/pbkdf2-wrapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {
CasPbkdf2Result,
pbkdf2Derive,
pbkdf2DeriveWithSalt,
} from "../../index";



export class Pbkdf2Wrapper {

/**
* Derives a 32 byte key from a password using PBKDF2 with HMAC-SHA3-256.
* A random salt is generated and returned alongside the derived key so the
* key can be re-derived later with deriveWithSalt.
* @param password
* @param numberOfIterations
* @returns CasPbkdf2Result
*/

public derive(password: Array<number>, numberOfIterations: number): CasPbkdf2Result {
return pbkdf2Derive(password, numberOfIterations);
}

/**
* Derives a 32 byte key from a password and caller-supplied salt using PBKDF2 with HMAC-SHA3-256.
* Deterministic: the same password, salt, and iteration count always produce the same key.
* @param password
* @param numberOfIterations
* @param salt
* @returns Array<number>
*/

public deriveWithSalt(password: Array<number>, numberOfIterations: number, salt: Array<number>): Array<number> {
return pbkdf2DeriveWithSalt(password, numberOfIterations, salt);
}
}
4 changes: 4 additions & 0 deletions src-ts/pqc/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { MlKem1024Wrapper } from "./ml-kem-wrapper";
import { SlhDsaWrapper } from "./slh-dsa-wrapper";

export { MlKem1024Wrapper, SlhDsaWrapper };
43 changes: 43 additions & 0 deletions src-ts/pqc/ml-kem-wrapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import {
CasMlKemEncapResult,
CasMlKemKeyPairResult,
mlKem1024Decapsulate,
mlKem1024Encapsulate,
mlKem1024GenerateKeyPair,
} from "../../index";



export class MlKem1024Wrapper {

/**
* Generates an ML-KEM-1024 (FIPS 203) key pair.
* The secret (decapsulation) key is 3168 bytes and the public (encapsulation) key is 1568 bytes.
* @returns CasMlKemKeyPairResult
*/

public generateKeyPair(): CasMlKemKeyPairResult {
return mlKem1024GenerateKeyPair();
}

/**
* Encapsulates to a public key, producing a 1568 byte ciphertext and a 32 byte shared secret.
* @param publicKey
* @returns CasMlKemEncapResult
*/

public encapsulate(publicKey: Array<number>): CasMlKemEncapResult {
return mlKem1024Encapsulate(publicKey);
}

/**
* Decapsulates a ciphertext with the secret key, recovering the 32 byte shared secret.
* @param secretKey
* @param ciphertext
* @returns Array<number>
*/

public decapsulate(secretKey: Array<number>, ciphertext: Array<number>): Array<number> {
return mlKem1024Decapsulate(secretKey, ciphertext);
}
}
45 changes: 45 additions & 0 deletions src-ts/pqc/slh-dsa-wrapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {
CasSlhDsaKeyPairResult,
slhDsaGenerateKeyPair,
slhDsaSign,
slhDsaVerify,
} from "../../index";



export class SlhDsaWrapper {

/**
* Generates an SLH-DSA (FIPS 205, SHAKE-128f parameter set) key pair.
* The signing key is 64 bytes and the verification key is 32 bytes.
* @returns CasSlhDsaKeyPairResult
*/

public generateKeyPair(): CasSlhDsaKeyPairResult {
return slhDsaGenerateKeyPair();
}

/**
* Signs a message with an SLH-DSA signing key. Signatures are large (~17 KB)
* and signing is noticeably slower than the other signature algorithms in this SDK.
* @param message
* @param signingKey
* @returns Array<number>
*/

public sign(message: Array<number>, signingKey: Array<number>): Array<number> {
return slhDsaSign(message, signingKey);
}

/**
* Verifies an SLH-DSA signature with a verification key.
* @param message
* @param signature
* @param verificationKey
* @returns boolean
*/

public verify(message: Array<number>, signature: Array<number>, verificationKey: Array<number>): boolean {
return slhDsaVerify(message, signature, verificationKey);
}
}
15 changes: 15 additions & 0 deletions src-ts/signature/ed25519-wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
generateEd25519Keys,
signEd25519,
verifyEd25519,
verifyEd25519WithKeyPair,
} from "../../index";


Expand Down Expand Up @@ -37,4 +38,18 @@ export class Ed25519Wrapper {
public verifyBytes(publicKey: number[], message: number[], signature: number[]): boolean {
return verifyEd25519(publicKey, message, signature);
}

/**
* Verifies a signature for a message with the given Ed25519 key pair (the 32 byte private key).
* Note: this uses non-strict verification, unlike verifyBytes which uses strict
* verification and rejects some edge-case signatures this method accepts.
* @param keyPair The 32 byte private key to verify the signature with
* @param message The signed message
* @param signature The signature to verify
* @returns True if the signature is valid, false otherwise
*/

public verifyWithKeyPairBytes(keyPair: number[], message: number[], signature: number[]): boolean {
return verifyEd25519WithKeyPair(keyPair, message, signature);
}
}
Loading
Loading