Skip to content

Cipher

Un Cipher est une interface qui normalise la logique de chiffrement d'un token. Son rôle est de prendre une valeur, produire une version chiffrée, puis permettre plus tard de la déchiffrer.

Il n'embarque aucune vérification métier. Il ne gère ni les claims, ni l'expiration, ni la signature, ni le cycle complet du token. Il encapsule uniquement la mécanique de encrypt et decrypt.

L'idée est de sortir cette logique de simples fonctions utilitaires pour l'encapsuler dans un contrat clair et réutilisable. C'est ensuite le tokenHandler qui s'appuie sur ce contrat pour intégrer le chiffrement dans un flux complet autour du token.

Un cipher peut être utilisé de deux façons :

  • comme un cipher déjà configuré, prêt à chiffrer et déchiffrer ;
  • comme un créateur de cipher, pour fournir la configuration plus tard.

Exemple

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
);

Syntaxe

Cipher

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

CreateCipher

CreateCipher représente une fonction qui reçoit des paramètres et retourne un Cipher.

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

Cipher.factory

La factory permet de créer un CreateCipher à partir de vos propres méthodes.

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>;

Ciphers fournis

La librairie fournit déjà plusieurs créateurs de ciphers prêts à l'emploi.

RSA-OAEP

  • Cipher.createRSAOAEP
  • Cipher.createRSAOAEP256

Ces deux ciphers utilisent une publicKey pour chiffrer et une privateKey pour déchiffrer.

Diffusé sous licence MIT.