SEL-544: Generate Mock DSC on mock-passport flow (#772)

* feat: Generate mock DSC on mock-passport flow

* Remove console log

* yarn format

* revert to mock dsc generation
This commit is contained in:
Seshanth.S🐺
2025-07-25 23:39:05 +05:30
committed by GitHub
parent 186daa655c
commit 4941b2ba58
3 changed files with 49 additions and 4 deletions

View File

@@ -3,6 +3,7 @@
import { useNavigation } from '@react-navigation/native';
import {
countryCodes,
generateMockDSC,
genMockIdDoc,
getSKIPEM,
IdDocInput,
@@ -228,7 +229,19 @@ const MockDataScreen: React.FC<MockDataScreenProps> = ({}) => {
}
}
idDocInput.birthDate = dobForGeneration;
const rawMockData = genMockIdDoc(idDocInput);
let mockDSC, rawMockData;
try {
mockDSC = await generateMockDSC(
idDocInput.signatureType || 'rsa_sha256_65537_2048',
);
rawMockData = genMockIdDoc(idDocInput, mockDSC);
} catch (error) {
console.warn(
'Falling back to default mock DSC. Error during mock DSC generation:',
error,
);
rawMockData = genMockIdDoc(idDocInput);
}
const skiPem = await getSKIPEM('staging');
const parsedMockData = initPassportDataParsing(rawMockData, skiPem);
await storePassportData(parsedMockData);

View File

@@ -18,6 +18,7 @@ import { parseDscCertificateData } from './src/utils/passports/passport_parsing/
import { getLeafCscaTree, getLeafDscTree } from './src/utils/trees.js';
import {
genMockIdDoc,
generateMockDSC,
genMockIdDocAndInitDataParsing,
IdDocInput,
} from './src/utils/passports/genMockIdDoc.js';
@@ -62,6 +63,7 @@ export {
PublicKeyDetailsECDSA,
PublicKeyDetailsRSA,
genMockIdDoc,
generateMockDSC,
genMockIdDocAndInitDataParsing,
buildSMT,
calculateUserIdentifierHash,

View File

@@ -1,7 +1,7 @@
// generate a mock id document
import { DocumentType, PassportData, SignatureAlgorithm } from '../types.js';
import { hashAlgosTypes } from '../../constants/constants.js';
import { API_URL_STAGING, hashAlgosTypes } from '../../constants/constants.js';
import { countries } from '../../constants/countries.js';
import { genDG1 } from './dg1.js';
import { getHashLen, hash } from '../hash.js';
@@ -44,12 +44,42 @@ const defaultIdDocInput: IdDocInput = {
sex: 'M',
};
export function genMockIdDoc(userInput: Partial<IdDocInput> = {}): PassportData {
export async function generateMockDSC(
signatureType: string
): Promise<{ privateKeyPem: string; dsc: string }> {
const response = await fetch(`${API_URL_STAGING}/api/v2/generate-dsc`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ signatureType }),
});
if (!response.ok) {
throw new Error(`Failed to generate DSC: ${response.status} ${response.statusText}`);
}
const data = await response.json();
if (!data || !data.data) {
throw new Error('Missing data in server response');
}
if (typeof data.data.privateKeyPem !== 'string' || typeof data.data.dsc !== 'string') {
throw new Error('Invalid DSC response format from server');
}
return { privateKeyPem: data.data.privateKeyPem, dsc: data.data.dsc };
}
export function genMockIdDoc(
userInput: Partial<IdDocInput> = {},
mockDSC?: { dsc: string; privateKeyPem: string }
): PassportData {
const mergedInput: IdDocInput = {
...defaultIdDocInput,
...userInput,
};
const { privateKeyPem, dsc } = getMockDSC(mergedInput.signatureType);
let privateKeyPem: string, dsc: string;
if (mockDSC) {
dsc = mockDSC.dsc;
privateKeyPem = mockDSC.privateKeyPem;
} else {
({ privateKeyPem, dsc } = getMockDSC(mergedInput.signatureType));
}
const dg1 = genDG1(mergedInput);
const dg1_hash = hash(mergedInput.dgHashAlgo, formatMrz(dg1));