Skip to content

Cipher ​

A Cipher is an interface that normalizes token encryption logic. Its role is to take a value, produce an encrypted version, then later decrypt it.

It does not embed any business validation. It does not manage claims, expiration, signatures, or the full token lifecycle. It only encapsulates the encrypt and decrypt mechanics.

The idea is to move this logic away from plain utility functions and encapsulate it in a clear, reusable contract. The tokenHandler then builds on that contract to integrate encryption into a complete flow around the token.

A cipher can be used in two ways:

  • as an already configured cipher, ready to encrypt and decrypt;
  • as a cipher creator, so configuration can be provided later.

Example ​

ts
import { 
Cipher
,
decodeBase64Url
,
decodeText
,
encodeBase64Url
} from "@duplojs/json-web-token";
const
createCustomCipher
=
Cipher
.
factory
(
"CUSTOM", (
params
: {
prefix
: string },
algorithm
) => ({
encrypt
(
value
) {
return
encodeBase64Url
(`${
algorithm
}:${
params
.
prefix
}:${
value
}`);
},
decrypt
(
value
) {
const
rawValue
=
decodeText
(
decodeBase64Url
(
value
));
return
rawValue
.
slice
(`${
algorithm
}:${
params
.
prefix
}:`.
length
);
}, }), ); const
cipher
=
createCustomCipher
({
prefix
: "my-prefix",
}); const
encrypted
= await
cipher
.
encrypt
("user:1");
const
decrypted
= await
cipher
.
decrypt
(
encrypted
);

Syntax ​

Cipher ​

typescript
interface Cipher<
	GenericAlgorithm extends string = string
> {
	readonly algorithm: GenericAlgorithm;
	encrypt(element: string): MaybePromise<string>;
	decrypt(element: string): MaybePromise<string>;
}

CreateCipher ​

CreateCipher is a function that receives parameters and returns a Cipher.

typescript
interface CreateCipher<
	GenericAlgorithm extends string,
	GenericParams extends unknown,
> {
	readonly algorithm: GenericAlgorithm;
	(params: NoInfer<GenericParams>): Cipher<GenericAlgorithm>;
}

Cipher.factory ​

The factory creates a CreateCipher from your own methods.

typescript
function factory<
	const GenericAlgorithm extends string,
	GenericMethodsParams extends unknown,
>(
	algorithm: GenericAlgorithm,
	methods: (
		params: GenericMethodsParams,
		algorithm: NoInfer<GenericAlgorithm>,
	) => {
		encrypt(element: string): MaybePromise<string>;
		decrypt(element: string): MaybePromise<string>;
	},
): CreateCipher<GenericAlgorithm, GenericMethodsParams>;

Built-in ciphers ​

The library already provides several ready-to-use cipher creators.

RSA-OAEP ​

  • Cipher.createRSAOAEP
  • Cipher.createRSAOAEP256

Both ciphers use a publicKey to encrypt and a privateKey to decrypt.

Released under the MIT license.