Skip to content

Commit 097c4a3

Browse files
committed
refactor: Remove base64 function overloading
Signed-off-by: Lukas <Lukas@hopae.io>
1 parent ce0aacc commit 097c4a3

File tree

7 files changed

+36
-38
lines changed

7 files changed

+36
-38
lines changed

src/base64url.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
import { Base64 } from 'js-base64';
22

3-
const encode = (input: string): string => Base64.encodeURI(input);
3+
export const Base64urlEncode = Base64.encodeURI;
44

5-
const decode = (input: string): string => {
6-
return Base64.decode(input);
7-
};
5+
export const Base64urlDecode = Base64.decode;
86

9-
const Uint8ArrayToBase64Url = (input: Uint8Array): string =>
7+
export const Uint8ArrayToBase64Url = (input: Uint8Array): string =>
108
Base64.fromUint8Array(input, true);
11-
12-
export const Base64Url = {
13-
encode,
14-
decode,
15-
Uint8ArrayToBase64Url,
16-
};

src/decoy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { HasherAndAlg, SaltGenerator } from './type';
2-
import { Base64Url } from './base64url';
2+
import { Uint8ArrayToBase64Url } from './base64url';
33

44
export const createDecoy = async (
55
hash: HasherAndAlg,
@@ -8,5 +8,5 @@ export const createDecoy = async (
88
const { hasher, alg } = hash;
99
const salt = await saltGenerator(16);
1010
const decoy = await hasher(salt, alg);
11-
return Base64Url.Uint8ArrayToBase64Url(decoy);
11+
return Uint8ArrayToBase64Url(decoy);
1212
};

src/disclosure.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { Base64Url } from './base64url';
1+
import {
2+
Uint8ArrayToBase64Url,
3+
Base64urlDecode,
4+
Base64urlEncode,
5+
} from './base64url';
26
import { SDJWTException } from './error';
37
import { HasherAndAlg } from './type';
48

@@ -32,8 +36,8 @@ export class Disclosure<T> {
3236
public static async fromEncode<T>(s: string, hash: HasherAndAlg) {
3337
const { hasher, alg } = hash;
3438
const digest = await hasher(s, alg);
35-
const digestStr = Base64Url.Uint8ArrayToBase64Url(digest);
36-
const item = JSON.parse(Base64Url.decode(s)) as DisclosureData<T>;
39+
const digestStr = Uint8ArrayToBase64Url(digest);
40+
const item = JSON.parse(Base64urlDecode(s)) as DisclosureData<T>;
3741
return Disclosure.fromArray<T>(item, digestStr);
3842
}
3943

@@ -42,7 +46,7 @@ export class Disclosure<T> {
4246
}
4347

4448
public encode() {
45-
return Base64Url.encode(JSON.stringify(this.decode()));
49+
return Base64urlEncode(JSON.stringify(this.decode()));
4650
}
4751

4852
public decode(): DisclosureData<T> {
@@ -55,7 +59,7 @@ export class Disclosure<T> {
5559
const { hasher, alg } = hash;
5660
if (!this._digest) {
5761
const hash = await hasher(this.encode(), alg);
58-
this._digest = Base64Url.Uint8ArrayToBase64Url(hash);
62+
this._digest = Uint8ArrayToBase64Url(hash);
5963
}
6064

6165
return this._digest;

src/jwt.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Base64Url } from './base64url';
1+
import { Base64urlDecode, Base64urlEncode } from './base64url';
22
import { SDJWTException } from './error';
33
import { Base64urlString, Signer, Verifier } from './type';
44

@@ -37,8 +37,8 @@ export class Jwt<
3737
}
3838

3939
return {
40-
header: JSON.parse(Base64Url.decode(header)),
41-
payload: JSON.parse(Base64Url.decode(payload)),
40+
header: JSON.parse(Base64urlDecode(header)),
41+
payload: JSON.parse(Base64urlDecode(payload)),
4242
signature: signature,
4343
};
4444
}
@@ -75,8 +75,8 @@ export class Jwt<
7575
throw new SDJWTException('Sign Error: Invalid JWT');
7676
}
7777

78-
const header = Base64Url.encode(JSON.stringify(this.header));
79-
const payload = Base64Url.encode(JSON.stringify(this.payload));
78+
const header = Base64urlEncode(JSON.stringify(this.header));
79+
const payload = Base64urlEncode(JSON.stringify(this.payload));
8080
const data = `${header}.${payload}`;
8181
this.signature = await signer(data);
8282

@@ -88,8 +88,8 @@ export class Jwt<
8888
throw new SDJWTException('Serialize Error: Invalid JWT');
8989
}
9090

91-
const header = Base64Url.encode(JSON.stringify(this.header));
92-
const payload = Base64Url.encode(JSON.stringify(this.payload));
91+
const header = Base64urlEncode(JSON.stringify(this.header));
92+
const payload = Base64urlEncode(JSON.stringify(this.payload));
9393
const signature = this.signature;
9494
const compact = `${header}.${payload}.${signature}`;
9595

@@ -101,8 +101,8 @@ export class Jwt<
101101
throw new SDJWTException('Verify Error: Invalid JWT');
102102
}
103103

104-
const header = Base64Url.encode(JSON.stringify(this.header));
105-
const payload = Base64Url.encode(JSON.stringify(this.payload));
104+
const header = Base64urlEncode(JSON.stringify(this.header));
105+
const payload = Base64urlEncode(JSON.stringify(this.payload));
106106
const data = `${header}.${payload}`;
107107

108108
const verified = verifier(data, this.signature);

src/test/base64url.spec.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1-
import { Base64Url } from '../base64url';
1+
import {
2+
Base64urlDecode,
3+
Base64urlEncode,
4+
Uint8ArrayToBase64Url,
5+
} from '../base64url';
26

37
describe('Base64url', () => {
48
const raw = 'abcdefghijklmnopqrstuvwxyz';
59
const encoded = 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo';
610
test('Encode', () => {
7-
expect(Base64Url.encode(raw)).toStrictEqual(encoded);
11+
expect(Base64urlEncode(raw)).toStrictEqual(encoded);
812
});
913
test('Decode', () => {
10-
expect(Base64Url.decode(encoded)).toStrictEqual(raw);
14+
expect(Base64urlDecode(encoded)).toStrictEqual(raw);
1115
});
1216
test('Encode and decode', () => {
1317
const str = 'hello world';
14-
expect(Base64Url.decode(Base64Url.encode(str))).toStrictEqual(str);
18+
expect(Base64urlDecode(Base64urlEncode(str))).toStrictEqual(str);
1519
});
1620
test('Uint8Array', () => {
1721
const str = 'hello world';
1822
const uint8 = new TextEncoder().encode(str);
19-
expect(Base64Url.Uint8ArrayToBase64Url(uint8)).toStrictEqual(
20-
Base64Url.encode(str),
21-
);
23+
expect(Uint8ArrayToBase64Url(uint8)).toStrictEqual(Base64urlEncode(str));
2224
});
2325
});

src/test/decoy.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createDecoy } from '../decoy';
2-
import { Base64Url } from '../base64url';
2+
import { Base64urlEncode } from '../base64url';
33
import { digest, generateSalt } from './crypto.spec';
44

55
const hash = {
@@ -20,7 +20,7 @@ describe('Decoy', () => {
2020
// * Contents: ["6Ij7tM-a5iVPGboS5tmvVA", "email", "johndoe@example.com"]
2121
test('apply hasher and saltGenerator', async () => {
2222
const decoyValue = await createDecoy(hash, () =>
23-
Base64Url.encode(
23+
Base64urlEncode(
2424
'["6Ij7tM-a5iVPGboS5tmvVA", "email", "johndoe@example.com"]',
2525
),
2626
);

src/test/disclosure.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { generateSalt, digest as hasher } from './crypto.spec';
22
import { Disclosure } from '../disclosure';
33
import { SDJWTException } from '../error';
4-
import { Base64Url } from '../base64url';
4+
import { Base64urlEncode } from '../base64url';
55

66
const hash = { alg: 'SHA256', hasher };
77

@@ -115,7 +115,7 @@ describe('Disclosure', () => {
115115
});
116116

117117
test('digest disclosure #2', async () => {
118-
const encoded = Base64Url.encode(TestDataDraft7.claimTests[0].contents);
118+
const encoded = Base64urlEncode(TestDataDraft7.claimTests[0].contents);
119119
expect(encoded).toStrictEqual(TestDataDraft7.claimTests[0].disclosure);
120120

121121
const disclosure = await Disclosure.fromEncode(

0 commit comments

Comments
 (0)