@casual-simulation/crypto 2.0.14 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Encryption.d.ts +7 -0
- package/Encryption.js +7 -1
- package/Encryption.js.map +1 -1
- package/HashHelpers.d.ts +20 -0
- package/HashHelpers.js +63 -0
- package/HashHelpers.js.map +1 -1
- package/package.json +2 -2
package/Encryption.d.ts
CHANGED
|
@@ -2,6 +2,13 @@ interface DerivedKey {
|
|
|
2
2
|
salt: Uint8Array;
|
|
3
3
|
hash: Uint8Array;
|
|
4
4
|
}
|
|
5
|
+
export declare const KEY_LENGTH: number;
|
|
6
|
+
/**
|
|
7
|
+
* Derives a key from a password and salt.
|
|
8
|
+
* @param password The pasword to derive the key from.
|
|
9
|
+
* @param salt The salt to use.
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
5
12
|
export declare function deriveKey(password: Uint8Array, salt: Uint8Array): DerivedKey;
|
|
6
13
|
/**
|
|
7
14
|
* Encrypts the given data with the given password and returns the resulting cyphertext.
|
package/Encryption.js
CHANGED
|
@@ -4,7 +4,13 @@ import { fromByteArray, toByteArray } from 'base64-js';
|
|
|
4
4
|
const ITERATIONS = 16384;
|
|
5
5
|
const BLOCK_SIZE = 8;
|
|
6
6
|
const PARALLELISM = 1;
|
|
7
|
-
const KEY_LENGTH = secretbox.keyLength;
|
|
7
|
+
export const KEY_LENGTH = secretbox.keyLength;
|
|
8
|
+
/**
|
|
9
|
+
* Derives a key from a password and salt.
|
|
10
|
+
* @param password The pasword to derive the key from.
|
|
11
|
+
* @param salt The salt to use.
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
8
14
|
export function deriveKey(password, salt) {
|
|
9
15
|
const result = syncScrypt(password, salt, ITERATIONS, BLOCK_SIZE, PARALLELISM, KEY_LENGTH);
|
|
10
16
|
return {
|
package/Encryption.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Encryption.js","sourceRoot":"","sources":["Encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAOvD,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Encryption.js","sourceRoot":"","sources":["Encryption.ts"],"names":[],"mappings":"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"}
|
package/HashHelpers.d.ts
CHANGED
|
@@ -10,6 +10,13 @@ export declare function getHash(obj: any): string;
|
|
|
10
10
|
* @param obj The object to hash.
|
|
11
11
|
*/
|
|
12
12
|
export declare function getHashBuffer(obj: any): Buffer;
|
|
13
|
+
/**
|
|
14
|
+
* Creates a random password and returns it along with its hash.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createRandomPassword(): {
|
|
17
|
+
password: string;
|
|
18
|
+
hash: string;
|
|
19
|
+
};
|
|
13
20
|
/**
|
|
14
21
|
* Hashes the given password using scrypt and returns the result.
|
|
15
22
|
* @param password The password that should be hashed.
|
|
@@ -21,4 +28,17 @@ export declare function hashPassword(password: string): string;
|
|
|
21
28
|
* @param hash The hash to check the password against.
|
|
22
29
|
*/
|
|
23
30
|
export declare function verifyPassword(password: string, hash: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Hashes the given password using the given salt and returns the resulting base64 encoded hash.
|
|
33
|
+
* @param password The password to hash.
|
|
34
|
+
* @param salt The salt to use for the password. Must be a base64 encoded string.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hashPasswordWithSalt(password: string, salt: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Validates that the given password and salt match at least one of the given hashes.
|
|
39
|
+
* @param password The password to check.
|
|
40
|
+
* @param salt The base64 encoded salt to use for the password.
|
|
41
|
+
* @param hashes The hashes that they should match. These hashes should have been produced by hashPasswordWithSalt().
|
|
42
|
+
*/
|
|
43
|
+
export declare function verifyPasswordAgainstHashes(password: string, salt: string, hashes: string[]): boolean;
|
|
24
44
|
//# sourceMappingURL=HashHelpers.d.ts.map
|
package/HashHelpers.js
CHANGED
|
@@ -24,6 +24,18 @@ export function getHashBuffer(obj) {
|
|
|
24
24
|
sha.update(json);
|
|
25
25
|
return Buffer.from(sha.digest());
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a random password and returns it along with its hash.
|
|
29
|
+
*/
|
|
30
|
+
export function createRandomPassword() {
|
|
31
|
+
const passwordBytes = randomBytes(16); // 128-bit password
|
|
32
|
+
const passwordBase64 = fromByteArray(passwordBytes); // convert to human-readable string
|
|
33
|
+
const hash = hashPassword(passwordBase64);
|
|
34
|
+
return {
|
|
35
|
+
password: passwordBase64,
|
|
36
|
+
hash,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
27
39
|
/**
|
|
28
40
|
* Hashes the given password using scrypt and returns the result.
|
|
29
41
|
* @param password The password that should be hashed.
|
|
@@ -69,4 +81,55 @@ export function verifyPassword(password, hash) {
|
|
|
69
81
|
const hashBytes = deriveKey(passwordBytes, salt);
|
|
70
82
|
return fromByteArray(hashBytes.hash) === hashBase64;
|
|
71
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Hashes the given password using the given salt and returns the resulting base64 encoded hash.
|
|
86
|
+
* @param password The password to hash.
|
|
87
|
+
* @param salt The salt to use for the password. Must be a base64 encoded string.
|
|
88
|
+
*/
|
|
89
|
+
export function hashPasswordWithSalt(password, salt) {
|
|
90
|
+
if (!password) {
|
|
91
|
+
throw new Error('Invalid password. Must not be null or undefined.');
|
|
92
|
+
}
|
|
93
|
+
if (!salt) {
|
|
94
|
+
throw new Error('Invalid salt. Must not be null or undefined.');
|
|
95
|
+
}
|
|
96
|
+
const textEncoder = new TextEncoder();
|
|
97
|
+
const passwordBytes = textEncoder.encode(password);
|
|
98
|
+
const saltBytes = toByteArray(salt);
|
|
99
|
+
const hashBytes = deriveKey(passwordBytes, saltBytes);
|
|
100
|
+
return `vH1.${fromByteArray(hashBytes.hash)}`;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validates that the given password and salt match at least one of the given hashes.
|
|
104
|
+
* @param password The password to check.
|
|
105
|
+
* @param salt The base64 encoded salt to use for the password.
|
|
106
|
+
* @param hashes The hashes that they should match. These hashes should have been produced by hashPasswordWithSalt().
|
|
107
|
+
*/
|
|
108
|
+
export function verifyPasswordAgainstHashes(password, salt, hashes) {
|
|
109
|
+
if (!password) {
|
|
110
|
+
throw new Error('Invalid password. Must not be null or undefined.');
|
|
111
|
+
}
|
|
112
|
+
if (!salt) {
|
|
113
|
+
throw new Error('Invalid salt. Must not be null or undefined.');
|
|
114
|
+
}
|
|
115
|
+
if (!hashes) {
|
|
116
|
+
throw new Error('Invalid hashes. Must not be null or undefined.');
|
|
117
|
+
}
|
|
118
|
+
hashes = hashes.filter((h) => h.startsWith('vH1.'));
|
|
119
|
+
if (hashes.length <= 0) {
|
|
120
|
+
throw new Error('Invalid hashes. Must contain at least one valid hash.');
|
|
121
|
+
}
|
|
122
|
+
const textEncoder = new TextEncoder();
|
|
123
|
+
const passwordBytes = textEncoder.encode(password);
|
|
124
|
+
const saltBytes = toByteArray(salt);
|
|
125
|
+
const passwordHash = deriveKey(passwordBytes, saltBytes);
|
|
126
|
+
const passwordHashBase64 = fromByteArray(passwordHash.hash);
|
|
127
|
+
for (const hash of hashes) {
|
|
128
|
+
const withoutVersion = hash.slice('vH1.'.length);
|
|
129
|
+
if (withoutVersion === passwordHashBase64) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
72
135
|
//# sourceMappingURL=HashHelpers.js.map
|
package/HashHelpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HashHelpers.js","sourceRoot":"","sources":["HashHelpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HashHelpers.js","sourceRoot":"","sources":["HashHelpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@casual-simulation/crypto",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Crypto helpers used by AUX",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cryptography",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"scrypt-js": "3.0.1",
|
|
48
48
|
"tweetnacl": "1.0.3"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "61191ee46ea40ab2cc79d9d4cb85f5e98cdd7d38"
|
|
51
51
|
}
|