Skip to content

Commit

Permalink
add DG padding bytes to passport metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
remicolin committed Jan 9, 2025
1 parent f7a0b6e commit 1b0293d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 25 deletions.
6 changes: 6 additions & 0 deletions app/src/screens/UserInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ const UserInfo: React.FC = () => {
/>
<Separator borderColor={separatorColor} />

<InfoRow
label="DG Padding Bytes"
value={passportMetaData?.dgPaddingBytes || 'None'}
/>
<Separator borderColor={separatorColor} />

<InfoRow
label="eContent Size"
value={passportMetaData?.eContentSize || 'None'}
Expand Down
40 changes: 15 additions & 25 deletions common/src/utils/parsePassportData.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { PassportData } from '../../../common/src/utils/types';
import { findSubarrayIndex, formatMrz, hash } from './utils';
import { findSubarrayIndex, formatMrz, getHashLen, hash } from './utils';
import { parseCertificateSimple } from './certificate_parsing/parseCertificateSimple';
import {
CertificateData,
Expand All @@ -15,6 +15,7 @@ export interface PassportMetadata {
dataGroups: string;
dg1HashFunction: string;
dg1HashOffset: number;
dgPaddingBytes: number;
eContentSize: number;
eContentHashFunction: string;
eContentHashOffset: number;
Expand Down Expand Up @@ -62,6 +63,16 @@ function findDG1HashInEContent(
}
return null;
}
function getDgPaddingBytes(passportData: PassportData, dg1HashFunction: string): number {
const formattedMrz = formatMrz(passportData.mrz);
const hashValue = hash(dg1HashFunction, formattedMrz);
const normalizedHash = (hashValue as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
const dg1HashOffset = findSubarrayIndex(passportData.eContent, normalizedHash);
const dg2Hash = passportData.dg2Hash;
const normalizedDg2Hash = (dg2Hash as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
const dg2HashOffset = findSubarrayIndex(passportData.eContent, normalizedDg2Hash);
return dg2HashOffset - dg1HashOffset - getHashLen(dg1HashFunction);
}

export function getCountryCodeFromMrz(mrz: string): string {
return mrz.substring(2, 5);
Expand All @@ -74,29 +85,7 @@ export function getCurveOrExponent(certData: CertificateData): string {
return (certData.publicKeyDetails as PublicKeyDetailsECDSA).curve;
}

function getSimplePublicKeyDetails(certData: CertificateData): string {
interface SimplePublicKeyDetails {
exponent?: string;
curve?: string;
hashAlgorithm?: string;
saltLength?: string;
}
const simplePublicKeyDetails: SimplePublicKeyDetails = {};
if (certData.signatureAlgorithm === 'rsapss' || certData.signatureAlgorithm === 'rsa') {
simplePublicKeyDetails.exponent = (certData.publicKeyDetails as PublicKeyDetailsRSA).exponent;
if (certData.signatureAlgorithm === 'rsapss') {
simplePublicKeyDetails.hashAlgorithm = (
certData.publicKeyDetails as PublicKeyDetailsRSAPSS
).hashAlgorithm;
simplePublicKeyDetails.saltLength = (
certData.publicKeyDetails as PublicKeyDetailsRSAPSS
).saltLength;
}
} else if (certData.signatureAlgorithm === 'ecdsa') {
simplePublicKeyDetails.curve = (certData.publicKeyDetails as PublicKeyDetailsECDSA).curve;
}
return JSON.stringify(simplePublicKeyDetails);
}




Expand All @@ -107,7 +96,7 @@ export function parsePassportData(passportData: PassportData): PassportMetadata

const dg1HashFunction = dg1HashInfo?.hashFunction || 'unknown';
const dg1HashOffset = dg1HashInfo?.offset || 0;

const dgPaddingBytes = getDgPaddingBytes(passportData, dg1HashFunction);
const { hashFunction: eContentHashFunction, offset: eContentHashOffset } = findHashSizeOfEContent(
passportData.eContent,
passportData.signedAttr
Expand Down Expand Up @@ -138,6 +127,7 @@ export function parsePassportData(passportData: PassportData): PassportMetadata
.join(',') || 'None',
dg1HashFunction,
dg1HashOffset,
dgPaddingBytes,
eContentSize: passportData.eContent?.length || 0,
eContentHashFunction,
eContentHashOffset,
Expand Down

0 comments on commit 1b0293d

Please sign in to comment.