refactor(server): add fucntions without message sign/verify

This commit is contained in:
2025-07-06 18:34:06 +02:00
parent 246e001af9
commit 2e5d08d57c

View File

@@ -10,14 +10,11 @@ export type CreateChallengesOptions = {
difficulty?: number; difficulty?: number;
}; };
export async function createChallenges( export async function createChallengesRaw({
{ challengeCount = 50,
challengeCount = 50, challengeLength = 16,
challengeLength = 16, difficulty = 2,
difficulty = 2, }: CreateChallengesOptions): Promise<wire.Challenge> {
}: CreateChallengesOptions,
secret: string,
): Promise<wire.SignedData> {
const challenges = utils.createArray( const challenges = utils.createArray(
challengeCount, challengeCount,
(): wire.ChallengeEntry => { (): wire.ChallengeEntry => {
@@ -34,30 +31,33 @@ export async function createChallenges(
}, },
); );
const challenge: wire.Challenge = { return {
magic: wire.CHALLENGE_MAGIC, magic: wire.CHALLENGE_MAGIC,
challenges, challenges,
}; };
return await wire.serializeAndSignData(challenge, secret);
} }
export async function redeemChallengeSolution( export async function createChallenges(
{ challengesSigned, solutions }: wire.ChallengeSolution, options: CreateChallengesOptions,
secret: string, secret: string,
): Promise<wire.SignedData> { ): Promise<wire.SignedData> {
const challengesWire = await wire.verifyAndDeserializeData( return await wire.serializeAndSignData(
challengesSigned, createChallengesRaw(options),
wire.challengeSchema,
secret, secret,
); );
}
if (challengesWire.challenges.length !== solutions.length) { export async function redeemChallengeSolutionRaw(
challenges: wire.Challenge,
solutions: Array<string>,
): Promise<wire.Redeemed> {
if (challenges.challenges.length !== solutions.length) {
throw new Error( throw new Error(
`Number of solutions does not match the number of challenges`, `Number of solutions does not match the number of challenges`,
); );
} }
const verifyTasks = challengesWire.challenges.map(async (challenge, i) => { const verifyTasks = challenges.challenges.map(async (challenge, i) => {
const solution = solutions[i]!; const solution = solutions[i]!;
const isValid = await solver.verify( const isValid = await solver.verify(
wire.deserializeArray(challenge[0]), wire.deserializeArray(challenge[0]),
@@ -70,17 +70,31 @@ export async function redeemChallengeSolution(
}); });
await Promise.all(verifyTasks); await Promise.all(verifyTasks);
const redeemed: wire.Redeemed = { return {
magic: wire.REDEEMED_MAGIC, magic: wire.REDEEMED_MAGIC,
}; };
}
export async function redeemChallengeSolution(
{ challengesSigned, solutions }: wire.ChallengeSolution,
secret: string,
): Promise<wire.SignedData> {
const challenges = await wire.verifyAndDeserializeData(
challengesSigned,
wire.challengeSchema,
secret,
);
const redeemed = await redeemChallengeSolutionRaw(challenges, solutions);
return await wire.serializeAndSignData(redeemed, secret); return await wire.serializeAndSignData(redeemed, secret);
} }
export async function verifyRedeemed( export async function verifyRedeemed(
redeemedSigned: wire.SignedData, redeemedSigned: wire.SignedData,
secret: string, secret: string,
): Promise<void> { ): Promise<wire.Redeemed> {
await wire.verifyAndDeserializeData( return await wire.verifyAndDeserializeData(
redeemedSigned, redeemedSigned,
wire.redeemedSchema, wire.redeemedSchema,
secret, secret,