@@ -74,47 +74,33 @@ public static string GetOriginForCallingApp(CallingAppInfo? callingAppInfo)
7474
7575 try
7676 {
77- var packageManager = Application . Context . PackageManager ;
78-
79- var packageInfo = packageManager ? . GetPackageInfo (
80- callingAppInfo . PackageName ,
81- PackageInfoFlags . Signatures
82- ) ;
83-
84- if ( packageInfo ? . Signatures == null || packageInfo . Signatures . Count == 0 )
77+ // Use the SigningInfo the framework already attached to CallingAppInfo
78+ var signers = callingAppInfo . SigningInfo ? . GetApkContentsSigners ( ) ;
79+ if ( signers == null || signers . Length == 0 )
8580 {
81+ Kp2aLog . Log ( $ "GetOriginForCallingApp: no signers in CallingAppInfo.SigningInfo for { callingAppInfo . PackageName } ") ;
8682 return AppKeyHashStringPrefix ;
8783 }
8884
89- // Get the first signature and extract the X.509 certificate
90- var signature = packageInfo . Signatures [ 0 ] ;
91-
92- // Parse the X.509 certificate from the signature (same as KeePassDX)
93- var certFactory = Java . Security . Cert . CertificateFactory . GetInstance ( "X.509" ) ;
94- var signatureBytes = signature . ToByteArray ( ) ;
95- using var memStream = new MemoryStream ( signatureBytes ) ;
96- var x509Cert = ( Java . Security . Cert . X509Certificate ) certFactory . GenerateCertificate ( memStream ) ;
97-
98- // Hash the DER-encoded certificate (not the signature!)
85+ // signers[0].ToByteArray() returns the raw DER-encoded X.509 certificate bytes
86+ var certDer = signers [ 0 ] . ToByteArray ( ) ;
9987 using var sha256 = System . Security . Cryptography . SHA256 . Create ( ) ;
100- var certEncoded = x509Cert ? . GetEncoded ( ) ;
101- if ( certEncoded == null )
102- {
103- return AppKeyHashStringPrefix ;
104- }
105- var hash = sha256 . ComputeHash ( certEncoded ) ;
88+ var hash = sha256 . ComputeHash ( certDer ) ;
10689 var base64Hash = Base64 . EncodeToString (
10790 hash ,
10891 Base64Flags . UrlSafe | Base64Flags . NoPadding | Base64Flags . NoWrap
10992 ) ;
11093
111- return $ "{ AppKeyHashStringPrefix } { base64Hash } ";
94+ var origin = $ "{ AppKeyHashStringPrefix } { base64Hash } ";
95+ Kp2aLog . Log ( $ "GetOriginForCallingApp: { callingAppInfo . PackageName } -> { origin } ") ;
96+ return origin ;
11297 }
11398 catch ( Exception e )
11499 {
115- Kp2aLog . Log ( $ "Error getting origin for { callingAppInfo . PackageName } : { e . Message } ") ;
100+ Kp2aLog . Log ( $ "GetOriginForCallingApp: error for { callingAppInfo . PackageName } : { e } ") ;
116101 return AppKeyHashStringPrefix ;
117102 }
118103 }
119104 }
105+
120106}
0 commit comments