Skip to content

Commit b3f746f

Browse files
committed
refactor
1 parent 83b2b50 commit b3f746f

5 files changed

Lines changed: 70 additions & 52 deletions

File tree

README.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ AES-GCM is extremely fast on modern CPUs, which have dedicated hardware accelera
1414
Using `bun`:
1515

1616
```shell
17-
bun add singlecrypt
17+
bun add singlecrypt-text
1818
```
1919

2020
## Methods
2121

22-
#### `createSymmetricCryptoKey`
22+
#### `createSymmetricKeyWithText`
2323

2424
Creates a symmetric `CryptoKey` object to be used in the following methods. This method also converts your value key to a SHA-256 hash. It takes two parameters:
2525

@@ -30,24 +30,24 @@ Returns a `Promise<CryptoKey>` containing a SHA-256 hash used to encrypt and dec
3030

3131
A `TypeError` may be thrown if there are problems with the string key.
3232

33-
### `encryptSymmetrically`
33+
### `encryptSymmetricallyText`
3434

3535
Encrypts a value with a symmetric `CryptoKey` previously generated. It takes three parameters:
3636

3737
1. A string value to be encrypted.
38-
2. The symmetric key generated with `createSymmetricCryptoKey`.
38+
2. The symmetric key generated with `createSymmetricKeyWithText`.
3939
3. A `TextEncoder` instance, if you want to reuse it (optional).
4040

4141
Returns a `Promise<string>` containing the encrypted value.
4242

4343
A `DOMException` may be thrown if the key is invalid or if the operation failed (e.g., AES-GCM plaintext longer than 2^39−256 bytes).
4444

45-
### `decryptSymmetrically`
45+
### `decryptSymmetricallyText`
4646

4747
Decrypts a value with a symmetric `CryptoKey` previously generated. It takes three parameters:
4848

4949
1. A string value to be decrypted.
50-
2. The symmetric key generated with `createSymmetricCryptoKey`.
50+
2. The symmetric key generated with `createSymmetricKeyWithText`.
5151
3. A `TextDecoder` instance, if you want to reuse it (optional).
5252

5353
Returns a `Promise<string>` containing the decrypted value.
@@ -66,26 +66,26 @@ Let's say you have a user ID in a server and you want the server to encrypt and
6666

6767
```typescript
6868
import {
69-
createSymmetricCryptoKey,
70-
encryptSymmetrically,
71-
decryptSymmetrically
69+
createSymmetricKeyWithText,
70+
encryptSymmetricallyText,
71+
decryptSymmetricallyText
7272
} from "singlecrypt";
7373

7474

75-
const userCryptoKey = await createSymmetricCryptoKey(
75+
const userCryptoKey = await createSymmetricKeyWithText(
7676
process.env.KEY_USER
7777
);
7878

7979

8080
export async function encryptUserId(value: string) {
81-
return await encryptSymmetrically(
81+
return await encryptSymmetricallyText(
8282
value,
8383
userCryptoKey
8484
);
8585
}
8686

8787
export async function decryptUserId(value: string) {
88-
return await decryptSymmetrically(
88+
return await decryptSymmetricallyText(
8989
value,
9090
userCryptoKey
9191
);
@@ -96,31 +96,31 @@ Or you can reuse `TextEncoder` and `TextDecoder` instances for slightly better p
9696

9797
```typescript
9898
import {
99-
createSymmetricCryptoKey,
100-
encryptSymmetrically,
101-
decryptSymmetrically
99+
createSymmetricKeyWithText,
100+
encryptSymmetricallyText,
101+
decryptSymmetricallyText
102102
} from "singlecrypt";
103103

104104

105105
const textEncoder = new TextEncoder();
106106
const textDecoder = new TextDecoder();
107107

108-
const userCryptoKey = await createSymmetricCryptoKey(
108+
const userCryptoKey = await createSymmetricKeyWithText(
109109
process.env.KEY_USER,
110110
textEncoder
111111
);
112112

113113

114114
export async function encryptUserId(value: string) {
115-
return await encryptSymmetrically(
115+
return await encryptSymmetricallyText(
116116
value,
117117
userCryptoKey,
118118
textEncoder
119119
);
120120
}
121121

122122
export async function decryptUserId(value: string) {
123-
return await decryptSymmetrically(
123+
return await decryptSymmetricallyText(
124124
value,
125125
userCryptoKey,
126126
textDecoder

index.d.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
/**
22
* Before encrypting and decrypting values, a symmetric `CryptoKey` must be created.
3+
* This method also converts your value key to a SHA-256 hash.
34
*
4-
* @param {string} value - String key to be hashed. A 32-byte random string is recommended.
5+
* @param {string} data - String key to be hashed. A 32-byte high entropy string is recommended.
56
* @param {TextEncoder} [textEncoder] - If you have an instance of a `TextEncoder`, you can reuse it.
6-
* @returns {Promise<CryptoKey>} A `CryptoKey` used to encrypt and decrypt strings.
7+
* @returns {Promise<CryptoKey>} A `CryptoKey` containing a SHA-256 hash used to encrypt and decrypt strings.
78
* @throws {TypeError} Thrown if `value` is invalid.
89
*/
9-
export function createSymmetricCryptoKey(value: string, textEncoder?: TextEncoder): Promise<CryptoKey>;
10+
export function createSymmetricKeyWithText(data: string, textEncoder?: TextEncoder): Promise<CryptoKey>;
1011
/**
11-
* Encrypts a value with a `CryptoKey` previously generated with `createSymmetricCryptoKey`.
12+
* Encrypts a value with a `CryptoKey` previously generated with `createSymmetricKeyWithText`.
1213
*
13-
* @param {string} value - Value to be encrypted.
14-
* @param {CryptoKey} key - The symmetric key generated with `createSymmetricCryptoKey`.
15-
* @param {TextEncoder} [textEncoder] - If you have an instance of a `TextEncoder`, you can reuse it.
14+
* @param {string} value - String value to be encrypted.
15+
* @param {CryptoKey} key - Symmetric key generated with `createSymmetricKeyWithText`.
1616
* @returns {Promise<string>} The value encrypted and encoded as a Base64 string.
1717
* @throws {DOMException} Raised when:
1818
* - The provided key is not valid.
1919
* - The operation failed (e.g., AES-GCM plaintext longer than 2^39−256 bytes).
2020
*/
21-
export function encryptSymmetrically(value: string, key: CryptoKey, textEncoder?: TextEncoder): Promise<string>;
21+
export function encryptSymmetricallyText(value: string, key: CryptoKey, textEncoder?: TextEncoder): Promise<string>;
2222
/**
23-
* Decrypts a value with a `CryptoKey` previously generated with `createSymmetricCryptoKey`.
23+
* Decrypts a value with a `CryptoKey` previously generated with `createSymmetricKeyWithText`.
2424
*
2525
* @param {string} value - Encrypted value to be decrypted.
26-
* @param {CryptoKey} key - The symmetric key used to encrypt the value.
26+
* @param {CryptoKey} key - Symmetric key used to encrypt the value.
2727
* @param {TextDecoder} [textDecoder] - If you have an instance of a `TextDecoder`, you can reuse it.
2828
* @returns {Promise<string>} The value decrypted.
2929
* @throws {TypeError} Thrown if `value` is not a string.
@@ -32,4 +32,4 @@ export function encryptSymmetrically(value: string, key: CryptoKey, textEncoder?
3232
* - The provided key is not valid.
3333
* - The operation failed.
3434
*/
35-
export function decryptSymmetrically(value: string, key: CryptoKey, textDecoder?: TextDecoder): Promise<string>;
35+
export function decryptSymmetricallyText(value: string, key: CryptoKey, textDecoder?: TextDecoder): Promise<string>;

index.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ const keyUsages = ["encrypt", "decrypt"]
99
* Before encrypting and decrypting values, a symmetric `CryptoKey` must be created.
1010
* This method also converts your value key to a SHA-256 hash.
1111
*
12-
* @param {string} value - String key to be hashed. A 32-byte random string is recommended.
12+
* @param {string} data - String key to be hashed. A 32-byte high entropy string is recommended.
1313
* @param {TextEncoder} [textEncoder] - If you have an instance of a `TextEncoder`, you can reuse it.
1414
* @returns {Promise<CryptoKey>} A `CryptoKey` containing a SHA-256 hash used to encrypt and decrypt strings.
1515
* @throws {TypeError} Thrown if `value` is invalid.
1616
*/
17-
export async function createSymmetricCryptoKey(
18-
value,
17+
export async function createSymmetricKeyWithText(
18+
data,
1919
textEncoder = new TextEncoder()
2020
) {
2121

2222
return (
2323
await crypto.subtle.importKey(
2424
"raw",
25-
await crypto.subtle.digest("SHA-256", textEncoder.encode(value)),
25+
await crypto.subtle.digest("SHA-256", textEncoder.encode(data)),
2626
encryptionAlgorithm,
2727
false,
2828
keyUsages
@@ -33,17 +33,16 @@ export async function createSymmetricCryptoKey(
3333

3434

3535
/**
36-
* Encrypts a value with a `CryptoKey` previously generated with `createSymmetricCryptoKey`.
36+
* Encrypts a value with a `CryptoKey` previously generated with `createSymmetricKeyWithText`.
3737
*
38-
* @param {string} value - Value to be encrypted.
39-
* @param {CryptoKey} key - The symmetric key generated with `createSymmetricCryptoKey`.
40-
* @param {TextEncoder} [textEncoder] - If you have an instance of a `TextEncoder`, you can reuse it.
38+
* @param {string} value - String value to be encrypted.
39+
* @param {CryptoKey} key - Symmetric key generated with `createSymmetricKeyWithText`.
4140
* @returns {Promise<string>} The value encrypted and encoded as a Base64 string.
4241
* @throws {DOMException} Raised when:
4342
* - The provided key is not valid.
4443
* - The operation failed (e.g., AES-GCM plaintext longer than 2^39−256 bytes).
4544
*/
46-
export async function encryptSymmetrically(
45+
export async function encryptSymmetricallyText(
4746
value,
4847
key,
4948
textEncoder = new TextEncoder()
@@ -66,10 +65,10 @@ export async function encryptSymmetrically(
6665

6766

6867
/**
69-
* Decrypts a value with a `CryptoKey` previously generated with `createSymmetricCryptoKey`.
68+
* Decrypts a value with a `CryptoKey` previously generated with `createSymmetricKeyWithText`.
7069
*
7170
* @param {string} value - Encrypted value to be decrypted.
72-
* @param {CryptoKey} key - The symmetric key used to encrypt the value.
71+
* @param {CryptoKey} key - Symmetric key used to encrypt the value.
7372
* @param {TextDecoder} [textDecoder] - If you have an instance of a `TextDecoder`, you can reuse it.
7473
* @returns {Promise<string>} The value decrypted.
7574
* @throws {TypeError} Thrown if `value` is not a string.
@@ -78,7 +77,7 @@ export async function encryptSymmetrically(
7877
* - The provided key is not valid.
7978
* - The operation failed.
8079
*/
81-
export async function decryptSymmetrically(
80+
export async function decryptSymmetricallyText(
8281
value,
8382
key,
8483
textDecoder = new TextDecoder()

index.test.ts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect, test } from "bun:test"
2-
import { createSymmetricCryptoKey, encryptSymmetrically, decryptSymmetrically } from "."
2+
import { createSymmetricKeyWithText, encryptSymmetricallyText, decryptSymmetricallyText } from "."
33

44

55
function randomString(length = 32) {
@@ -9,21 +9,40 @@ function randomString(length = 32) {
99

1010

1111
test("Generate a random symmetric CryptoKey", async() => {
12-
const key = await createSymmetricCryptoKey(randomString())
12+
const key = await createSymmetricKeyWithText(randomString())
1313
expect(key).toBeDefined()
1414
})
1515

1616

1717
test("Encrypt a random value", async() => {
18-
const key = await createSymmetricCryptoKey(randomString())
19-
expect(await encryptSymmetrically(randomString(), key)).toBeString()
18+
const key = await createSymmetricKeyWithText(randomString())
19+
expect(await encryptSymmetricallyText(randomString(), key)).toBeString()
2020
})
2121

2222

2323
test("Decrypt a random value", async() => {
24-
const symCryptoKey = await createSymmetricCryptoKey(randomString())
24+
const symCryptoKey = await createSymmetricKeyWithText(randomString())
2525
const randomValue = randomString()
26-
const encrypted = await encryptSymmetrically(randomValue, symCryptoKey)
27-
const decrypted = await decryptSymmetrically(encrypted, symCryptoKey)
26+
const encrypted = await encryptSymmetricallyText(randomValue, symCryptoKey)
27+
const decrypted = await decryptSymmetricallyText(encrypted, symCryptoKey)
2828
expect(randomValue === decrypted).toBeTrue()
29+
})
30+
31+
32+
test("Decrypt a random value with two different CryptoKey objects", async() => {
33+
const randomKeyString = randomString()
34+
const symCryptoKey = await createSymmetricKeyWithText(randomKeyString)
35+
const symCryptoKey2 = await createSymmetricKeyWithText(randomKeyString)
36+
const randomValue = randomString()
37+
const encrypted = await encryptSymmetricallyText(randomValue, symCryptoKey)
38+
const decrypted = await decryptSymmetricallyText(encrypted, symCryptoKey2)
39+
expect(randomValue === decrypted).toBeTrue()
40+
})
41+
42+
test("Check if encrypting and decrypting with different CryptoKey objects returns an error", async() => {
43+
const symCryptoKey = await createSymmetricKeyWithText(randomString())
44+
const symCryptoKey2 = await createSymmetricKeyWithText(randomString())
45+
const randomValue = randomString()
46+
const encrypted = await encryptSymmetricallyText(randomValue, symCryptoKey)
47+
expect(async() => await decryptSymmetricallyText(encrypted, symCryptoKey2)).toThrowError()
2948
})

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"name": "singlecrypt",
2+
"name": "singlecrypt-text",
33
"version": "1.0.0",
44
"author": "Stefan Samson <ss42701@outlook.com> (https://ssbit01.github.io/)",
5-
"repository": "github:SSbit01/singlecrypt",
5+
"repository": "github:SSbit01/singlecrypt-text",
66
"main": "index.js",
77
"bugs": {
8-
"url": "https://github.com/SSbit01/singlecrypt/issues"
8+
"url": "https://github.com/SSbit01/singlecrypt-text/issues"
99
},
1010
"description": "A simple, secure and fast symmetric encryption library that makes use of AES-GCM.",
1111
"engines": {
@@ -15,7 +15,7 @@
1515
"index.js",
1616
"index.d.ts"
1717
],
18-
"homepage": "https://github.com/SSbit01/singlecrypt#readme",
18+
"homepage": "https://github.com/SSbit01/singlecrypt-text#readme",
1919
"keywords": [
2020
"aes",
2121
"browser",

0 commit comments

Comments
 (0)